如何从MP3 ID3标签提取专辑封面?


How can I extract the album art from an MP3 ID3 tag?

我可以使用php成功地从mp3应用程序中获取mp3 ID3标签。我留下了一个巨大的BLOB。我相信这很简单,但我只需要在正确的方向上得到一点帮助。我想结束的是(BLOB数据纠正):

$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
                    )
            )
    )

我讨厌让读者"为我做",所以请原谅我。但我试过了所有能找到的方法。如有任何帮助,不胜感激。

我使用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" width="150" src="<?php echo @$Image;?>" height="150">

在这段代码中,我用base64_encode将图像嵌入到HTML中,您可以看到

您可以使用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'];

我找到了一篇解释ID3标签结构的文章。http://www.stagetwo.eu/article/19-MP3-ID3-Tags-Wie-kann-man-die-teile-lesen这将使您能够理解和解析它们。这是在德国,但也许关于ID3标签结构的文章也可以用谷歌翻译。我喜欢对重要字节的描述,例如对SyncSafe整数的解释。

对于你的问题,它描述了APIC(图像)框架是如何构建的。当你解析这些结构并得到字节流时,只需使用imagecreatefromstring($byteStream)现在你的图片资源已经从MP3中取出了:)