2013-05-15 50 views
4

給定一個圖像文件,將其轉換爲舊式16種顏色的最佳方法是什麼?即白色,橙色,品紅色,淡藍色,黃色,青檸檬,粉紅色,灰色,淺灰色,青色,紫色,藍色,棕色,綠色,紅色和黑色。將圖像轉換爲預定義的16種顏色

我製作了一個小小的1x16像素圖像,其中包含所有可用作源代碼調色板的16種顏色(右圖),但我無法使用它。好像imagepalettecopy()就是我想要的(以16像素的數據圖像的調色板,並將其複製到一個新的圖像),但代碼中,我想出了不工作:

<?php 

$palette = imagecreatefrompng(__DIR__ . '/palette.png'); 

$source = imagecreatefromjpeg(__DIR__ . '/testimage.jpg'); 

$source_w = imagesx($source); 
$source_h = imagesy($source); 

$image = imagecreate($source_w, $source_h); 

imagepalettecopy($palette, $image); 

imagecopy($image, $source, 0, 0, 0, 0, $source_w, $source_h); 

header('Content-Type: image/png'); 
imagepng($image); 

這似乎只是把它轉換到它選擇的16種顏色或者其他東西(我不太確定)。

我在想什麼或做錯了什麼?

編輯:我的imagepalettecopy()電話是倒退,但修復它也沒有幫助。見下面的評論。

回答

1

是否改變
imagepalettecopy($ palette,$ image);
into
imagepalettecopy($ image,$ palette);
工作?

編輯:

我嘗試以下調色板爲GIF:

enter image description here

我覺得這些顏色都與你的不同。 (我手工採摘果嶺從圖片...)

這是我試過的代碼(不是真的在這裏的差別):

<?php 

$palette = imagecreatefromgif('palette-gif-03.gif'); 

$source = imagecreatefromjpeg('test-image-01.jpg'); 

$source_w = imagesx($source); 
$source_h = imagesy($source); 

$image = imagecreate($source_w, $source_h); 

imagepalettecopy($image, $palette); 

imagecopy($image, $source, 0, 0, 0, 0, $source_w, $source_h); 

header('Content-Type: image/png'); 
imagepng($image); 

imagedestroy($imgage); 
imagedestroy($palette); 
imagedestroy($source); 
?> 

這是我的結果:

enter image description here

請讓我知道如果我應該刪除圖片?!!

+0

感謝您的回覆!不,保持原來的多色調色板。我上面的代碼確實改變了圖像並顯着減少了它的顏色數量,但它似乎將其減少到了它選擇的16種顏色(在我的例子中是藍色和灰色)。 – Viper007Bond

+1

奇怪,因爲手冊中說imagepalettecopy(resource $ destination,resource $ source)。你可以添加一個示例源圖像和由此產生的圖像到你的問題? – John

+0

對不起,我之前的評論是錯誤的。我的代碼中存在錯誤。然而,這兩個命令(我的意外錯誤和正確的順序)導致類似但錯誤的圖像。測試圖片:http://www.viper007bond.com/wordpress/wp-content/uploads/2013/05/20130511-110556.jpg正確的順序(圖片,調色板):http://pic.armedcats.net/b/ bl/blue/2013/05/15/imagepalette.png原始倒退順序(調色板,圖片):http://pic.armedcats.net/b/bl/blue/2013/05/15/paletteimage.png – Viper007Bond

相關問題