如何在PIL中正确保存并加载灰度WebP图像?
解决PIL保存WebP灰度图像后加载为RGB的问题
问题核心是PIL对WebP格式的灰度图像处理逻辑和PNG不同:PNG原生支持单通道灰度存储,而WebP在PIL的默认处理中,会将灰度图像转为RGB格式保存或加载。以下是两种可行的解决方法:
方法1:创建图像时显式指定灰度模式
在通过Image.fromarray创建图像对象时,明确指定mode='L'(灰度模式),强制图像以单通道格式保存:
import numpy as np from PIL import Image, ImageOps o = np.random.rand(100,100)*255 o = o.astype('uint8') # 显式声明灰度模式 im = Image.fromarray(o, mode='L') im.save('test.webp', lossless=True) im = Image.open(r"test.webp") a = np.asarray(im) print(a.shape) # 输出 (100, 100)
方法2:加载WebP后转换回灰度模式
如果保存环节无法避免格式转换,可在加载WebP图像后,通过convert('L')将三通道RGB图像转回单通道灰度:
import numpy as np from PIL import Image, ImageOps o = np.random.rand(100,100)*255 o = o.astype('uint8') im = Image.fromarray(o) im.save('test.webp', lossless=True) # 加载后转灰度 im = Image.open(r"test.webp").convert('L') a = np.asarray(im) print(a.shape) # 输出 (100, 100)
内容的提问来源于stack exchange,提问作者user1506145
相关产品推荐
相关产品推荐

