我具有其中用户上载的图像的大小被调整成使用ImageMagick各种拇指格式PHP照片共享应用程序。如何从JPG中删除exif而不会丢失图像质量?
这样看似“聪明”的方式来保存文件的大小,我剥从这些大拇指EXIF信息如下:
$imagick = new Imagick($image);
$imagick->stripImage();
$imagick->writeImage($image);
这工作。它确实删除了EXIF信息,其中30KB的缩略图节省了12KB并且变成了18KB。在单个页面上显示许多此类大拇指时,可显着节省成本。然而
的问题是,它的工作原理有点太清楚了。由此产生的图像似乎失去了大量的颜色信息,并且与未剥离版本相比看起来“平坦”。
根据我的研究,到目前为止,我的理论是,以下的一个或两个是真的:
- Imagick扔掉必要的颜色配置文件信息作为剥离过程的一部分
- Imagick重新压缩图像在保存后,丢失质量
不管问题的原因,我正在寻找一种方式来删除EXIF信息,以免影响图像质量或颜色本身。
这甚至可能吗?
更新:
基于杰拉德施奈德的回答,我想执行的质量设置为100%之前, “剥离” 的形象:
$imagick = new Imagick($image);
$imagick->setCompression(imagick::COMPRESSION_JPEG);
$imagick->setCompressionQuality(100);
$imagick->stripImage();
$imagick->writeImage($image);
不幸的是,问题依旧。以下是输出示例,尽管将质量设置为100%,图像仍然是平坦的。
不知何故,我怀疑删除EXIF会减小文件的大小。我猜文件大小的减少是由于重新压缩造成的,可能比以前质量更低。你尝试过使用'getCompressionQuality()'和'setCompressionQuality()'吗? –
@GeraldSchneider这取决于。我已经看到EXIF数据的字面数百KB(在某些极端情况下差不多有半兆)的文件。剥离EXIF的图像总是一个好主意。 – mingos
这对于直接从相机拍摄的图像可能是正确的,但对于生成的缩略图? –