我试图将图像数据从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);
我的错误?
答案 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时非常等效。所以请随意使用其中一种。