imagecreatefromstring меняет цвет изображения - PullRequest
6 голосов
/ 17 июня 2019

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

Вот пример до и после: Original on the left, faded on the right

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

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

1 Ответ

5 голосов
/ 19 июня 2019

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

https://devot -ee.com / дополнения / поддержка / ce-image / viewthread / 1085

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

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

...