始める前に、私はPHPの初心者であることに注意したいと思います。私がやりたいのは、PNG画像を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);
?>
本質的に私が欲しいものの完璧な例はここで見ることができます。唯一の変更点は、黒ではなく、ユーザーが指定した色に変換することです。 不透明なピクセルを黒に変換します
ありがとうございました
===============================2012年10月17日更新
したがって、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");
?>
動作しましたが、小さな問題があります。以下のスクリーンショットに示されているように、ギザギザのエッジがあります。スクリーンショットの前と同じように画像を滑らかにする方法について何かアイデアはありますか?
前:
後: