import base64
from PIL import Image
data = "data:image/avif;base64,AAAAHGZ0eXBhdmlmAAAAAGF2aWZtaWYxbW...."
img_data = data.split(',')[-1]
pic_name = 'image.avif'
# 解码base64 编码的数据
byte_data = base64.b64decode(img_data)
image = Image.open(byte_data)
image.save('image1.avif')
运行会提示:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xea in position 31: invalid continuation byte
将最后两行
image = Image.open(byte_data)
image.save('image1.avif')改为:
with open(pic_name, 'wb') as f: f.write(byte_data)
import base64
from PIL import Image
data = "data:image/avif;base64,AAAAHGZ0eXBhdmlmAAAAAGF2aWZtaWYxbW...."
img_data = data.split(',')[-1]
pic_name = 'image.jpg'
# 解码base64 编码的数据
byte_data = base64.b64decode(img_data)
with open(pic_name, 'wb') as f:
f.write(byte_data)
保存的图片是一张空图片,但是拖到网页中可以打开,无法插入到excel表格中,这个该死的avif应该如何保存啊
PS:已解决,做个记录,忘了好回来看。
import pillow_avif #pip install pillow-avif-plugin
一定要加pillow_avif 这个包,没有代码直接调用,但是一定要加,否则无法保存avif图片,不知道有没有其他办法。
有的机器上国内镜像还无法下载,换官网 pip install -i https://pypi.org/simple pillow-avif-plugin
picstring = pic[0].split("base64,")[1]
# 将数据流从str转换为bytes二进制格式
binary_data = base64.b64decode(picstring)
print(pic_name)
#保存为.avif本地图片
with open(pic_name, 'wb') as f:
f.write(binary_data)
try: # 图片保存容易出问题,跳过问题商品
print('保存图片')
#将avif格式图片转换为jpg格式
pic_name = avif_2_jpg(pic_name)
def avif_2_jpg(pic_name):
AVIFimg = Image.open(pic_name)
AVIFimg.save(pic_name.replace("avif", 'jpg'), 'JPEG')
pic_name = pic_name.replace("avif", 'jpg')
return pic_name
<img
src="data:image/avif;base64,AAAAHGZ0eXBhdmlmAA。。。2kgEqRaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" height="260" width="260" class="MainPic--mainPic--rcLNaCv">