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 回答