Musicbrainsngs获取的二进制图片数据类型判定与处理咨询
嘿,我来帮你搞定这个Musicbrainzngs获取专辑封面的问题!
关于Musicbrainzngs返回专辑封面数据的处理方案
一、先搞清楚返回的是什么类型的数据
首先,Musicbrainz API返回的所谓“二进制图片数据”,大概率是原始的二进制字节流(不是Base64编码),不过也有小概率是Base64格式,快速判断方法如下:
- 肉眼快速验证:Base64只会包含A-Z、a-z、0-9、+、/、=这些字符,如果你的数据样本里有非打印的奇怪字符,那就是原始二进制;如果全是上述合法字符,那可能是Base64编码。
- 代码验证更靠谱:用
type()看返回值,如果是bytes类型,那就是原始二进制;如果是str类型,用base64.b64decode()试解码,不报错的话就是Base64格式。
二、如何保存为本地图片文件
分两种场景处理:
场景1:返回的是原始二进制字节流(bytes类型)
直接以二进制模式写入文件即可,不用额外编码:
import musicbrainzngs # 记得设置用户代理(Musicbrainz强制要求,不然会请求失败) musicbrainzngs.set_useragent("你的应用名称", "1.0", "你的联系方式") # 获取专辑封面数据,替换成你的专辑MBID cover_data = musicbrainzngs.get_image_front("目标专辑的MBID") # 保存为图片,格式可以根据实际情况选png/jpg with open("album_cover.png", "wb") as f: f.write(cover_data)
场景2:返回的是Base64编码字符串(str类型)
先解码成二进制再保存:
import base64 import musicbrainzngs musicbrainzngs.set_useragent("你的应用名称", "1.0", "你的联系方式") cover_data = musicbrainzngs.get_image_front("目标专辑的MBID") # 解码Base64字符串为二进制 decoded_data = base64.b64decode(cover_data) with open("album_cover.png", "wb") as f: f.write(decoded_data)
三、如何在HTML中展示
同样分两种场景:
场景1:原始二进制字节流
先转成Base64编码,再用Data URI嵌入HTML:
import base64 import musicbrainzngs musicbrainzngs.set_useragent("你的应用名称", "1.0", "你的联系方式") cover_data = musicbrainzngs.get_image_front("目标专辑的MBID") # 二进制转Base64字符串 base64_str = base64.b64encode(cover_data).decode("utf-8") # 注意图片格式要对应,不确定的话可以先查图片元数据 img_html = f'<img src="data:image/png;base64,{base64_str}" alt="专辑封面">'
把生成的img_html插入到你的HTML页面里就能直接展示了。
场景2:已经是Base64字符串
直接用Data URI嵌入即可:
img_html = f'<img src="data:image/png;base64,{cover_data}" alt="专辑封面">'
小技巧
如果不确定图片格式,可以先调用musicbrainzngs.get_image_list("专辑MBID")获取图片的元数据,里面会明确标注图片格式(png/jpg等),这样就不用瞎试啦!
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

