2013年5月30日木曜日

perlで画像の種類を判定する


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

モジュール探し

できるだけ依存が少ないモジュールで作りたいなぁと思って探すとImage::Infoというモジュールがあったので使ってみました。
yanchaで質問して、Image::JpegCheckというモジュールがあることを知りましたが、名前の通りjpegだけですので、今回の用途には使えず。
Image::InfoもImage::JpegCheckもやっていることはほぼ同じで、画像の一部だけ読み込んで判定しています。

コード

ファイル名に拡張子がある場合は拡張子を用いて判定しています。
拡張子がなければ画像データから判定。

sub media_type {
    my $image_path  = shift;

    require MIME::Types;
    my ($type) = MIME::Types::by_suffix($image_path); #画像ファイル名から判定

    unless ($type) {
        require Image::Info;
        my $img_info = Image::Info::image_type($image_path); #画像データの一部から判定
        if ( $img_info->{error} ) {
           die sprintf("Can't determine file type: %s", $img_info->{error});
        }
        $type = 'image/'.$img_info->{file_type};
    }
    lc($type);
}

0 件のコメント:

コメントを投稿