imagecreatefromstring更改图像颜色

时间:2019-06-16 21:10:09

标签: php gd

我在用PHP调整图像大小时遇到​​问题;从我使用imagecreatefromstringimagecreatefrompng加载图像的那一刻起,颜色似乎就会改变并变得褪色。

我知道我必须使用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 个答案:

答案 0 :(得分:5)

此问题可能与颜色配置文件有关,因为GD似乎不支持颜色配置文件。例如,如果您的图像位于Adobe RGB色彩空间中,而该色彩空间的信息比sRGB多,则可能会发生这种情况。这是有关此主题的更多信息:

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

可能的解决方案是使用Photoshop将图像转换为sRGB(导出时有一个“转换为sRGB”复选框)。

如果不可能,您可以使用ImageMagick代替GD,它(如上面的链接所述)确实支持颜色配置文件。