“原始图像数据,作为字节串”是什么意思?

时间:2015-06-25 09:43:23

标签: python mp3 id3 mutagen

我正在做一个用Python编辑mp3标签的程序,现在我正在使用mutagen模块,为了使用id3v4标准将图像作为封面艺术嵌入到mp3文件中,我必须添加APIC框架{ {3}}

但我不明白我必须在参数encodingmimedata中加入什么。

我从这里看了一个例子,想出了这个:

frame= APIC(3,"image/jpg",3,"Cover",open("albumcover.jpg"))

但我不知道前三个意味着什么?为什么当我放"utf-8"它不起作用?并且open()函数不起作用,它会返回如下错误:

Traceback (most recent call last):
  File "<pyshell#104>", line 1, in <module>
    frame= APIC(3,"image/jpg",3,"Cover",open("albumcover.jpg"))
  File "C:\Python34\lib\site-packages\mutagen\id3\_frames.py", line 65, in __init__
    setattr(self, checker.name, checker.validate(self, val))
  File "C:\Python34\lib\site-packages\mutagen\id3\_specs.py", line 184, in validate
    raise TypeError("%s has to be bytes" % self.name)
TypeError: data has to be bytes

当我放"b"

frame= APIC(3,"image/jpg",3,"Cover",open("albumcover.jpg","b"))

它返回

Traceback (most recent call last):
  File "<pyshell#106>", line 1, in <module>
    frame= APIC("utf-8","image/jpg",3,"Cover",open("albumcover.jpg","b"))
ValueError: Must have exactly one of create/read/write/append mode and at most one plus

那我该放什么?

我也试过了open("albumcover.jpg").read(),但它不起作用。

2 个答案:

答案 0 :(得分:0)

您需要以 - read(rb)或write(wb)或append(ab)模式之一打开文件(b - 表示它是二进制文件和我们从中读取字节而不是字符串)。

对于您的情况,我认为read模式就足够了,所以请尝试 -

frame= APIC(3,"image/jpg",3,"Cover",open("albumcover.jpg","rb").read())

rb表示我们需要以读取模式打开文件并且它是一个二进制文件,调用它上面的.read()函数会导致它从文件中读取字节并将其返回

答案 1 :(得分:0)

参数3表示它是专辑的封面read the documentation