如何在不损失图像质量的情况下从JPG中删除exif?
2022-08-30 19:11:30
我有一个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%,但图像仍然会展平。