2012-08-29 115 views
2

有人可以用簡單的腳本來幫助我用PHP中的圖像中的另一種顏色替換特定的顏色嗎? 這裏是一個例子(顏色從綠色變爲黃色)。使用PHP替換圖像中的另一種顏色

before after

+1

可能重複[我可以換顏色在圖像中使用GD庫在PHP?](http://stackoverflow.com/questions/456044/can-i-swap-colors-in-image-using-gd-library-in-php) – bfavaretto

回答

14

如果你的意思是在PHP中使用GD庫,你應該給上imagefilter()

步驟的檢查有:

  • 開始用PNG圖片,用白色的內,阿爾法外。
  • 使用imagefilter($img, IMG_FILTER_COLORIZE, 0, 255, 0))其中0,255,0是您的RGB顏色(本例中爲鮮綠色)
  • 保存alpha並打印輸出結果。

編輯,工作代碼和澄清。

我的意思是,使用alpha的黑色線的外部,和白色INSIDE。這裏的樣本圖像: WhiteInAlphaOut

而這裏的工作代碼着色白色部分:

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

/* RGB of your inside color */ 
$rgb = array(0,0,255); 
/* Your file */ 
$file="../test.png"; 

/* Negative values, don't edit */ 
$rgb = array(255-$rgb[0],255-$rgb[1],255-$rgb[2]); 

$im = imagecreatefrompng($file); 

imagefilter($im, IMG_FILTER_NEGATE); 
imagefilter($im, IMG_FILTER_COLORIZE, $rgb[0], $rgb[1], $rgb[2]); 
imagefilter($im, IMG_FILTER_NEGATE); 

imagealphablending($im, false); 
imagesavealpha($im, true); 
imagepng($im); 
imagedestroy($im); 

:我們必須否定值,因爲彩色化只適用於非白色部分。我們可以通過使用黑色的白色邊框圖像來解決這個問題。

注意:此代碼僅適用於黑色邊框和白色內部圖像。

+0

我試過這個,但它也改變了背景(透明)爲綠色。我應該讓背景變白嗎? –

+0

檢查版本,工作代碼和說明 – Touki

+0

在使用BRIGHTNESS和高負值之前再做一個過濾步驟以確保圖像僅包含純黑色(#000)和純白色(#FFF)色彩也是很好的做法。無論文檔如何,使用此濾鏡可以使用-10000值來避免半灰色像素。比COLORIZE更有意義,您設置的顏色將正確着色黑色區域。這個過程被一些php庫用來應用黑白位掩碼來使圖像的自定義區域透明。 – Wh1T3h4Ck5

1

我想答案應該是有圖像的多個版本,然後加載取決於所選擇的顏色正確的圖像?

你可以使用switch語句來加載正確的圖像

//get selected colour 
    switch ($colour) { 
    case "red": 
     echo "<img src='RED IMAGE' "; 
     break; 
    case "blue": 
     echo "<img src='blue IMAGE' "; 
     break; 
    case "green": 
     echo "<img src='green IMAGE' "; 
     break; 
} 

希望這有助於。

+0

如果用戶想要選擇更淺/更深的紅色?我無法制作1千萬個圖像。這就是爲什麼我想要另一個解決方案(我認爲使用GD庫)。 –

+1

那麼你應該讓你的問題更清楚。 – devsnd

+0

爲什麼這只是被投票?我知道這不是正確的解決方案,但問題並未指定他們需要每種可能的顏色組合。 –

1
<?php 
header("Content-type: image/png"); 
$im = imagecreate(200, 200) 
imagefill($im, 0, 0, $red); 

// above could come from an uploaded image 
// find a blue in the image 
$newblue = imagecolorclosest($im, 0, 0, 255); 
// change it to green 
imagecolorset($im, $newblue, 0, 255, 0); 
imagepng($im); 
imagedestroy($im); 
?php> 

在這裏,您可以找到最接近藍色的顏色並用綠色替換。

1

我嘗試這樣做:

<?php 
$imgname = "1.gif"; 
$im = imagecreatefromgif ($imgname); 
$index = imagecolorexact ($im,0,128,0); 
imagecolorset($im,$index,240,255,0); 
$imgname = "result.gif"; 
imagegif($im,$imgname); 
?> 
<img src="result.gif"> 

,而不是替換每個綠色像素,我得到這個(球衣顏色沒有改變),:

the shirt wasn't replaced

相關問題