如何在Python中获取音乐的专辑图片?

时间:2017-06-11 05:42:26

标签: python-3.x mutagen

我想在Python GUI窗口中插入音乐(mp3)的专辑图片作为图像。我为此目的使用了mutagen ID3图片类。它是在docs中描述的,但我完全不知道该怎么做。亲切地,我想要一个例子来说明如何正确地做到这一点。如果可能,请说明是否有其他选择。

感谢 - 你!

2 个答案:

答案 0 :(得分:1)

Stagger是一个用于修改id3v2标签的库;它非常容易使用:

In [1]: import stagger

In [2]: mp3 = stagger.read_tag('/home/gokul/Music/Linkin Park - Burning In The Skies.mp3')

In [3]: mp3.artist
Out[3]: 'Linkin Park'

In [4]: mp3.album
Out[4]: 'A Thousand Suns'

In [5]: mp3.picture  # the cover has not been set yet
Out[5]: ''

其他API类似于此。您可以像这样修改标签:

In [6]: mp3.album = 'Changed It'

In [7]: mp3.album
Out[7]: 'Changed It'

要设置相册/封面图片,您只需要......

In [10]: mp3.picture = '/home/gokul/Pictures/Cover.jpg' # path to file

In [11]: mp3.picture  # the cover has been saved!
Out[11]: 'Other(0)::<2834 bytes of jpeg data>'

您必须立即将标记保存到文件中:

In [12]: mp3.write()

那就是它!完成;)
如果要查看文件中的所有标记,请使用mp3.frames

In [13]: mp3.frames()
Out[13]: 
[TIT2(encoding=0, text=['Burning In The Skies']),
TPE1(encoding=0, text=['Linkin Park']),
TALB(encoding=0, text=['Changed It']),
APIC(encoding=None, mime='image/jpeg', type=0, desc='', data=<2834 bytes of binary data b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00'...>)]

干杯!

P.S。你可以使用stagger修改任何id3v2标签;其中一些(最常见的)可以使用mp3.title = 'title'之类的格式进行修改。有关编辑其他(非常见和复杂)标记的信息,请参阅stagger's GitHub page

答案 1 :(得分:0)

我从Gokul的答案开始,发现有一种方法可以用以下代码解码您错开的图像数据:

from PIL import Image
import stagger
import io

mp3 = stagger.read_tag('song.mp3')
by_data = mp3[stagger.id3.APIC][0].data
im = io.BytesIO(by_data)
imageFile = Image.open(im)

imageFile变量保存图像的方式与直接使用导入jpg的方式相同

imageFile = Image.open("test_image.jpg")

因此,现在您可以根据需要使用mp3文件中的专辑封面。我认为有多种方法可以将图像添加到GUI,但是我使用的方法是添加行

import tkinter
from PIL import ImageTk

photo = ImageTk.PhotoImage(imageFile)
label = tkinter.Label(image=photo)
label.image = photo
label.pack()