Я загружаю изображения на свой веб-сайт и оптимизирую их, удаляя данные EXIF с помощью функции StripImage () Image Magick.
$img = new Imagick($image);
$img->stripImage();
$img->writeImage($image);
$img->destroy();
Это работает довольно хорошо, я получаю уменьшенный размер файла, как и ожидалось. Тем не менее, если я открою изображение в Photoshop, Photoshop считывает изображение с разрешением 1 пиксель на дюйм.
Похоже, что stripImage удаляет данные EXIF, которые фотошоп использует для определения разрешения.
Как я могу предотвратить это поведение, снимая все остальное?
Короткий ответ: я не думаю, что вы можете выборочно удалять части данных EXIF с помощью ImageMagick, поэтому вам, вероятно, потребуется извлечь исходную плотность, очистить EXIF, а затем вернуть все, что нужно Photoshop … хотя и не уверен, если Photoshop использует стандартную плотность в заголовке JPEG или значение из данных EXIF.
Во всяком случае, чтобы выработать ответ, вы можете получить все настройки типа плотности в изображении с EXIFtool
как это:
exiftool "-*resolution*" image.jpg
X Resolution : 72
Y Resolution : 72
Resolution Unit : inches
Exiftool описан Вот. Или, как вы знаете, и любите 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
Вы также можете установить плотность с помощью ImageMagick после удаления данных EXIF следующим образом:
# 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
Вы также можете изменить данные EXIF с libexif
если вы посмотрите Вот.
Других решений пока нет …