上传时复制的图像大小为缩略图

时间:2014-11-20 00:17:25

标签: php upload resize

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

我有这个代码。

一切都有效。 正如你所看到的,我开始获取文件信息,但之后我完全坚持要按照比例调整图像大小,最大宽度为 x px和高度以匹配它而不看扭曲。

任何帮助都会非常感激。谢谢。

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

<?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>';

}
?>

感谢

2 个答案:

答案 0 :(得分:1)

使用GD library

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

    这是最简单的方法。

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

  2. 使用imagecreate()
  3. 创建输出空图像
  4. 使用imagecopyresampled()imagecopyresized()调整图片大小并将其从输入图像复制+粘贴到输出图像
  5. 使用imagejpeg()
  6. 等功能保存输出图像
  7. 使用imagedestroy()
  8. 清理内存

答案 1 :(得分:0)

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

例如,如果您使用Intervention/image,则代码将如下所示:

<?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