dポイントプレゼントキャンペーン実施中!

画像の背景を透過させたいと思い下記コードを実行してみたのですが、期待通りの状態になりませんでした。(体の周りに白が残ってしまう)

$src = 'http://ec2.images-amazon.com/images/I/41VI47EYca …
$img = imagecreatefromjpeg($src);

$color = imagecolorallocate($img, 255, 255, 255);
imagecolortransparent($img, $color);

imagepng($img);
imagedestroy($img);


そこで、255, 255, 255だけではなく250, 250, 250くらいも透過してみようと思い

$color = imagecolorallocate($img, 255, 255, 255);
imagecolortransparent($img, $color);
$color = imagecolorallocate($img, 250, 250, 250);
imagecolortransparent($img, $color);

と、透過処理を二回続けてみました。すると、最初の状態よりも透過が上手く行われていない結果となってしまいました。
複数色を透過処理することはできないのでしょうか。

imagealphablending, imagesavealphaや、透過するごとに画像を保存して読み込んで…ということをしてみたのですがそれもやはり同じような結果でした。


255~250くらいまで、複数色を透過したとしても綺麗に背景だけ透過されるという結果は得られないかもしれませんが、もしよろしければ複数色の透過を行うコードを教えて頂ければ幸いです。


複数色を透過させる方法、もしくは他の方法でも良いので綺麗に背景だけ透過させる方法がありましたら教えて下さい。
宜しくお願い致します。

A 回答 (2件)

どうせ透過するなら複数色である必要はないのでは?


(なぜなら結局みえないのだから)
同じ色に変更した上で透過設定してみては?

この回答への補足

回答有り難うございます。

同じ色に変更ということですが、調べてみたところimagefilltoborderという関数が見つかりました。
ですが、この関数を使って上手く白っぽい背景を全て255, 255, 255にすることはできるのでしょうか。もしよろしければ変更をするための方法を大まかにでも良いのでご教授願えないでしょうか。
宜しくお願い致します。

補足日時:2012/07/16 06:39
    • good
    • 0

ざっと白っぽいjpegを透過pngにする方法です


元画像はwikipediaにあった雲の画像を適当に

<?PHP
$imgname="hogehoge.jpg";
$im = imagecreatefromjpeg($imgname);
//$im = imagecreatefrompng($imgname); //pngから読むならこれ

$background = imagecolorallocate($im, 255, 0, 0); //とりあえず真っ赤を背景に
list($width, $height) = getimagesize($imgname);

for($i=0;$i<$width;$i++){
for($j=0;$j<$height;$j++){
$rgb = imagecolorat($im, $i,$j);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
if($r>200 and $g>200 and $b>200) imagefill($im, $i, $j, $background);
}
}
imagecolortransparent($im, $background);

header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!