为了账号安全,请及时绑定邮箱和手机立即绑定

在PHP中调整图像大小

在PHP中调整图像大小

PHP
Helenr 2019-06-23 14:33:31
在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);
查看完整描述

3 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

您需要使用任何一个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的图像重采样也大大减少了文件大小,特别是当重采样原始数码相机图像时。


查看完整回答
反对 回复 2019-06-23
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

如果你不关心纵横比(也就是说,你想把图像强制到一个特定的维度),下面是一个简化的答案。

// for jpg function resize_imagejpg($file, $w, $h) {
   list($width, $height) = getimagesize($file);
   $src = imagecreatefromjpeg($file);
   $dst = imagecreatetruecolor($w, $h);
   imagecopyresampled($dst, $src, 0, 0, 0, 0, $w, $h, $width, $height);
   return $dst;}

 // for pngfunction resize_imagepng($file, $w, $h) {
   list($width, $height) = getimagesize($file);
   $src = imagecreatefrompng($file);
   $dst = imagecreatetruecolor($w, $h);
   imagecopyresampled($dst, $src, 0, 0, 0, 0, $w, $h, $width, $height);
   return $dst;}// for giffunction resize_imagegif($file, $w, $h) {
   list($width, $height) = getimagesize($file);
   $src = imagecreatefromgif($file);
   $dst = imagecreatetruecolor($w, $h);
   imagecopyresampled($dst, $src, 0, 0, 0, 0, $w, $h, $width, $height);
   return $dst;}

现在让我们来处理上传部分。第一步,上传文件到您想要的目录。然后根据文件类型(jpg、png或gif)调用上述函数之一,并传递上传文件的绝对路径,如下所示:

 // jpg  change the dimension 750, 450 to your desired values
 $img = resize_imagejpg('path/image.jpg', 750, 450);

返回值$img是一个资源对象。我们可以保存到新的位置或覆盖原始位置,如下所示:

 // again for jpg
 imagejpeg($img, 'path/newimage.jpg');

希望这能帮上忙。有关调整大小的更多信息,请查看这些链接。Imagick:regzeImageImagejpeg()


查看完整回答
反对 回复 2019-06-23
  • 3 回答
  • 0 关注
  • 674 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信