在上传时将复制的图像调整为缩略图


Resize copied image on upload as thumbnail

我正在开发一个上传器并慢慢让它工作,我一次上传 3 张图像,并将每张图像的数组设置为键,增量为 ++1。 我想在将图像复制到缩略图文件夹之前调整图像大小。

我有这个代码。

一切都与它一起工作。如您所见,我开始获取文件信息,但在那之后我完全陷入了以最大宽度 xpx 和高度按比例调整图像大小以匹配图像而不会看起来失真的之后该怎么做。

任何帮助将不胜感激。谢谢。

编辑 --- 我自己开始研究它,想知道这是否是我正在做的事情的正确方法。

<?php
if (isset($_POST['addpart'])) {
    $image = $_FILES['images']['tmp_name'];
    $name  = $_POST['username'];
    $i     = 0;
    foreach ($image as $key) {
        $fileData   = pathinfo(basename($_FILES["images"]["name"][$i]));
        $fileName[] = $name . '_' . uniqid() . '.' . $fileData['extension'];
        move_uploaded_file($key, "image/" . end($fileName));
        copy("image/" . end($fileName), "image_thumbnail/" . end($fileName));  

         // START -- THE RESIZER THAT IS BEING WORKED ON 
        $source  = "image_thumb/" . end($fileName);
        $dest    = "image_thumb/" . end($fileName);
        $quality = 100;
        $scale   = 1 / 2;
        $imsize = getimagesize($source);
        $x      = $scale * $imsize[0];
        $y      = $scale * $imsize[1];
        $im    = imagecreatefromjpeg($source);
        $newim = imagecreatetruecolor($x, $y);
        imagecopyresampled($newim, $im, 0, 0, 0, 0, $x, $y, $imsize[0], $imsize[1]);
        imagejpeg($newim, $dest, $quality);
        // END -- THE RESIZER THAT IS BEING WORKED ON 
        $i++;
    }
    echo 'Uploaded<br>';
    echo 'Main Image - ' . $fileName[0] . '<br>';
    echo 'Extra Image 1 - ' . $fileName[1] . '<br>';
    echo 'Extra Image 2 - ' . $fileName[2] . '<br>';
    echo '<hr>';
}
?>

谢谢

使用 GD 库。

  1. 使用 imagecreatefromstring() 创建输入图像对象,例如:imagecreatefromstring(file_get_contents($_FILES['images']['tmp_name'][$i]))

    这是最简单的方法。

    另一种选择是检测文件类型并使用imagecreatefromjpeg ()imagecreatefrompng()等功能。

  2. 使用 imagecreate() 创建输出空图像

  3. 使用 imagecopyresampled() 或 imagecopyressize() 调整图像大小并将其从输入图像复制+粘贴到输出图像

  4. 使用像imagejpeg()这样的函数保存输出图像

  5. 使用图像销毁()清理内存

PHP 内置的图像处理命令使您的代码难以理解和维护。我建议你使用一个库,它以更有效的方式包装它。

例如,如果使用干预/图像,则代码将如下所示:

<?php
// target file to manipulate
$filename = $_FILES['images']['tmp_name'];
// create image instance
$img = Image::make($filename);
// resize to width, height
$img->resize(320, 240);
// save it!
$img->save('thumbs/'. uniqid() . '.' . pathinfo($filename, PATHINFO_EXTENSION));

在此处阅读完整文档:http://image.intervention.io/use/uploads