在我開始之前,我只想說明我是一個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:
AFTER:
感謝您的評論。所以我是PHP新手,對ImageMagick不熟悉,不確定如何使用上面的示例。你認爲你可以給我一個完整的例子嗎?另外,如果我正在閱讀您發佈的內容,該腳本將在服務器上創建一個圖像而不是顯示它?我需要像我的第一個例子那樣處理圖像並將其與變化一起顯示。 –
在php中使用imagemagick處理圖像是可能的,你需要imagick擴展,但是我沒有足夠的時間將這個例子變成一個有趣的例子,因爲函數的文檔非常糟糕 - 除了函數和參數名稱上次我使用它時沒有任何記錄 - 花了我一天的時間來弄清楚如何做到我想要的。嘗試在我給你的命令行中搜索每個參數的等價php imagick代碼。 – xception
謝謝,我會研究它,並會在發佈後發佈示例。 –