一、Image的模式mode转换
常用模式 L RGB RGBA CMYK
from PIL import Image#不需要关注文件格式,PIL会自动处理im = Image.open("background.jpg")im=im.convert("L")im.show()
![c6b4633ed84aa00bcc562e35226cb6fb.png](https://i-blog.csdnimg.cn/blog_migrate/66336ac322af49191fc62605a06e854c.jpeg)
im.convert("L")显示的图片
二、图片更改效果
使用图片过滤器更改效果 使用ImageFilter模块
from PIL import Imagefrom PIL import ImageFilter#不需要关注文件格式,PIL会自动处理im = Image.open("background.jpg")im = im.filter(ImageFilter.CONTOUR)im.show()im = im.filter(ImageFilter.EMBOSS)im.show()
![5205fefb145df22ae6dc138a165da9dc.png](https://i-blog.csdnimg.cn/blog_migrate/c8753fe464717b7df2454f45ebc22b45.jpeg)
ImageFilter.CONTOUR使用的效果
![1e706bd46fd0ba66560315f8f240361e.png](https://i-blog.csdnimg.cn/blog_migrate/a6e57a9bea0c10b5f392df070f7c90be.jpeg)
ImageFilter.EMBOSS
对单个像素点的修改效果
from PIL import Image#不需要关注文件格式,PIL会自动处理im = Image.open("background.jpg")r, g, b = im.split()#更改r 图层的像素点r=r.point(lambda x:x if x<100 else 255)im = Image.merge("RGB", (r,g,b))im.show()
![e7b467a090ff2eb3b0748e25f2057098.png](https://i-blog.csdnimg.cn/blog_migrate/d1fb2b22b9288545b8d8e70087111e00.jpeg)
更改r 图层的像素点的效果图片
使用ImageEnhance模块修改图片效果
增加图片90%对比度
增加90%对比度from PIL import Imagefrom PIL import ImageEnhance#不需要关注文件格式,PIL会自动处理im = Image.open("background.jpg")enh = ImageEnhance.Contrast(im)#增加90%对比度enh.enhance(1.9).show()
![9cb3ddf5765e2cd9a65f641eee54c93e.png](https://i-blog.csdnimg.cn/blog_migrate/41ab75607b709685ebdc398d7c34ef82.jpeg)
增加90%对比度
三、处理动图、使用Image的tell、seek方法或使用ImageSequence模块
![52c184c2a653a54acdada4ec46dfac28.gif](https://i-blog.csdnimg.cn/blog_migrate/959bdb8f6b72859754c35d9034a94bf8.gif)
预生成的gif图片
from PIL import Image#不需要关注文件格式,PIL会自动处理im = Image.open("1586920674140.gif")print(im)## 获取第二张图片,使im的指针指向的二张图片im.seek(1) #获取当前位置 print结果为1print(im.tell())im.show()
获取的index为1的图片
![9ab35ae8b9d467ec1d7b524bf3015df9.png](https://i-blog.csdnimg.cn/blog_migrate/dc8d302016d7bb71ce8339151d187f79.jpeg)
使用ImageSequence模块实现
from PIL import Imagefrom PIL import ImageSequence#不需要关注文件格式,PIL会自动处理im = Image.open("1586920674140.gif")for frame in ImageSequence.Iterator(im): print(frame) frame.show()
四、更多读取图片的方式
通过二进制文件指针文件读取
from PIL import Imagewith open("background.jpg", "rb") as fp: im = Image.open(fp) im.show()
通过字符串读取
from PIL import Imagefrom io import BytesIO as Bytes2Datawith open("background.jpg","rb") as fp: s=fp.read() iostr=Bytes2Data(s) newim = Image.open(iostr) newim.show()
通过压缩包形式如tar 形式读取
from PIL import Image, TarIOfp = TarIO.TarIO("bg.tar", "backgound.jpg")im = Image.open(fp)im.show()
![a6f07098d77404980dcd170c5dbaeae8.png](https://i-blog.csdnimg.cn/blog_migrate/57b35d8e3b6b59c14754611f4e5eb7b3.jpeg)
五、预处理图片draft
因为open方法时懒加载,在没有实际使用时如 show 或save等方法时,可以使用draft 方法预处理
from PIL import Imageim = Image.open("background.jpg")#im.show()print("original =", im.mode, im.size)im.draft("L", (100, 100))print("draft =", im.mode, im.size)im.show()
![87deb6973aaed6b9040baefdcfb2a329.png](https://i-blog.csdnimg.cn/blog_migrate/38a1e48d5646cb730f1dccf8c7bcc650.jpeg)
若取消注释im.show()
from PIL import Imageim = Image.open("background.jpg")im.show()print("original =", im.mode, im.size)im.draft("L", (100, 100))print("draft =", im.mode, im.size)im.show()
![2fd34c59d39b6f5731355c12dcad0f6d.png](https://i-blog.csdnimg.cn/blog_migrate/ecbaaa36bf3e7e1d4b25017529ac31e7.jpeg)
参考网站
https://pillow.readthedocs.io/en/5.2.x/handbook/tutorial.html
#科技青年# #423头条知识节#