【问题标题】:Resize copied image on upload as thumbnail将上传时复制的图像调整为缩略图大小
【发布时间】:2015-01-17 17:18:23
【问题描述】:

我正在开发一个上传器并慢慢让它工作,我一次上传 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>';

}
?>

谢谢

【问题讨论】:

    标签: php upload resize


    【解决方案1】:

    使用GD library

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

      这是最简单的方法。

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

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

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

    4. 使用imagejpeg()等函数保存输出图像

    5. 使用imagedestroy()清理内存

    【讨论】:

    • @PeterSmith 你能指导我完成它,因为我正在一点一点地构建它
    【解决方案2】:

    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

    【讨论】:

    • 非常感谢,我完成了我的代码,它会根据设定的宽度缩放图像。
    猜你喜欢
    • 1970-01-01
    • 2012-01-06
    • 2012-03-16
    • 2018-02-25
    • 2011-09-03
    • 2013-06-22
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多