PHPでPNG画像をリサイズする。
2008年6月27日 21:41
PHPで画像をリサイズするという作業をよく行う(個人的に)のだけど、これまではjpeg画像でよくやってた。実際このサイトのphotoの部分も自作したPHPプログラムでサムネイルの作成を行っている。
ちなみに画像のリサイズをやるには、以下の方法(プログラムではなく概念)
こんな方法で、jpeg画像ならすんなりいける。
しかーし!PNG画像、特に透過PNGの画像をこのやりかたでやってしまうと、透過部分が黒くなる。という現象がおきる。
なぜか?この理由は・・・
ほんじゃ、どうするかということだけど、色々調べたり質問したりしたら次のようなプログラム(おおまか)でいける。
以上。
今までとの違いは、
何をやっているのかというと、
そうするとPNG画像でもちゃんと透過してくれるのです。よかったよかった。
ちなみに画像のリサイズをやるには、以下の方法(プログラムではなく概念)
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);この4行。
imageSaveAlpha($new,true);
$fillcolor = imagecolorallocatealpha($new,0,0,0,127);
imagefill($new,0,0,$fillcolor);
何をやっているのかというと、
imageSaveAlpha()関数を使えるように、描画モードをアルファチャネルが使えるように設定して、この作業をおこなって、該当PNG画像を貼り付ける(表現は勘弁)。
実際にimageSaveAlpha()関数の実行で、保存できるように設定
$newに対して、透明色を用意して
$newキャンパスを透明色で塗りつぶす。
そうするとPNG画像でもちゃんと透過してくれるのです。よかったよかった。
PHP画像関係 | comment(0) | trackback(0) | ▲