Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP上传一个大图像,并像Photoshop那样按比例调整大小_Php_File Upload_Upload_Photoshop_Image Resizing - Fatal编程技术网

PHP上传一个大图像,并像Photoshop那样按比例调整大小

PHP上传一个大图像,并像Photoshop那样按比例调整大小,php,file-upload,upload,photoshop,image-resizing,Php,File Upload,Upload,Photoshop,Image Resizing,简短的简报。我们目前必须根据我们网站上的产品图片制作小型、中型和大型图片。我不是PHP高手,我想我还是会尝试自动化这个噩梦 我们上传的图片和拇指的尺寸如下 800 width x 1400 width LARGE 300 width x 525 width THUMB 我的PHP脚本的问题是,它只是根据比例调整大小。我希望它能够像在Photoshop中那样缩小,只需单击shift键,图像就会缩小。我正在尝试使用imagecopyresized,但运气不佳 <?php // PHP UP

简短的简报。我们目前必须根据我们网站上的产品图片制作小型、中型和大型图片。我不是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代码的情况下实现这一点的最简单方法是使用Image Magick。请参见此处的示例和示例命令行:

(可以使用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
if($\u文件['user\u image']['type']==“image/jpeg”&&$\u文件['user\u image']['size']<3000000)
{
//瓦尔斯
$target_folder='images/';
$upload_image=$target_folder.basename($_FILES['user_image']['name']);
$thumbnail=$target_folder.“medium_x.jpg”;
$actual=$target\u folder.“large\u x.jpg”;
$newwidth=“300”;
$newheight=“525”;
如果(移动上传的文件($上传文件['user\u image']['tmp\u name'],$upload\u image))
{
exec('convert'.$upload_image'.-调整大小'.$newwidth'.x'.$newheight'.^.$缩略图);
重命名($upload\u image,$actual);
}
}
...
等
你可以优化你处理上传的方式,但我不想太彻底地改变你的代码结构,因为我不知道它是怎么回事。但基本上,您将图像推送到ImageMagick的
转换
,它将发挥神奇的作用

如果要裁剪和缩放,exec命令将为:


exec('convert'.$upload_image.'-调整大小'.$newwidth.'x'.$newheight.'^-重心-范围'.$newwidth.'x'.$newheight.'.$缩略图)

查看此代码段。你需要什么就做什么。基本上用于在创建拇指时保持比率。

如何在脚本中集成命令行功能。你是说用上面链接中的引用替换
imagecopyresized
命令吗?不需要执行命令行命令就可以使用它。Imagick已经封装在一个很好的php库中,命令行更快,文档更完整。当一个简单的exec()可以完成所有的艰苦工作时,我不认为增加PHP开销有什么意义?我喜欢这个非常简单的选项,而不会弄乱我的PHP代码。谢谢对不起,我该如何实现这一点?