文件上传-PHP上传一张大图像,并像Photoshop一样按比例调整大小


file upload - PHP Uploading a Large image and resizing with proportion like Photoshop

简短介绍。我们目前必须根据我们网站上的产品图像制作小型、中型和大型图像。我不是PHP的奇才,我想我仍然会尝试自动化这场噩梦。

我们上传的图像和拇指的尺寸低于

800 width x 1400 width LARGE
300 width x 525 width  THUMB

我的PHP脚本的问题是,它只是按比例缩放大小。我希望它能够像在Photoshop中那样缩小,你只需点击shift,图像就会缩小。我正在尝试使用imagecopyresized,但运气不好。

<?php
// PHP UPLOAD SCRIPT
// VALIDATION OF FORM
if($_FILES['user_image']['type'] == "image/jpeg" && $_FILES['user_image']['size'] < 3000000)
{
    // VARS
    $target_folder = 'images/'; 
    $upload_image = $target_folder.basename($_FILES['user_image']['name']); 
    // UPLOAD FUNCTION
    if(move_uploaded_file($_FILES['user_image']['tmp_name'], $upload_image)) 
    {
        // VARS FOR FILE NAMES
        $thumbnail = $target_folder."medium_x.jpg";
        $actual = $target_folder."large_x.jpg";
      // THUMBNAIL SIZE
        list($width, $height) = getimagesize($upload_image);
        $newwidth = "300"; 
        $newheight = "525";
        // VARS FOR CALL BACK
        $thumb = imagecreatetruecolor($newwidth, $newheight);
        $source = imagecreatefromjpeg($upload_image);
        // RESIZE WITH PROPORTION LIKE PHOTOSHOP HOLDING SHIFT
        imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
        // MAKE NEW FILES
        imagejpeg($thumb, $thumbnail, 100);
        // FILE RENAMES
        rename($upload_image, $actual);
        {
            // SUCCESS MESSAGES
            ?>
            <p>
                Image Successfully uploaded!<br />
                Actual image: <?=$actual;?><br />
                Thumbnail image: <?=$thumbnail;?><br />
                <h1>Large</h1>
                <img src="<?=$actual;?>"/><br /><br />
                <h1>Medium</h1>
                <img src="<?=$thumbnail;?>"/><br /><br />
            </p>
            <?
        }
        // FAILED MESSAGES
    }
    else
    {
        echo 'Upload failed.';
    }
}
else
{
        // NOT A JPEG
        echo 'Not a JPEG';
}
// END OF SCRIPT
?>

如何在没有拉伸图像的情况下正确调整大小?有可能吗?

在没有PHP代码的情况下实现这一点的最简单方法是使用ImageMagick。请参阅此处的示例和示例命令行:http://www.imagemagick.org/Usage/resize/#fill

(可以使用exec()或类似方法从PHP调用)

编辑:实现如下:

if($_FILES['user_image']['type'] == "image/jpeg" && $_FILES['user_image']['size'] < 3000000)
{
    // VARS
    $target_folder = 'images/'; 
    $upload_image = $target_folder.basename($_FILES['user_image']['name']);
    $thumbnail = $target_folder."medium_x.jpg";
    $actual = $target_folder."large_x.jpg";
    $newwidth = "300"; 
    $newheight = "525";
    if(move_uploaded_file($_FILES['user_image']['tmp_name'], $upload_image)) 
    {
        exec('convert '.$upload_image.' -resize '.$newwidth.'x'.$newheight.'^ '.$thumbnail);
        rename($upload_image, $actual);
    }
}
...
etc

你可以优化处理上传的方式,但我不想太彻底地改变你的代码结构,因为我不知道它周围是什么。但基本上,你把图像推到ImageMagick的convert上,它就会发挥作用,这很神奇。

如果你想裁剪和缩放,exec命令应该是:

exec('convert '.$upload_image.' -resize '.$newwidth.'x'.$newheight.'^ -gravity center -extent '.$newwidth.'x'.$newheight.' '.$thumbnail);

看看这个代码片段。做你需要的事。基本上用于在创建拇指时保持比例。http://snipplr.com/view/753/