2

画像データを am id3 タグから jpg ファイルに保存しようとしています

私の実際のスクリプトは画像データを読み取り、それをファイルに書き込みます。このコードは元の画像ファイルとまったく同じように見えますが、開くと次のようになります: http://i.imgur.com/opq3Gqb.jpg 元の画像: http://i.imgur.com/ZZGLBmK.jpg

次のコードを使用します。

use MP3::Tag;
use strict;
use warnings;

    my $filepath = "test.mp3";

    my $mp3 = MP3::Tag->new($filepath);
    $mp3->get_tags();

    my $id3v2_tagdata   = $mp3->{ID3v2};
    my $info            = $id3v2_tagdata->get_frame("APIC");
    my $imgdata         = $$info{'_Data'};

     $mp3->close();

open (COVER, ">test.jpeg");
print COVER "$imgdata";
close (COVER); 

私の間違いはどこですか?

4

1 に答える 1

2

ファイルハンドルをバイナリモードで開く必要があるかもしれません:

binmodeドキュメント から直接: 「つまり、プラットフォームに関係なく、画像などのバイナリデータに binmode() を使用してください。」

use strict;
use warnings;
use autodie;

...

open my $fh, '>:raw', 'test.jpeg';
binmode $fh;
print $fh $imgdata;
close $fh;

PerlIOさまざまなモードでファイルを開く方法について詳しくは、こちらをお読みください。'>:raw'上記のコードには、理解を深めるためにとの両方を含めbinmode $fhましたが、これらのインジケーターは実際には PerlIO で読むのと同等です。そのため、どちらか一方だけを自由に使用してください。

于 2014-03-16T22:50:16.493 に答える