AVIF数据流无法保存为图片

文章描述了一个在Python中处理AVIF格式图像时遇到的问题,包括从base64编码的数据解码,保存AVIF图片时引发的UnicodeDecodeError错误,以及如何通过Pillow_Avif库解决保存问题,并将AVIF图片转换为JPEG格式以适应其他场景(如插入Excel表格)的需求。
摘要由CSDN通过智能技术生成
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">

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值