使用PHP Imagick转换图片后文件体积大幅上涨如何优化?
解决方案
TIFF转换体积过高优化(保留原画质与尺寸)
默认Imagick导出TIFF时采用无压缩存储模式,会直接写入所有像素的原始RGB数据,因此体积远高于本身为有损压缩格式的JPG。你可以通过开启TIFF的无损压缩配置,在完全不损失画质和尺寸的前提下大幅降低输出文件体积:
$image = new \Imagick('image_path_file.jpg'); $image->setImageFormat("tiff"); // 开启LZW无损压缩,兼容性最佳 $image->setImageCompression(\Imagick::COMPRESSION_LZW); // 无损压缩场景下设置质量为100即可 $image->setImageCompressionQuality(100); $image->writeImage("path_new_file.tiff");
可选的压缩方案:
- 若需要更高压缩率,可将
\Imagick::COMPRESSION_LZW替换为\Imagick::COMPRESSION_ZIP(即DEFLATE压缩),体积可进一步降低10%-20%,仅部分老旧工具不支持该压缩格式的TIFF。 - 若允许极微画质损失,可使用
\Imagick::COMPRESSION_JPEG并设置压缩质量为90+,输出体积可接近原JPG大小,但属于有损压缩,会丢失原始像素信息,需根据使用场景选择。
JPG转存体积上涨优化
Imagick默认存储JPG时采用95的压缩质量,通常高于iPhone等设备拍摄JPG的默认压缩质量,因此转存后体积会上涨。转存时沿用原文件的压缩质量即可解决:
$image = new \Imagick('image_path_file.jpg'); // 获取原文件的压缩质量参数 $originalQuality = $image->getImageCompressionQuality(); $image->setImageCompressionQuality($originalQuality); $image->writeImage("path_new_file.jpg");
内容的提问来源于stack exchange,提问作者choidk
相关产品推荐
相关产品推荐

