PIL显示四通道图片出错问题

1. 报错信息

我在使用PIL库创建图像的时候遇到的错误

from PIL import Image,ImageDraw,ImageFont h = 500 w = 500 trans_bg = Image.new("RGBA",(w,h),(255,0,255,0)) trans_bg 上面这段代码出现报错 详细信息如下 OSError: cannot write mode RGBA as JPEG

The above exception was the direct cause of the following exception: 4 except Exception as e: 645 msg = f"Could not save to {image_format} for display" --> 646 raise ValueError(msg) from e 647 return b.getvalue()

ValueError: Could not save to JPEG for display

搜索到的大部分回答是这个错误是由于尝试将RGBA模式的图像保存为JPEG格式而引起的。JPEG格式不支持透明度通道,因此无法保存RGBA图像。
我个人猜测是PIL显示时。是JPEG格式,但是由于JPEG是三通道所以不可以显示四通道图片。

2. 解决方法

使用 matplotlib来进行显示

# 导入PIL
from PIL import Image,ImageDraw,ImageFont
import matplotlib.pyplot as plt

h = 500
w = 500
# 透明底图
bg = Image.new(mode='RGBA',size=(w,h),color=(255,0,255,0))
# 绘制
img = ImageDraw.Draw(im=bg ,mode='RGBA')
font = ImageFont.truetype('./fonts/MSYH.ttc',40,encoding="utf-8")```
img.text((50,10),"使用PIL创建图层",font=font,fill=(0,0,255,255))

plt.imshow(bg)

此时我要修改bg的一些数据 因此转换成ndarray格式,此外还要copy,否则无法修改数值

import numpy

trans_bg_np = np.asarray(bg)
# 创建一个可写的副本 trans_bg_np是一个只读视图,无法直接修改其中的元素。
trans_bg_np_copy = np.copy(trans_bg_np)
# alpha通道设置
trans_bg_np_copy[:,:,3] = np.where(black_bg==255,0,trans_bg_np_copy[:,:,3])
# 将副本转换回PIL图像
trans_bg_modified = Image.fromarray(trans_bg_np_copy)
# 显示修改后的图像
trans_bg_modified.show()
plt.imshow(trans_bg_modified )
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

越狱兔崽子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值