2007-07 / 2007-07-25

前のエントリ: キーコードの送信 [c]
次のエントリ: LWPでリクエストヘッダ付 Web アクセス(proxy込) [perl]

GDで画像編集
2007-07-25-1 / カテゴリ: [perl] / [permlink]

BMP形式はGDで操作できないので、予めpngあたりに変換しておく。


○ トリミングする
1. 元ファイルを開く
2. あて先pngデータを作成する
3. 元ファイルから座標指定であて先pngへコピーする(トリム処理)
4. あて先pngを書き出す
// 元ファイルを開く
my $src = GD::Image->new($srcfilename);

// あて先pngを作成
my $dst = GD::Image->new($newWidth, $newHeight);

// 座標指定であて先pngへコピー
$dst->copy($src, 0, 0, $srcX, $srcY, $width, $height);

open W, "> $dstfile"
  or die "cannot open $dstfile: $!\n";
binmode W;

print W $dst->png();
close W;
copy()メソッドは
copy(元データのGDオブジェクト, あて先開始X座標, あて先開始Y座標, コピー元開始X座標, コピー元開始Y座標, コピーする幅, コピーする高さ)
座標は、画像の左上が(0,0)、右下が(width, height)

○ リサイズ
1. 元ファイルを開く
2. あて先pngを作成する
3. 元ファイルから座標&サイズ指定であて先pngへコピー
4. あて先pngを書き出す
// 元ファイルを開く
my $src = GD::Image->new($srcfile);
// 元ファイルの幅/高さの取得
my ($width, $height) = $src->getBounds();
// あて先pngの作成
my $dst = GD::Image->new($newWidth, $newHeight);
// リサイズ
$dst->copyResized($src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
// 書き出し
open W, "> $dstfile"
  or die "cannot open $dstfile: $!\n";
binmode W;

print W $dst->png();
close W;
copyResized()メソッドは
copyResized(元データのGDオブジェクト, あて先開始X座標, あて先開始Y座標, コピー元開始X座標, コピー元開始Y座標, コピー先の幅, コピー先の高さ, コピー元の幅, コピー元の高さ)

組み合わせれば、「画像の上半分はそのまま・下半分のみ高さ1/2にリサイズ」みたいな処理もコマンド1発。

GD.pm (perldoc)
前のエントリ: キーコードの送信 [c]
次のエントリ: LWPでリクエストヘッダ付 Web アクセス(proxy込) [perl]

2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2013-05-02 16:12