2

サイトからファビコンを取得するスクリプトに取り組んできましたが、現在はほとんど機能していますが、大きな障害に遭遇しました。Perl で ImageMagick モジュールを呼び出すと、由緒ある favicon.ico ファイルをどう処理すればよいかわかりません (サイトに非 ICO ファビコンがある場合、すべてがうまく機能します)。ICO に変換してファビコンを作成する方法については多くの情報を見つけることができますが、 ICOからの変換についてはあまり情報がありません。

ファビコンを取得した後、PerlMagick の ping 関数を使用して、処理しているファイルの種類を特定します (したがって、アイコンのサーバーに依存して正確に報告することはありません)。

    use Image::Magick;
    my $im = Image::Magick->new();
    my ($width, $height, $size, $format) = $im->Ping( $saveFile );

ファイルが ICO ファイルの場合、$format空に戻ります (要求元のサーバーはそれを として報告しますimage/x-icon)。ダウンロードしたすべてのものの JPEG サムネイルを作成する小さなサブルーチンもあります。ICO 以外のファイルではうまく機能しますが、ImageMagick は ICO から変換するときに空のファイルを作成します。

    open my $file, $params->{'openFile'};
    my $imageData = do { local $/; <$file> };

    my $image = Image::Magick->new;
    $image->BlobToImage($imageData);
    $image->SetAttribute(quality => 80);
    $image->SetAttribute(compression => 'JPEG');
    $image->SetAttribute(geometry => $thumbnailWidth . "x" . $thumbnailHeight);
    $image->Thumbnail();

    my $thumbnailData = $image->ImageToBlob();


    open(my $file, '>', $params->{'saveFile'}) or die "Could not open file '" . $params->{'saveFile'} . "'.";
    print $file $thumbnailData;
    close $file;

どうにかして ImageMagick にファイルを認識させる必要がありますか? ダウンロードしたファビコンを保存していて、初期ファイルは有効な ICO ですが、ImageMagick はそれを認識しません。

更新:これは、動作している ico ファイルの 1 つへのリンクです。ただし、私が試したすべての ico ファイルは動作しました。

コマンド ラインの ImageMagickconvertツールを試してみると、結果は次のようになります。

[root@local favicons]# convert 1299 1299-jpg.jpg
convert: no decode delegate for this image format `' @ error/constitute.c/ReadImage/564.
convert: no images defined `1299-jpg.jpg' @ error/convert.c/ConvertImageCommand/3235.
4

1 に答える 1