PHPでPNG画像をリサイズする。

| コメント(0) | トラックバック(0)
PHPで画像をリサイズするという作業をよく行う(個人的に)のだけど、これまではjpeg画像でよくやってた。実際このサイトのphotoの部分も自作したPHPプログラムでサムネイルの作成を行っている。

ちなみに画像のリサイズをやるには、以下の方法(プログラムではなく概念)
1.画像を取得する
2.サイズを決める
3.imagecreatetruecolor(width,height)でキャンパスを用意する
4.用意したキャンパスにサイズを指定して、貼り付ける(表現が正しいかは不明)
5.保存する。

こんな方法で、jpeg画像ならすんなりいける。
しかーし!PNG画像、特に透過PNGの画像をこのやりかたでやってしまうと、透過部分が黒くなる。という現象がおきる。
なぜか?この理由は・・・
imagecreatetruecolor()関数で用意したキャンパスの背景は黒
というものあるからだ。
ほんじゃ、どうするかということだけど、色々調べたり質問したりしたら次のようなプログラム(おおまか)でいける。

$ori = imagecreatefrompng("hogehoge.png");
$ori_x = imagesx($ori);
$ori_y = imagesy($ori);

$new = imagecreatetruecolor($new_w,$new_h);
imagealphablending($new,false);
imageSaveAlpha($new,true);
$fillcolor = imagecolorallocatealpha($new,0,0,0,127);
imagefill($new,0,0,$fillcolor);
imagecopyresampled($new,$ori,0,0,0,0,$new_w,$new_h,$ori_x,$ori_y);

以上。
今までとの違いは、
imagealphablending($new,false);
imageSaveAlpha($new,true);
$fillcolor = imagecolorallocatealpha($new,0,0,0,127);
imagefill($new,0,0,$fillcolor);
この4行。
何をやっているのかというと、
imageSaveAlpha()関数を使えるように、描画モードをアルファチャネルが使えるように設定して、
実際にimageSaveAlpha()関数の実行で、保存できるように設定
$newに対して、透明色を用意して
$newキャンパスを透明色で塗りつぶす。
この作業をおこなって、該当PNG画像を貼り付ける(表現は勘弁)。

そうするとPNG画像でもちゃんと透過してくれるのです。よかったよかった。

トラックバック(0)

トラックバックURL: http://sevenstyleweb.com/mt5/mt-tb.cgi/157

コメントする

    follow me on Twitter

    このブログ記事について

    このページは、adminが2008年6月27日 21:41に書いたブログ記事です。

    ひとつ前のブログ記事は「ブログパーツ 日産ノート」です。

    次のブログ記事は「アーカイブページを作成してみた。」です。

    最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。