あたらしものずきっ!

試してみたものとか、遊んでみたものを色々記してみます。

ImageMagickで一括画像変換の記録

個人サイトで配布してる素材がgifになっていたんだけれど、bmp形式に変換してのzip archive配布にしたくて、シェルスクリプト叩いたら一旦コピーしてbmpに変換した上にarchive化、というのを目論んでみた。

homebrew + imagemagick + cpanm + Image::Magickで、メンテナンス用にperlスクリプトを書こうと試みたところ、シェルスクリプトに落ち着いた過程を以下に。画像変換が鬼門だった。

CPANからImage::Magickを導入(使わなかったけれど)

homebrew経由にてimagemagickを入れた後で、cpanmからImage::Magickを入れる際にどうしても転ける。

Note (probably harmless): No library found for -lperl

理由としてはパスが通っていなかっただけのこと。でも、パスを確認してみたら、何故かあるべきはずのCOREディレクトリがなかった。仕方なくPerl自体を入れ直し。

perlbrew install perl-5.16.0
perlbrew switch perl-5.16.0

再びImage::Magickを入れる。Makefile.PLを一部修正して、COREディレクトリを通す。

cpanm --look Image::Magick
vim Makefile.PL

my $LIBS_magick = '-L/Users/haoyayoi/perl5/perlbrew/perls/perl-5.16.0/lib/5.16.0/darwin-2level/CORE -lMagickCore -lperl -lm';

とりあえずこれで通ったけど、use Image::Magickするとsegmentation fault。ぐぐってみたところ、homebrewでImageMagickを入れるときに--disable-openmpを渡すとよいらしい、とあったので試したところ変わらず。

これを解決しようとフラグを確認したり、バージョンを確認したりで、結果丸一日くらい使ってたけど、別にPerlMagick経由しなくてもいいんじゃね、って思ったところでやめた。

convertによる変換

wrapper使って苦しむのはどうも微妙な気がしたので、試しにImageMagickのconvertを使ってみた。

最初は以下の感じでトライ。が、出来上がったのは0バイトのbmp

convert a.gif a.bmp 

どうやら目的のbmpファイルの構成上、bmp3:と指定を付けないとダメらしい。(参考:ImageMagick で bmp に変換するときは「bmp3」てのを指定しないとダメらしい)

最終的に、こんな感じに落ち着いた。

for file in $(ls *.gif)
do
    convert $file bmp3:`echo $file | sed 's/gif/bmp/'`
done

正直なところ、シェルスクリプトの書き方がどこまでフリーダムに行けるのか理解してなくて、この書き方もありなのか、と。