Как удалить exif из JPG без потери качества изображения?
У меня есть приложение для обмена фотографиями в PHP, в котором загруженные пользователем изображения изменяются в различные форматы большого пальца с помощью ImageMagick.
В качестве, казалось бы, «умного» способа сэкономить на размере файла, я извлекаю exif-информацию из этих превью следующим образом:
$imagick = new Imagick($image);
$imagick->stripImage();
$imagick->writeImage($image);
Это работает. Это действительно удаляет информацию EXIF, где большие пальцы 30 КБ экономят 12 КБ и становятся 18 КБ. Значительная экономия при отображении множества таких больших пальцев на одной странице.
Проблема, однако, в том, что он работает слишком хорошо. Получающиеся изображения, кажется, теряют много информации о цвете и выглядят "плоскими" по сравнению с их неснятыми версиями.
Основываясь на моих исследованиях, моя теория состоит в том, что одно или оба из следующего верно:
Imagick выбрасывает важную информацию о цветовых профилях как часть процесса очисткиImagick сжимает изображение после сохранения, теряя качествоНезависимо от причины проблемы, я ищу способ удалить информацию EXIF таким образом, чтобы она не влияла на качество изображения или сам цвет.
Это вообще возможно?
Обновить:
Основываясь на ответе Джеральда Шнайдера, я пытался довести настройку качества до 100% перед тем, как «снимать» изображение:
$imagick = new Imagick($image);
$imagick->setCompression(imagick::COMPRESSION_JPEG);
$imagick->setCompressionQuality(100);
$imagick->stripImage();
$imagick->writeImage($image);
К сожалению, проблема остается. Ниже приведен пример вывода, где, несмотря на установку качества на 100%, изображения все еще сглаживаются.