Imagerで背景が透過したサムネイル(png)を生成する。
2015年2月18日
昨日生成した、サムネ画像(Imagerでサムネイルを生成する(元画像の比率を維持))ですが、背景に色をつけてしまうと、Webで使いにくいので、もう背景は透過にしてしまいます。
use Imager; my $file = '/tmp/face.png' my $new_file = '/tmp/new_face.png'; my $img = Imager->new(); $img->read( file => $file ) or die; # 元の画像を読み込み # 300x200以内に収まるように縮小 $img = $img->scale( xpixels => 300, ypixels => 200, type => 'min', ); my $w = $img->getwidth(); # 横幅取得 my $h = $img->getheight(); # 高さ取得 my $x = ($w != 300) ? int((300-$w) / 2) : 0; # 中央に寄せる為に横へずらす幅 my $y = ($h != 200) ? int((200-$h) / 2) : 0; # 中央に寄せる為に縦へずらす高さ my $img2 = Imager->new(xsize => 300, ysize => 200, channels => 4 ); # 背景となる透過した画像を生成 $img2->paste( left => $x, top => $y, img => $img ); # 中央位置に縮小した画像を貼り付け $img2->write( type => 'png', file => $new_file ); # pngで保存
ポイントは、”channels => 4″の指定。
こいつを指定する事で、透過背景を生成できます。
あとは、縮小した画像と合成して、保存するだけ。お手軽。