我试图将图像数据从id3标签保存到jpg文件
我的实际脚本读取图像数据并将其写入文件,该代码看起来与原始图像文件完全相同,但如果我打开它,它看起来像这样:https://i.stack.imgur.com/o3ZDd.jpg原始图片:https://i.stack.imgur.com/p6XCK.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);
我错在哪里?
可能需要以二进制模式打开文件句柄:
直接来自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中读到的相同。所以你可以随意使用其中一个