我具有其中用戶上載的圖像的大小被調整成使用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
這對於直接從相機拍攝的圖像可能是正確的,但對於生成的縮略圖? –