2012-06-10 40 views
1

我有一個形象的4x4個像素,每個像素具有精確的顏色,我想,如#439902等等,爲什麼我使用imagetruecolortopalette()時顏色發生變化?

我搶我的形象,將其轉換爲調色板使用GD的imagetruecolortopalette()功能,然後我試圖找到最接近的顏色我的圖像使用imagecolorclosest()功能,另一個預定義的顏色,問題是,它帶來了一種不同的顏色,一個不是在我的4x4圖像,顏色接近我的顏色之一,但我確切需要它。

我認爲問題是,當我在我的4×4圖像使用imagetruecolortopalette()功能所有的顏色略有變化,

是否有辦法解決這問題?

舉個例子...

如果我搜索(66,100,39)我最親密的速配:(76,90,56)。

井76,90,56已經改變,因爲我的原始圖像中的顏色是(78,98,43)。 我知道它不遠,但我需要它保持不變

+0

好像顏色是在三維空間中的點colorclosest作品 - 什麼是兩種顏色的「點」之間的最近直線距離並不一定是最接近「視覺「匹配。你可能想要嘗試imagecolorclosestwb(),它比數學上更感性地工作。 –

+0

我瞭解顏色空間及其背後的數學知識。使用直線距離選擇最接近的顏色不是問題。只要它在我的圖像中得到一個顏色..它的確如此,問題是我的原始保存圖像的顏色與輸出圖像的顏色不同,我的圖像是PNG並以PNG形式輸出,我已經比較了兩個圖像它們是不同顏色的像素。我認爲這是一個壓縮問題,但我試圖將其保存爲PNG和JPG,儘管顏色結果略有不同,但仍與原始PNG圖像不匹配。 –

回答

0

如果您保存爲jpg它可能是一個壓縮問題;嘗試保存爲PNG,因爲它不會壓縮,並且顏色比JPG多。

一些代碼從IM論壇解除:

exec("convert square.png[1x1+0+0] -format " . 
    "\"%[fx:floor(255*u.r)],%[fx:floor(255*u.g)],%[fx:floor(255*u.b)]\" " . 
    "info: 2>&1",$result); 
     print_r($result); 

我想我在這裏走錯了路,因爲這將識別的顏色,這是不是你想要的?

+1

我認爲這是一個壓縮問題,但我試圖將其保存爲PNG和JPG,雖然顏色上略有不同,但它們仍與原始PNG圖像不匹配。 –

0

但是PHP早已這個功能:

imagecolorexact

+0

我可能沒有我的圖像中的確切顏色,所以我只想要最接近的顏色,最接近的顏色效果很好,只是顏色在保存時稍有變化 –

+0

[imagepng](http://php.net/manual/en/ function.imagepng.php)有壓縮選項和過濾器;你是否嘗試過默認的方式(不傳遞任何東西)或者用這些方式玩? – 2012-06-10 20:32:34

+0

是的,我試着用這些PNG,但沒有改變:( –

相關問題