PHP обработка изображений GD JPEG Quality

Я начал использовать WideImage библиотека обработки изображений, и у меня возникли проблемы с качеством изображений JPEG, которые она генерирует. WideImage фактически использует GD, поэтому я тестирую только с помощью функций изображения GD PHP.

Моя цель в конечном итоге изменить размеры изображений, но вот мой тестовый код без изменения размера:

$srcImage = "path/to/image.jpg";
list($width, $height) = getimagesize($srcImage);
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($srcImage);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width, $height);
imagejpg($image_p, "path/to/image_resized.jpg", 100);

Это работает, но выдает более низкое качество более размытой версии исходного изображения.
Вот пример рядом с оригиналом, разделенным по центру:

Пример изображения

Это происходит, когда я также выполняю изменение размера, но я хочу сохранить те же цвета / качество исходного изображения.

У кого-нибудь есть идеи, как мне этого добиться? Возможно, в моем php.ini есть настройка, которую я пропускаю или что-то в этом роде? Я также пытался использовать imagepng (), но с почти такими же результатами.

Я использую PHP версии 5.3.29, вот моя информация GD из phpinfo ():

GD Support        : enabled
GD Version        : bundled (2.1.0 compatible)
FreeType Support  : enabled
FreeType Linkage  : with freetype
FreeType Version  : 2.3.11
T1Lib Support     : enabled
GIF Read Support  : enabled
GIF Create Support: enabled
JPEG Support      : enabled
libJPEG Version   : 6b
PNG Support       : enabled
libPNG Version    : 1.2.49
WBMP Support      : enabled
XPM Support       : enabled
libXpm Version    : 30411
XBM Support       : enabled

Спасибо!

В брезгливый оссифражпросьба, вот исходный файл и преобразованный файл.

РЕДАКТИРОВАТЬ — В соответствии с ответом брезгливого оссиффража, помеченным правильно ниже, я предпринял следующие шаги для решения проблемы:

Установлен exiftool на сервере

Сгенерировал следующую команду с PHP:

exiftool -TagsFromFile "/var/www/vhosts/path/to/image/the file name.jpg" -icc_profile "/var/www/vhosts/path/to/image-processed/the file name.jpg"

Запустил команду с помощью PHP-метода exec ():

$arrOutput = array();
$return_var = "";
$directOutput = exec($exiftoolCommand, $arrOutput, $return_var);

Работал как шарм!

3

Решение

Исходное изображение содержит цветовой профиль ICC. GD ничего не знает о цветовых профилях, поэтому эта информация отсутствует в преобразованном файле. Чтобы решить эту проблему, у вас есть два варианта:

  1. Сохраните исходный файл без цветового профиля или

  2. Скопируйте цветовой профиль из исходного файла в преобразованный файл.

Я бы выбрал вариант 1, если вы планируете опубликовать этот файл в Интернете, поскольку цветовые профили и другая информация EXIF ​​используют пропускную способность без веской причины.

Кроме того, вы можете использовать бесплатный инструмент, такой как exiftool скопировать цветовой профиль из одного файла в другой. Это должно работать в командной строке:

exiftool -TagsFromFile so_original.jpg -icc_profile so_converted.jpg
6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]