鍍金池/ 問(wèn)答/PHP/ PHP的gd庫(kù)拼接jpg與png圖片的時(shí)候出現(xiàn)顏色泛黃

PHP的gd庫(kù)拼接jpg與png圖片的時(shí)候出現(xiàn)顏色泛黃

圖片描述

如圖所示,我寫(xiě)了一個(gè)腳本抓取貼吧用戶頭像拼接成照片墻,貼吧頭像有的是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";
        }

我使用如上代碼進(jìn)行創(chuàng)建畫(huà)布然后使用imagecopy進(jìn)行合并之后,就出現(xiàn)了如圖所示的情況,圖片顏色泛黃,這是怎么回事呢?有什么解決方法嘛?

回答
編輯回答
爆扎

不同版本的 GD,可能出現(xiàn)不同的效果。這是毋庸置疑的

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

gd2 中應(yīng)首選后者

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

Note: 因?yàn)檎{(diào)色板圖像限制(255+1 種顏色)有個(gè)問(wèn)題。重采樣或過(guò)濾圖像通常需要多于 255 種顏色,計(jì)算新的被重采樣的像素及其顏色時(shí)采用了一種近似值。對(duì)調(diào)色板圖像嘗試分配一個(gè)新顏色時(shí),如果失敗我們選擇了計(jì)算結(jié)果最接近(理論上)的顏色。這并不總是視覺(jué)上最接近的顏色。這可能會(huì)產(chǎn)生怪異的結(jié)果,例如空白(或者視覺(jué)上是空白)的圖像。要跳過(guò)這個(gè)問(wèn)題,請(qǐng)使用真彩色圖像作為目標(biāo)圖像,例如用 imagecreatetruecolor() 創(chuàng)建的。

而在imagecreatetruecolor下又查到
Note: 本函數(shù)不能用于 GIF 文件格式。

2017年12月23日 14:36