我有一个 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%,但图像仍然是扁平的。