Perl:从外部JPG文件中的MP3 ID3-Tags保存封面

时间:2014-03-16 22:44:32

标签: perl file mp3 jpeg cover

我试图将图像数据从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); 

我的错误?

1 个答案:

答案 0 :(得分: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时非常等效。所以请随意使用其中一种。