2011-12-26 22 views
1

PHPでは、イメージを処理しようとしています。つまり、jpgファイルで周囲の色を透明にしようとしています。私は途中でGDライブラリを使用しています。jpgをpngに変換して色を透明にします。

イメージをimagecreatefromjpeg関数とimagepng関数を使用してpngに変換して直接出力することができます。しかし、私は特定の色を透明にする方法を見つけることができません。また、画像の中には、保存中に作成される黒い図形の周囲に明るい灰色のアーティファクトがあるものがあります。私もそれらを含めることができる方法はありますか?

私は一種の迷子です。私は画像上で色を透明にする答えを見つけましたが、画像をサーバーに保存せずに最初に変換してから処理する方法はわかりません。

アイデア?

編集:これまでのところ私のコードです。私は特定の色を透明にすることができましたが、周囲のものをまだ検出することはできません。

ほとんどの場合、許可されている画像形式で保存されたロゴやテキストであるため、画像は閉じられます。ですから、私はグラデーションに関する大きな問題はないと思いますが、影が落ちるような周囲のグラデーションで透明度を操作することができれば素晴らしいことでしょう。

png/gifイメージがすでに透過しているかどうかを検出する方法はありますか?私のコードは透明な部分を黒色に塗りつぶしています。

$file = 'images/18.jpg'; 
$specs = getimagesize($file); 

if($specs[2] == 1) $img = imagecreatefromgif($file);  //gif 
elseif($specs[2] == 2) $img = imagecreatefromjpeg($file); //jpg 
elseif($specs[2] == 3) $img = imagecreatefrompng($file); //png 
else exit('unsupported file type!'); 

$newimg = imagecreatetruecolor(imagesx($img), imagesy($img)); 
// create a new image with the size of the old one 
imagecopy($newimg,$img,0,0,0,0,imagesx($img),imagesy($img)); 
// copy the old one 

imagedestroy($img); 
// free the memory 

$white = imagecolorallocate($newimg,255,255,255); 
imagecolortransparent($newimg,$white); 
// make white pixels transparent 

header('Content-Type: image/png'); 
imagepng($newimg); 
imagedestroy($newimg); 
// and finally output the new image 
+0

ここにコードを投稿できますか? 'コードは普遍的な言語です'。 –

+0

はい、申し訳ありません。私は私の質問を更新します。 – inhan

答えて

1

あなたはimagecolortransparent機能を備えた透明色を設定することができます。

+0

ありがとう、アレックス。周囲の色を検出して透明にする方法を知っていますか?単一の種類の作品は、画像にドロップシャドウがもう少し必要です。 – inhan

+0

あなたは 'imagesavealpha($ image、true);を呼び出して、' $ color = imagecolorallocatealpha($ image、$ red、$ green、$ blue、$ alpha);のような色を作成することができます; – Alex

+0

rgba値を知っていますか? – inhan

関連する問題