るさんちまん

技術メモとか雑記とか

Image::Magickでgif画像をcropする

Perlの Image::Magick を使ってgif画像をcropしようとして一日ハマったのでメモ。

use Image::Magick;

my ($WIDTH, $HEIGHT) = (320, 240);
my ($MOVE_X, $MOVE_Y) = (50, 100);

my $image = Image::Magick->new;
$image->Read('original.gif');

$image->Crop(geometry =>
    sprintf('%dx%d+%d+%d', $WIDTH, $HEIGHT, $MOVE_X, $MOVE_Y));
$image->Set(page => sprintf('%dx%d+0+0', $WIDTH, $HEIGHT); # これが重要!

$image->Write('cropped.gif');

こんな感じでcropできます(動かしてないので色々とミスってるかも)。
ここで大事なのが、Cropした後にSetすること
なにを隠そうこれに気づくまでに一日かかりました(´;ω;`)

他の処理も挟みながら透過gifを出力させようとしていたのですが、、
Setしないと画像の背景部分まで出力されてしまい、意図した結果になりませんでした。

Perl モジュール Image::Magick で画像を切り抜く方法 | ミヤビッチの穴で紹介されていて助かりました。