M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2011年12月19日 22:55

Windows ICO形式を変換するならImage::MagickよりImagerのほうがいいかも

このエントリーをはてなブックマークに追加 mixiチェック

M.C.P.C.: Favicon API α版の代わりに自サイトにAPIを設置する

にて、Windows ICO形式のFaviconをGIF形式に保存しなおすために、ImageMagick(と、PerlバインディングImage::Magick)を使っていたのですが、複数のアイコンが入っているICOへの対応が難しく、むりくり対応させても今度はImageMagickのバージョンによってICOの解釈がうまくいかなかったりしていました。

これを解決するために、favicon.hatena.ne.jpの非公開APIをキャッシュの期限を充分長くしたうえで使って、それで2年ぐらい運用してきたのですけれども、このAPI、もともとはてなブックマークで使われている内部APIなので、「はてなブックマークされたサイトでないとFaviconが取得されていない」という仕様であることがさっきわかりました!

そこで、Image::MagickとImagerの比較をして、使い勝手を確認しました。

use strict;
use warnings;
use Image::Magick;
use Imager;
use LWP::Simple;
 
my $data = get('http://www.yahoo.co.jp/favicon.ico');
 
#use_image_magick( $data );
use_imager( $data );
 
exit;
 
sub use_image_magick {
  my $data = shift;
  my $im = Image::Magick->new;
  $im->set( Magick => 'ico');
  $im->BlobToImage($data);
    # ↑ICOに複数のイメージが入っているとNG
    # ファイルに書き出せば$im->Read('hoge.ico[0]')などで取り出せる
  $im->Resize(width => 16, height => 16);
  $im->Write('favicon.png');
  undef $im;
}
 
sub use_imager {
  my $data = shift;
  my $im = Imager->new;
  $im->read( data => $data, type => 'ico' );
  $im = $im->scale(  xpixels => 16, ypixels => 16, type => 'min' );
  $im->write( file => 'favicon.png' );
  undef $im;
}
 
__END__


実際に200サイトぐらいで比較してみたら、Image::Magickのほうは、(事情によりImageMagickのバージョンを上げることができないため)Faviconが化けることがありましたが、Imagerのほうは結構平気でした。

yumみたいなパッケージ管理システムでいろんなライブラリを入れる必要がありますが、rootを持っている人ならばImagerを使ってみると捗るかもしれません。

投稿 大野 義貴 [Web] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3805

コメントする