2012-10-15 46 views
2

在我開始之前,我只想說明我是一個PHP noob。我想要做的是將一張PNG圖像着色爲一種顏色。所以所有透明像素都將保持透明,並且所有不透明像素都將是該顏色。我已經搜索了很多網站的這個答案,但由於某種原因,我無法找到我想要的。PHP:PNG tinitng(1色)

這裏是基於不同的例子,我發現我的第一次嘗試:

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

$color = $_GET['color']; 
$im = imagecreatefrompng($_GET['img']); 
$width = imagesx($im); 
$height = imagesy($im); 
$imn = imagecreatetruecolor($width, $height); 
imagealphablending($imn,false); 
$col=imagecolorallocatealpha($imn,255,255,255,127); 
imagesavealpha($imn,true); 
imagefilledrectangle($imn,0,0,$width,$height,$col); 
imagealphablending($imn,true); 
imagecopy($imn, $im, 0, 0, 0, 0, $width, $height); 
imagefilter($imn, IMG_FILTER_GRAYSCALE); 


if ($color[0] == '#') 
$color = substr($color, 1); 

if (strlen($color) == 6) 
$r = $color[0].$color[1]; 
$g = $color[2].$color[3]; 
$b = $color[4].$color[5]; 

$r = hexdec($r); 
$g = hexdec($g); 
$b = hexdec($b); 

imagefilter($imn, IMG_FILTER_COLORIZE, $r, $g, $b); 

imagepng($imn); 
imagedestroy($imn); 

?> 

本質的東西我想這裏可以看到一個很好的例子。唯一的變化將是,而不是黑色,我希望它被轉換爲用戶指定的顏色。 Convert non-transparent pixels to black

謝謝

=============================== 二○一二年十月一十七日更新

因此,基於xception的答案,這裏是我用來執行他的劇本代碼:

<?php 

$source = "test.png"; 
$temp = "temp.png"; 
$color = "red"; 
$final = "FINAL.png"; 

exec("convert $source -alpha extract -threshold 0 -negate -transparent white $temp"); 
exec("convert $temp -fill $color -opaque black $final"); 
?> 

它的工作,但有一個小問題。如下面的截圖所示,有鋸齒邊緣。關於如何平滑圖像的任何想法,以便它看起來像在BEFORE截圖中那樣好看?

BEFORE:

BEFORE

AFTER:

AFTER

回答

1

在基於你指向的鏈接2個步驟示例:

convert <source> -alpha extract -threshold 0 -negate -transparent white <tmp> 
convert <tmp> -fill red -opaque black <destination> 

取代<source><tmp>,<destination>以及相應的文件名稱,用您想要的顏色替換red

編輯:通過問題筆者發現 較短的版本:

exec("convert $source -threshold 100% +level-colors '#00FF00', $final"); 
+0

感謝您的評論。所以我是PHP新手,對ImageMagick不熟悉,不確定如何使用上面的示例。你認爲你可以給我一個完整的例子嗎?另外,如果我正在閱讀您發佈的內容,該腳本將在服務器上創建一個圖像而不是顯示它?我需要像我的第一個例子那樣處理圖像並將其與變化一起顯示。 –

+0

在php中使用imagemagick處理圖像是可能的,你需要imagick擴展,但是我沒有足夠的時間將這個例子變成一個有趣的例子,因爲函數的文檔非常糟糕 - 除了函數和參數名稱上次我使用它時沒有任何記錄 - 花了我一天的時間來弄清楚如何做到我想要的。嘗試在我給你的命令行中搜索每個參數的等價php imagick代碼。 – xception

+0

謝謝,我會研究它,並會在發佈後發佈示例。 –

相關問題