猿问

在PHP中调整图像大小

在PHP中调整图像大小

我想编写一些PHP代码,自动调整通过表单上传到147x147px的任何图像的大小,但我不知道如何处理(我是一个相对的PHP新手)。

到目前为止,我已经成功地上传了图片,文件类型被识别,名字被清理,但是我想在代码中添加调整大小的功能。例如,我有一个测试映像,它是2.3MB,维度是1331x1331,我希望代码能够缩小它的大小,我猜这也会极大地压缩图像的文件大小。

到目前为止,我得到了以下信息:

if ($_FILES) {
                //Put file properties into variables
                $file_name = $_FILES['profile-image']['name'];
                $file_size = $_FILES['profile-image']['size'];
                $file_tmp_name = $_FILES['profile-image']['tmp_name'];

                //Determine filetype
                switch ($_FILES['profile-image']['type']) {
                    case 'image/jpeg': $ext = "jpg"; break;
                    case 'image/png': $ext = "png"; break;
                    default: $ext = ''; break;
                }

                if ($ext) {
                    //Check filesize
                    if ($file_size < 500000) {
                        //Process file - clean up filename and move to safe location
                        $n = "$file_name";
                        $n = ereg_replace("[^A-Za-z0-9.]", "", $n);
                        $n = strtolower($n);
                        $n = "avatars/$n";
                        move_uploaded_file($file_tmp_name, $n);
                    } else {
                        $bad_message = "Please ensure your chosen file is less than 5MB.";
                    }
                } else {
                    $bad_message = "Please ensure your image is of filetype .jpg or.png.";
                }
            }$query = "INSERT INTO users (image) VALUES ('$n')";mysql_query($query) or die("Insert failed. " . mysql_error() 
            . "<br />" . $query);


Helenr
浏览 675回答 3
3回答

慕的地8271018

您需要使用任何一个PHP的ImageMagick或GD函数用于处理图像。例如,对于GD,它很简单,就像.function&nbsp;resize_image($file,&nbsp;$w,&nbsp;$h,&nbsp;$crop=FALSE)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;list($width,&nbsp;$height)&nbsp;=&nbsp;getimagesize($file); &nbsp;&nbsp;&nbsp;&nbsp;$r&nbsp;=&nbsp;$width&nbsp;/&nbsp;$height; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($crop)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($width&nbsp;>&nbsp;$height)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$width&nbsp;=&nbsp;ceil($width-($width*abs($r-$w/$h))); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$height&nbsp;=&nbsp;ceil($height-($height*abs($r-$w/$h))); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$newwidth&nbsp;=&nbsp;$w; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$newheight&nbsp;=&nbsp;$h; &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($w/$h&nbsp;>&nbsp;$r)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$newwidth&nbsp;=&nbsp;$h*$r; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$newheight&nbsp;=&nbsp;$h; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$newheight&nbsp;=&nbsp;$w/$r; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$newwidth&nbsp;=&nbsp;$w; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;$src&nbsp;=&nbsp;imagecreatefromjpeg($file); &nbsp;&nbsp;&nbsp;&nbsp;$dst&nbsp;=&nbsp;imagecreatetruecolor($newwidth,&nbsp;$newheight); &nbsp;&nbsp;&nbsp;&nbsp;imagecopyresampled($dst,&nbsp;$src,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;$newwidth,&nbsp;$newheight,&nbsp;$width,&nbsp;$height); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$dst;}你可以叫这个函数,就像.$img&nbsp;=&nbsp;resize_image(‘/path/to/some/image.jpg’,&nbsp;200,&nbsp;200);从个人经验来看,GD的图像重采样也大大减少了文件大小,特别是当重采样原始数码相机图像时。

慕妹3146593

如果你不关心纵横比(也就是说,你想把图像强制到一个特定的维度),下面是一个简化的答案。//&nbsp;for&nbsp;jpg&nbsp;function&nbsp;resize_imagejpg($file,&nbsp;$w,&nbsp;$h)&nbsp;{ &nbsp;&nbsp;&nbsp;list($width,&nbsp;$height)&nbsp;=&nbsp;getimagesize($file); &nbsp;&nbsp;&nbsp;$src&nbsp;=&nbsp;imagecreatefromjpeg($file); &nbsp;&nbsp;&nbsp;$dst&nbsp;=&nbsp;imagecreatetruecolor($w,&nbsp;$h); &nbsp;&nbsp;&nbsp;imagecopyresampled($dst,&nbsp;$src,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;$w,&nbsp;$h,&nbsp;$width,&nbsp;$height); &nbsp;&nbsp;&nbsp;return&nbsp;$dst;} &nbsp;//&nbsp;for&nbsp;pngfunction&nbsp;resize_imagepng($file,&nbsp;$w,&nbsp;$h)&nbsp;{ &nbsp;&nbsp;&nbsp;list($width,&nbsp;$height)&nbsp;=&nbsp;getimagesize($file); &nbsp;&nbsp;&nbsp;$src&nbsp;=&nbsp;imagecreatefrompng($file); &nbsp;&nbsp;&nbsp;$dst&nbsp;=&nbsp;imagecreatetruecolor($w,&nbsp;$h); &nbsp;&nbsp;&nbsp;imagecopyresampled($dst,&nbsp;$src,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;$w,&nbsp;$h,&nbsp;$width,&nbsp;$height); &nbsp;&nbsp;&nbsp;return&nbsp;$dst;}//&nbsp;for&nbsp;giffunction&nbsp;resize_imagegif($file,&nbsp;$w,&nbsp;$h)&nbsp;{ &nbsp;&nbsp;&nbsp;list($width,&nbsp;$height)&nbsp;=&nbsp;getimagesize($file); &nbsp;&nbsp;&nbsp;$src&nbsp;=&nbsp;imagecreatefromgif($file); &nbsp;&nbsp;&nbsp;$dst&nbsp;=&nbsp;imagecreatetruecolor($w,&nbsp;$h); &nbsp;&nbsp;&nbsp;imagecopyresampled($dst,&nbsp;$src,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;$w,&nbsp;$h,&nbsp;$width,&nbsp;$height); &nbsp;&nbsp;&nbsp;return&nbsp;$dst;}现在让我们来处理上传部分。第一步,上传文件到您想要的目录。然后根据文件类型(jpg、png或gif)调用上述函数之一,并传递上传文件的绝对路径,如下所示:&nbsp;//&nbsp;jpg&nbsp;&nbsp;change&nbsp;the&nbsp;dimension&nbsp;750,&nbsp;450&nbsp;to&nbsp;your&nbsp;desired&nbsp;values &nbsp;$img&nbsp;=&nbsp;resize_imagejpg('path/image.jpg',&nbsp;750,&nbsp;450);返回值$img是一个资源对象。我们可以保存到新的位置或覆盖原始位置,如下所示:&nbsp;//&nbsp;again&nbsp;for&nbsp;jpg &nbsp;imagejpeg($img,&nbsp;'path/newimage.jpg');希望这能帮上忙。有关调整大小的更多信息,请查看这些链接。Imagick:regzeImage和Imagejpeg()
随时随地看视频慕课网APP
我要回答