保存封面从MP3 id3标签在外部JPG文件



我试图将图像数据从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中读到的相同。所以你可以随意使用其中一个

相关内容

  • 没有找到相关文章