本文概述
- 调整图像大小并返回原始数据
- 降低或提高质量
- 信息
调整图像大小和降低图像质量的方法有很多, 创建自己的函数可能会更好, 因为它可能更适合你的需求。
【如何在没有Imagick的情况下在PHP中调整图像大小并降低质量】在这种情况下, 我们将向你展示一种使用纯PHP而不使用Imagick库来调整图像大小并降低质量的方法。
调整图像大小并返回原始数据要调整文件中图像的大小, 请使用以下方法。它支持png, jpg和gif格式, 你可以扩展支持的方法来修改函数中的switch语句。
/** * Resize image given a height and width and return raw image data. * * Note : You can add more supported image formats adding more parameters to the switch statement. * * @param type $file filepath * @param type $w width in px * @param type $h height in px * @param type $crop Crop or not * @return type */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;
}}//Get file extension$exploding = explode(".", $file);
$ext = end($exploding);
switch($ext){case "png":$src = http://www.srcmini.com/imagecreatefrompng($file);
break;
case"jpeg":case "jpg":$src = http://www.srcmini.com/imagecreatefromjpeg($file);
break;
case"gif":$src = http://www.srcmini.com/imagecreatefromgif($file);
break;
default:$src = imagecreatefromjpeg($file);
break;
}$dst = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
return $dst;
}
先前的方法会从图片中返回变量原始数据, 因此你需要根据文件类型手动保存它, 即:
$filename = "/var/www/images/mynormalimage.png";
$resizedFilename = "/var/www/images/myresizedimage.png";
// resize the image with 300x300$imgData = http://www.srcmini.com/resize_image($filename, 300, 300);
// save the image on the given filenameimagepng($imgData, $resizedFilename);
// or according to the original format, use another method// imagejpeg($imgData, $resizedFilename);
// imagegif($imgData, $resizedFilename);
这是一种非常简单的解决方案, 可以快速调整正常图像的大小, 但是请注意, 建议你使用上一个功能的逻辑并实施一个符合你需要的新功能。
降低或提高质量请注意, 使用imagejpeg, imagepng等方法, 你可以在第三个参数中使用数值(INT)指定图像的质量:
// Get the data from a png file$imageData = http://www.srcmini.com/resize_image("myfolder/myfile.png", 500, 500);
// Give a name to your file with the full patj$filepath = "myfolder/myresizedimage.png";
$quality = 0;
imagepng($imageData, $filepath, $quality);
每个保存方法都支持第三个参数, 该参数指定图像的质量。此值设置压缩级别:0-9或-1, 其中0根本没有压缩, 1是最快, 但是产生较大的文件, 9提供最佳压缩(最小的文件), 但是压缩时间长, 以及-1选择编译到zlib库中的默认值。
你甚至可以创建compress方法, 如下所示:
/** * Decrease or increase the quality of an image without resize it. * * @param type $source * @param type $destination * @param type $quality * @return type */function compress($source, $destination, $quality) {//Get file extension$exploding = explode(".", $source);
$ext = end($exploding);
switch($ext){case "png":$src = http://www.srcmini.com/imagecreatefrompng($source);
break;
case"jpeg":case "jpg":$src = http://www.srcmini.com/imagecreatefromjpeg($source);
break;
case"gif":$src = http://www.srcmini.com/imagecreatefromgif($source);
break;
default:$src = imagecreatefromjpeg($source);
break;
}switch($ext){case"png":imagepng($src, $destination, $quality);
break;
case "jpeg":case "jpg":imagejpeg($src, $destination, $quality);
break;
case "gif":imagegif($src, $destination, $quality);
break;
default:imagejpeg($src, $destination, $quality);
break;
}return $destination;
}
它期望需要修改的文件的文件路径。第二个参数是文件的目标路径, 可以与第一个参数相同以便替换它。
信息请记住, 有许多受支持的图像类型需要处理, PHP支持以下方法:
- imagecreatefromgd。
- imagecreatefromgd2。
- imagecreatefromgd2part。
- imagecreatefromgif。
- imagecreatefromjpeg。
- imagecreatefrompng。
- imagecreatefromstring。
- imagecreatefromwbmp。
- imagecreatefromwebp。
- imagecreatefromxbm。
- imagecreatefromxpm。
- imagegd。
- imagegd2。
- imagegd2part。
- imagecreatefromgif。
- imagejpeg。
- imagepng。
- 图像字符串。
- imagewbmp。
- imagewebp。
- imagexbm。
- imagexpm。
推荐阅读
- 如何在Linux和Windows环境中使用PHP执行Shell命令而无需等待结果(异步)
- 如何在CSS中使用超赞的字体如医学图标
- 从zip安装android studio时,Windows 10上没有SDK
- Facebook SDK错误'必需'app_id“密钥未在配置中提供
- ERROR ITMS-90502 App Store上传 - Xcode
- Ion Android发送multipart / form-data
- 为什么使用INSERT / * + APPEND * /()
- IIS让我对app pool用户感到困惑
- 从com.google.android.gms.vision.CameraSource访问相机并增加/减少预览亮度