PHPによる画像合成 アルファ設定
本日はへっぽこプログラマらしくPHPによる画像合成について調べた事の覚書。
ことの始まりは一本の電話から「ホット、デスクトップ用の画像を動的に作りたいのだけどできる?カレンダー付きのやつ」、そのデザイン会社では社長が撮ってきた写真にカレンダーと会社のロゴを合成してデスクトップ用にサイト上に置いているのでした(カレンダーのバックに不透明な背景がある)。色々な写真を置きたいということで動的に作れないものかと相談があったのでした。
さっそく家に帰ってちょっと調べてみる。まずはへっぽこの味方、参考書です。
|
おお?!あるではないですか。なになに、imagecopy関数と云うのを使うのか。これを使えば二つの画像を合成できるらしいです。ちなみにコードはこんな感じらしいです。 < ?php $img1 = imagecreatefrompng("img1.ping"); $img2 = imagecreatefromgif("img2.gif"); imagecopy($img1,$img2,5,180,0,0,imagesx($img2),$imagesy($img2)); header("Content-Type: image/png"); imagepng($img1); ?> |
よし!これでテストしてみますか。まずは二つの画像を用意。一つはGIFで半透明部分を作ってと。。。う?めちゃくちゃ汚く合成されました。
どうやらこの方法では不透明度のある画像合成は無理があるようですな。簡単にはいかないようです。ではでは、PHPのマニュアルとネットで調べるとしますか。しかし、どうもなにやってるか分からん。。。へっぽこなもんで。
そもそも不透明度、Photoshopなんかではバーをピヤーっと横にずらして簡単に作れますが、その原理ってどうなってんだ?それが分からんとプログラムも理解できんでないのでは?と再びネットにて調べてみる。すると原理らしきが載っているサイトを発見!それによると下のレイヤと上のレイヤのエネルギー配分によって不透明度が作られているとの事。つまり上のレイヤの不透明度が70%なら下のレイヤは30%になると。
うむ、何となく分かったような。1ピクセルの中のRGBを上と下で配分して描画してけばいいってことですかね?
$alpha = 70;
$R = ($alpha*上のR値*0.01) + ((100-$alpha)*0.01*下のR値);
$G = ($alpha*上のG値*0.01) + ((100-$alpha)*0.01*下のG値);
$B = ($alpha*上のB値*0.01) + ((100-$alpha)*0.01*下のB値);
こんな感じで作って見ると、おお?見事に透けてますぜ?!!これで何とか要望に答えられそうです。ホッ
※不透明度のある合成は画像が3枚必要になるようです。下の画像、不透明したい画像、上の画像(不透明度のない画像)
もっと簡単に出来る方法があるよという方教えて頂けると嬉しいのですが。
今日はこんな感じで。
トラックバック URL :
コメント (0)


