我终于能够解决这个问题,虽然不是很优雅。
第一步是加载图像。由于某种原因,我无法使用eyed3
,但TinyTag
可以完成这项工作:
from PIL import Image
from tinytag import TinyTag
tag = TinyTag.get(mp3_path, image=True)
image_data = tag.get_image()
img_bites = io.BytesIO(image_data)
photo = Image.open(im)
然后我操纵它。例如,我们可以调整它的大小并将其另存为jpg
. 因为我们在这些操作中使用了Pillow
( PIL
),所以我们实际上需要保存图像,最后将其加载回来以获取二进制数据(这个细节可能是这个过程中应该改进的地方)。
photo = photo.resize((500, 500)) # suppose we want 500 x 500 pixels
rgb_photo = photo.convert("RGB")
rgb_photo.save(temp_file_path, format="JPEG")
因此,最后一步是加载图像并将其设置为元数据。您在此答案中有有关此步骤的更多详细信息。:
audio_file = eyed3.load(mp3_path) # this has been loaded before
audio_file.tag.images.set(
3, open(temp_file_path, "rb").read(), "image/jpeg"
)
audio_file.tag.save()