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