PIL PNG格式通道问题的解决方法

Posted 林深时见鹿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PIL PNG格式通道问题的解决方法相关的知识,希望对你有一定的参考价值。

近来研究图片的剪切拼接,用到PIL,在打开PNG格式保存为JPEG格式的图片发现报错:

 1 import os
 2 from PIL import Image
 3 
 4 
 5 im = Image.open(rE:\work\testcrop\test\hn1.png)
 6 img_size = im.size
 7 w = img_size[0] / 2.0
 8 h = img_size[1]
 9 x = 0
10 y = 0
11 print("图片宽度和高度分别是{}".format(img_size))
12 region = im.crop((x, y, x + w, y + h))
13 a = "1.jpeg"
14 region.save(a)

报错:

raise IOError("cannot write mode %s as JPEG" % im.mode)
OSError: cannot write mode RGBA as JPEG

查资料发现是PNG有RGBA四个通道,而JPEG是RGB三个通道,所以PNG转BMP时候程序不知道A通道怎么办,就会产生错误。

解决方法就是检查通道数,舍弃A通道。

 1 import os
 2 from PIL import Image
 3 path = rE:\work\testcrop\test\hn2.png
 4 if png in path[-4:]:
 5     im = Image.open(path)
 6     r, g, b, a = im.split()
 7     im = Image.merge("RGB", (r, g, b))
 8     os.remove(path)
 9     im.save(path[:-4] + ".jpeg")
10 path = path[:-4] + ".jpeg"
11 im = Image.open(path)
12 img_size = im.size
13 w = img_size[0] / 2.0
14 h = img_size[1]
15 x = 0
16 y = 0
17 print("图片宽度和高度分别是{}".format(img_size))
18 region = im.crop((x, y, x + w, y + h))
19 a = "2.jpeg"
20 region.save(a)

至此解决。

参考:http://blog.csdn.net/smallflyingpig/article/details/56036771

以上是关于PIL PNG格式通道问题的解决方法的主要内容,如果未能解决你的问题,请参考以下文章

第96天:图像库 PIL

第96天:图像库 PIL

Python用PIL将PNG图像合成gif时如果背景为透明时图像出现重影的解决办法

深度学习中图像格式选用jpg还是png?答:png

用PS修改PNG格式图标的颜色

python3之成像库pillow