我在用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问题和答案,而没有找到解决问题的任何办法。
您遇到过这个问题吗? 我应该怎么做?
答案 0 :(得分:5)
此问题可能与颜色配置文件有关,因为GD似乎不支持颜色配置文件。例如,如果您的图像位于Adobe RGB色彩空间中,而该色彩空间的信息比sRGB多,则可能会发生这种情况。这是有关此主题的更多信息:
https://devot-ee.com/add-ons/support/ce-image/viewthread/1085
可能的解决方案是使用Photoshop将图像转换为sRGB(导出时有一个“转换为sRGB”复选框)。
如果不可能,您可以使用ImageMagick代替GD,它(如上面的链接所述)确实支持颜色配置文件。