在 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);

答案 1

您需要使用PHP的ImageMagickGD函数来处理图像。

例如,使用GD,它就像...

function resize_image($file, $w, $h, $crop=FALSE) {
    list($width, $height) = getimagesize($file);
    $r = $width / $height;
    if ($crop) {
        if ($width > $height) {
            $width = ceil($width-($width*abs($r-$w/$h)));
        } else {
            $height = ceil($height-($height*abs($r-$w/$h)));
        }
        $newwidth = $w;
        $newheight = $h;
    } else {
        if ($w/$h > $r) {
            $newwidth = $h*$r;
            $newheight = $h;
        } else {
            $newheight = $w/$r;
            $newwidth = $w;
        }
    }
    $src = imagecreatefromjpeg($file);
    $dst = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

    return $dst;
}

你可以调用这个函数,就像这样...

$img = resize_image(‘/path/to/some/image.jpg’, 200, 200);

从个人经验来看,GD的图像重采样确实可以显着减小文件大小,尤其是在对原始数码相机图像进行重新采样时。


答案 2

只需使用PHP的GD函数(如图像刻度):

语法:

imagescale ( $image , $new_width , $new_height )

例:

步骤:1 读取文件

$image_name =  'path_of_Image/Name_of_Image.jpg|png|gif';      

步骤:2:加载图像文件

 $image = imagecreatefromjpeg($image_name); // For JPEG
//or
 $image = imagecreatefrompng($image_name);   // For PNG
 //or
 $image = imagecreatefromgif($image_name);   // For GIF

步骤:3:我们的救生员以“_”|缩放图像

   $imgResized = imagescale($image , 500, 400); // width=500 and height = 400
//  $imgResized is our final product

注意:图像刻度适用于 (PHP 5 > = 5.5.0, PHP 7)

步骤:4:将调整大小的图像保存到所需的目录。

imagejpeg($imgResized, 'path_of_Image/Name_of_Image_resized.jpg'); //for jpeg
imagepng($imgResized, 'path_of_Image/Name_of_Image_resized.png'); //for png

来源 : 点击阅读更多


推荐