如何从 MP3 ID3 标签中提取专辑封面?
Posted
技术标签:
【中文标题】如何从 MP3 ID3 标签中提取专辑封面?【英文标题】:How can I extract the album art from an MP3 ID3 tag? 【发布时间】:2013-05-25 05:13:00 【问题描述】:我可以使用 php 从我的 mp3 应用程序中成功获取 mp3 ID3 标签。我留下了一个巨大的 BLOB。我敢肯定这很简单,但我只需要在正确的方向上得到一点帮助。我想结束的是(BLOB DATA CORRECTED):
$media_year = implode($ThisFileInfo['comments_html']['year']);
$media_genre = implode($ThisFileInfo['comments_html']['genre']);
$media_jpg = [BLOBDATA];
(我知道这没有编程意义,但你明白了。前两行对我来说很好,但我不知道如何从 ID3 标签中获取 BLOBDATA 并将其转换为我可以显示的 JPG。)
在另一个教程中,我看到了这一点,但它并没有为我连接点:
[comments] => Array
(
[picture] => Array
(
[0] => Array
(
[data] => <binary data>
[image_mime] => image/jpeg
)
)
)
我讨厌要求读者“为我做这件事”,所以请原谅我。但我已经尝试了我能找到的所有资源。非常感谢任何帮助。
【问题讨论】:
【参考方案1】:我使用getid3 库来完成这项工作,就像
<?php
$Path="mp3 file path";
$getID3 = new getID3;
$OldThisFileInfo = $getID3->analyze($Path);
if(isset($OldThisFileInfo['comments']['picture'][0]))
$Image='data:'.$OldThisFileInfo['comments']['picture'][0]['image_mime'].';charset=utf-8;base64,'.base64_encode($OldThisFileInfo['comments']['picture'][0]['data']);
?>
<img id="FileImage" src="<?php echo @$Image;?>" >
在这段代码中,我使用base64_encode
将图像嵌入到 HTML 中,您可以看到
【讨论】:
我刚找到这个。忽略我的问题,非常感谢 *** !!! ***.com/questions/10483781/… Fillay 知道我需要将所有文件包含在 getId3 文件夹中才能使其正常工作。及其工作。非常感谢。【参考方案2】:您可以使用 file_put_contents() 将 id3 图像数据保存到文件中。
$path = "/Applications/MAMP/htdocs/site/example.mp3"; //example. local file path to mp3
$getID3 = new getID3;
$tags = $getID3->analyze($Path);
if (isset($tags['comments']['picture']['0']['data']))
$image = $tags['comments']['picture']['0']['data'];
if(file_put_contents(FCPATH . "imageTest.jpg", $image))
echo 'Image Added';
else
echo 'Image Not Added';
或者你可以使用
header('Content-Type: image/jpeg');
echo $tags['comments']['picture']['0']['data'];
【讨论】:
这不起作用,因为 file_put_contents 需要字符串格式的第一个参数,而不是 blob。你需要用 fwrite 来做【参考方案3】:我找到了一篇解释 ID3 标签结构的文章。 http://www.stagetwo.eu/article/19-MP3-ID3-Tags-Wie-kann-man-die-teile-lesen 这应该使您能够理解和解析它们。 它是德文的,但也许关于 ID3 标签结构的文章也可以通过谷歌翻译器阅读。 我喜欢重要字节的描述,例如关于 SyncSafe 整数的解释。
对于您的问题,它描述了 APIC(图像)框架的结构。
当您解析这些结构并获得字节流时,只需使用imagecreatefromstring($byteStream)
现在你的图像资源已经从 MP3 中拿出来了 :)
【讨论】:
以上是关于如何从 MP3 ID3 标签中提取专辑封面?的主要内容,如果未能解决你的问题,请参考以下文章
使用 TagLib 从 MP3 文件中提取专辑封面 - 有没有更好的方法编写此代码?