我有一个 PHP 照片分享应用程序,用户上传的图像会使用 ImageMagick 转换为各种缩略图格式。
作为一种看似“聪明”的节省文件大小的方式,我正在去除这些缩略图中的 exif 信息,如下所示:
$imagick = new Imagick($image);
$imagick->stripImage();
$imagick->writeImage($image);
这个方法可以去除EXIF信息,其中一个30KB的缩略图可节省12KB,变成18KB。当在单个页面上展示多个这样的缩略图时,可以显著地减少页面加载时间。
然而问题是它效果太好了。生成的图像似乎失去了很多颜色信息,与其未被处理的版本相比看起来“平淡”。
根据我的研究,我认为以下一项或两项都是正确的:
- Imagick在去除信息过程中丢弃了必要的颜色配置文件信息
- Imagick在保存图像时重新压缩了图像,导致质量损失
无论问题的原因是什么,我正在寻找一种以不影响图像质量或颜色本身的方式去除EXIF信息。
这是否可能呢?
更新:
基于Gerald Schneider的答案,我尝试在“去除”图像之前将质量设置强制设置为100%:
$imagick = new Imagick($image);
$imagick->setCompression(imagick::COMPRESSION_JPEG);
$imagick->setCompressionQuality(100);
$imagick->stripImage();
$imagick->writeImage($image);
很遗憾,问题仍然存在。以下是示例输出,即使将质量设置为100%,图像仍然被压扁。
getCompressionQuality()
和setCompressionQuality()
了吗? - Gerald Schneider