通过上传 PHP 在多个图像上以相同的比例调整大小

Posted

技术标签:

【中文标题】通过上传 PHP 在多个图像上以相同的比例调整大小【英文标题】:Resizing with same ratio on multiple images from upload PHP 【发布时间】:2017-08-31 20:26:39 【问题描述】:

我已经敲了好几个小时的脑袋,我一生都无法弄清楚如何使用简单的表格在上传时以相同的比例调整图像的大小。如果有人上传大于 2048px 水平或垂直的图像,我想将其调整为 2048px 的大小,然后将其保存在文件夹中。

由于我基本上只用我的表格从头开始,很遗憾我没有什么可以向您展示,但主要是在搜索和阅读有关 GD 的信息,但对我不起作用...

非常感谢任何提示!

编辑:

if(isset($con, $_POST['save_button']))
    // IMAGE PROCESSING
    $name = $_FILES['file_upload']['name'];
    $tmp_name = $_FILES['file_upload']['tmp_name'];
    $type = $_FILES['file_upload']['type'];
    $size = $_FILES['file_upload']['size'];
    $error = $_FILES['file_upload']['error'];

    move_uploaded_file($tmp_name, "social_images/$name.jpg");

    function resize_image($img, $w, $h, $crop=FALSE) 
        list($width, $height) = getimagesize($img);
        $r = $width / $height;
        if ($crop) 
            if ($width > $height) 
                $width = ceil($width-($width*abs($r-$w/$h)));
             else 
                $height = ceil($height-($height*abs($r-$w/$h)));
            
            $newwidth = $w;
            $newheight = $h;
         else 
            if ($w/$h > $r) 
                $newwidth = $h*$r;
                $newheight = $h;
             else 
                $newheight = $w/$r;
                $newwidth = $w;
            
        
        $src = imagecreatefromjpeg($img);
        $dst = imagecreatetruecolor($newwidth, $newheight);
        imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
        return $dst;
    

    $img = resize_image("social_images/$name.jpg", 780, 780);

    header("location: index.php");
    exit();

【问题讨论】:

【参考方案1】:

全新重试和重新测试:

<?php
function shazam($file, $w, $h) 
    list($width, $height) = getimagesize($file);

    if ($width > $height) 
        $r = ($w / $width);
        $newwidth = $w;
        $newheight = ceil($height * $r);
     

    if ($width < $height) 
        $r = ($h / $height);
        $newheight = $h;
        $newwidth = ceil($width * $r);
     

    if ($width == $height) 
        $newheight = $h;
        $newwidth = $w;
    

    $src = imagecreatefromjpeg($file);
    $tgt = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresampled($tgt, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

    return $tgt;


$img = shazam("thepicwithpath.jpg", 850, 850);
imagejpeg($img, "theresizedpicwithpath.jpg", 75);
?>

请注意,最后的 imagejpeg() 是实际生成新文件的内容。

【讨论】:

剩下的就是这里:***.com/questions/14649645/resize-image-in-php 感谢您的快速回复!我已经尝试了一段时间,但似乎仍然没有掌握它的窍门。请您看一下代码好吗?编辑了帖子 不用担心。请查看已知工作示例的答案(公平地说,我只用风景对其进行了测试,但我相当有信心)。

以上是关于通过上传 PHP 在多个图像上以相同的比例调整大小的主要内容,如果未能解决你的问题,请参考以下文章

以统一大小调整多个图像的大小并保持比例

PHP图像调整大小和裁剪功能

Javascript图像调整大小

在 PHP 中将图像裁剪为正方形,而不是调整为相同的纵横比

调整大小后通过鼠标连续调整其余图像的大小,并保持比例

在 PHP 中调整图像大小