注: 代码取自网上
1.依赖 php 扩展 php-imagick
2.压缩原理:
1)读取图片内容,对图片进行裁剪或者缩放;
2)再转化为jpg(jpeg)进行数据量压缩:jpg(jpeg)都支持压缩率(GD库也支持)
/**
* @param $image string 图片内容file_get_contens stream_get_contens
* @param $width int 图片宽 阈值
* @param $height int 图片高 阈值
* @param $crop bool 如果图片宽或者高度超过上面的阈值,将进行 true:裁剪 false 缩放
* @return array [string, 'jpg'] 正常返回处理后的图片内容,可以直接存为jpg
*/
function custom_resize($image, $width, $height, $crop = false) {
try{
$imagick = new Imagick();
$imagick->readImageBlob($image);
$w = $imagick->getImageWidth();
$h = $imagick->getImageHeight();
if ($w > $width || $h > $height) {
if ($crop) {//裁剪
$imagick->cropThumbnailImage($width, $height);
} else {//缩放
$imagick->resizeImage($width, $height, Imagick::FILTER_CATROM, 1, true);
}
}
$imagick->setImageFormat('JPEG');
$imagick->setImageCompression(Imagick::COMPRESSION_JPEG);
$a = $imagick->getImageCompressionQuality() * 0.75;
$a == 0 && $a = 75;
$imagick->setImageCompressionQuality($a);
$imagick->stripImage();
$blob = $imagick->getImageBlob();
$imagick->clear();
$imagick->destroy();
return [$blob, 'jpg'];
}catch (ImagickException $e){
Log::warning('imagick-resize-failed', ['err' => $e->getMessage()]);
return ['', ''];
}
}
来源:oschina
链接:https://my.oschina.net/u/3659172/blog/4316333