PHP的gd库拼接jpg与png图片的时候出现颜色泛黄

图片描述

如图所示,我写了一个脚本抓取贴吧用户头像拼接成照片墙,贴吧头像有的是jpg,有的是png。

        list($intWidth, $intHeight, $type, $attr) = getimagesize($strImagePath);
        echo "getimagesize($strImagePath) : $intWidth, $intHeight, $type, $attr \n";
        $resSourceImage = null;
        switch ($type) {
            case IMAGETYPE_JPEG:
                $resSourceImage = imagecreatefromjpeg($strImagePath);
                break;
            case IMAGETYPE_PNG:
                $resSourceImage = imagecreatefrompng($strImagePath);
                break;
            case IMAGETYPE_GIF:
                $resSourceImage = imagecreatefromgif($strImagePath);
                break;
            default:
                echo "unknown type: {$type} \n";
        }

我使用如上代码进行创建画布然后使用imagecopy进行合并之后,就出现了如图所示的情况,图片颜色泛黄,这是怎么回事呢?有什么解决方法嘛?

阅读 3.6k
1 个回答

不同版本的 GD,可能出现不同的效果。这是毋庸置疑的

通常要
imagecopyresized 与 imagecreate
imagecopyresampled 与 imagecreatetruecolor
搭配使用

gd2 中应首选后者

哦 在Php手册中查到一段(imagecopyresized 或 imagecopyresampled 下都有)

Note: 因为调色板图像限制(255+1 种颜色)有个问题。重采样或过滤图像通常需要多于 255 种颜色,计算新的被重采样的像素及其颜色时采用了一种近似值。对调色板图像尝试分配一个新颜色时,如果失败我们选择了计算结果最接近(理论上)的颜色。这并不总是视觉上最接近的颜色。这可能会产生怪异的结果,例如空白(或者视觉上是空白)的图像。要跳过这个问题,请使用真彩色图像作为目标图像,例如用 imagecreatetruecolor() 创建的。

而在imagecreatetruecolor下又查到
Note: 本函数不能用于 GIF 文件格式。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题