如何停止Image Magick stripImage()删除分辨率数据

时间:2016-03-06 12:23:41

标签: php image imagemagick photoshop

我正在将图片上传到我的网站,并使用Image Magick的stripImage()函数删除EXIF数据来优化它们。

$img = new Imagick($image);
$img->stripImage();
$img->writeImage($image);
$img->destroy();

效果很好,我按预期减小了文件大小。但是,如果我在Photoshop中打开图像,Photoshop会将图像读取为每英寸1像素的分辨率。

看来stripImage正在删除photoshop用来确定分辨率的EXIF数据。

如何在剥离其他所有内容时阻止此行为?

1 个答案:

答案 0 :(得分:2)

简短的回答是我认为你不能用ImageMagick有选择地删除部分EXIF数据,所以你可能需要提取原始密度,清除EXIF,然后放回Photoshop需要的任何东西......不是但是,如果Photoshop使用JPEG标题中的标准密度或EXIF数据中的值,则可以确定。

无论如何,要计算出答案,您可以使用EXIFtool这样的图像获取所有密度类型设置:

exiftool "-*resolution*"  image.jpg
X Resolution                    : 72
Y Resolution                    : 72
Resolution Unit                 : inches

描述了Exiftool here。或者,如您所知,并且喜欢ImageMagick,您可以像这样使用identify

identify -verbose IMG_3942.JPG | grep -i reso
  Resolution: 72x72
    exif:ResolutionUnit: 2
    exif:thumbnail:ResolutionUnit: 2
    exif:thumbnail:XResolution: 72/1
    exif:thumbnail:YResolution: 72/1
    exif:XResolution: 72/1
    exif:YResolution: 72/1

您也可以在剥离EXIF数据后使用ImageMagick设置密度:

# Strip EXIF then add in resolution
convert IMG_3942.JPG -strip -density 180x180 180.jpg

# Check what happened
exiftool "-*resolution*"  180.JPG
Resolution Unit                 : inches
X Resolution                    : 180
Y Resolution                    : 180

如果看here,也可以使用libexif修改EXIF数据。