Imagecreatefromstring изменяет цвет изображения

У меня проблемы с изменением размера изображения в 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();

Вот пример до и после: Imagecreatefromstring изменяет цвет изображения

Очевидно, я должен что-то упустить, но я просмотрел все вопросы и ответы SO, которые смог найти, но не нашел решения моей проблемы.

У вас когда-нибудь была эта проблема? Как мне это сделать?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
7
0
476
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта проблема может быть связана с цветовыми профилями, поскольку GD, похоже, не поддерживает цветовые профили. Это может произойти, например, если ваши изображения находятся в цветовом пространстве Adobe RGB, которое содержит больше информации о цвете, чем sRGB. Вот еще немного информации по теме:

https://devot-ee.com/add-ons/support/ce-image/viewthread/1085

Возможным решением является использование Photoshop для преобразования изображения в sRGB (при экспорте есть флажок «преобразовать в sRGB»).

Если это невозможно, вы можете использовать ImageMagick вместо GD, который (как указано в приведенной выше ссылке) поддерживает цветовые профили.

Ну блин, ты прав. Не знаю, как я не додумался заглянуть в поддержку цветового профиля, но именно так. GD не поддерживает цветовые профили: он их просто разделяет. Однако Imagick их поддерживает (это объясняет, почему на него везде ссылаются!). Поэтому я переключился на cropThumbnailImage Imagick для изменения размера изображения, сохранив при этом остальную часть моей первоначальной обработки почти такой же. Спасибо @ismael!

Émile Perron 19.06.2019 14:06

С момента публикации этого поста прошло более двух лет; Кто-нибудь знает, поддерживает ли GD цветовые профили? Многие программы, в том числе Chrome, за последние несколько лет добавили такую ​​поддержку. Кажется, я не могу найти прямого ответа на этот вопрос в настоящее время, и я вижу, что есть несколько многолетних запросов на добавление поддержки цветового профиля в GD.

cazort 16.08.2021 22:45

Другие вопросы по теме