У меня проблемы с изменением размера изображения в PHP; кажется, что с того момента, как я загружаю изображение с помощью imagecreatefromstring или imagecreatefrompng, цвета меняются и становятся блеклыми.
Я знаю, что должен использовать imagecreatetruecolor для создания целевого изображения, но я даже не дохожу до этого момента.
Вот несколько примеров, чтобы объяснить результаты, которые я получаю:
// This results in a discolored / faded image
$image = imagecreatefrompng('/path/to/my/image.png');
header('Content-Type: image/png');
imagepng($image);
die();
// This also results in a discolored / faded image
$image = imagecreatefrompng('/path/to/my/image.png');
$info = getimagesize('/path/to/my/image.png');
$sourceWidth = $info[0];
$sourceHeight = $info[1];
$resizedImage = imagecreatetruecolor($sourceWidth, $sourceHeight);
imagecopyresampled($resizedImage, $image, 0, 0, 0, 0, $sourceWidth, $sourceHeight, $sourceWidth, $sourceHeight);
header('Content-Type: image/png');
imagepng($resizedImage);
die();
// Obviously, this works flawlessly.
header('Content-Type: image/png');
echo file_get_contents('/path/to/my/image.png');
die();
Очевидно, я должен что-то упустить, но я просмотрел все вопросы и ответы SO, которые смог найти, но не нашел решения моей проблемы.
У вас когда-нибудь была эта проблема? Как мне это сделать?






Эта проблема может быть связана с цветовыми профилями, поскольку GD, похоже, не поддерживает цветовые профили. Это может произойти, например, если ваши изображения находятся в цветовом пространстве Adobe RGB, которое содержит больше информации о цвете, чем sRGB. Вот еще немного информации по теме:
https://devot-ee.com/add-ons/support/ce-image/viewthread/1085
Возможным решением является использование Photoshop для преобразования изображения в sRGB (при экспорте есть флажок «преобразовать в sRGB»).
Если это невозможно, вы можете использовать ImageMagick вместо GD, который (как указано в приведенной выше ссылке) поддерживает цветовые профили.
С момента публикации этого поста прошло более двух лет; Кто-нибудь знает, поддерживает ли GD цветовые профили? Многие программы, в том числе Chrome, за последние несколько лет добавили такую поддержку. Кажется, я не могу найти прямого ответа на этот вопрос в настоящее время, и я вижу, что есть несколько многолетних запросов на добавление поддержки цветового профиля в GD.
Ну блин, ты прав. Не знаю, как я не додумался заглянуть в поддержку цветового профиля, но именно так. GD не поддерживает цветовые профили: он их просто разделяет. Однако Imagick их поддерживает (это объясняет, почему на него везде ссылаются!). Поэтому я переключился на
cropThumbnailImageImagick для изменения размера изображения, сохранив при этом остальную часть моей первоначальной обработки почти такой же. Спасибо @ismael!