一.pillow描述
pillow模块提供了广泛的文件格式支持、高效的内部表示和非常强大的图像处理功能,其中的核心是Image模块
二.pillow模块的常用子模块
子模块 | 说明 |
---|---|
Image | Image模块提供了一个同名的类来表示PIL图像,该模块还提供了许多工厂功能,包括从文件加载图像和创建新图像的功能 |
ImageDraw | ImageDraw模块为图像对象提供了简单的二维(2D)图形,可以使用此模块创建新图像,注释或修改现有图像,以及动态生成图像供Web使用 |
ImageGrab | ImageGrab模块可用于将屏幕或剪贴板的内容复制到PIL图像内存 |
ImageFilter | ImageFilter模块包含一组预定义的滤镜,可以与Image.filter()方法一起使用 |
ImageColor | ImageColor模块包含颜色表和从CSS3风格的颜色说明符到RGB元组的转换器。这个模块由PIL.Image.new()和ImageDraw等模块使用 |
ImageFont | ImageFont模块定义了一个同名的类,配合PIL.ImageDraw.Draw.text()方法使用 |
三.pillow模块支持的图像模式
图像模式 | 说明 |
---|---|
1 | 黑白,每个像素用1为表示,但存储时每个像素占用1字节 |
L | 黑白,每个像素用1字节表示 |
P | 调色板映射,每个像素用1字节表示 |
RGB | 红、绿、蓝,3个通道,每个像素用1字节表示 |
RGBA | 红、绿、蓝和透明,4个通道,每个像素用1字节表示 |
CMYK | 颜色隔离模式,4个通道,每个像素用1字节表示 |
YCbCr | 亮度、蓝色差、红色差,3个通道,每个像素用1字节表示 |
I | 每个像素用4字节整形表示 |
F | 每个像素用4字节浮点型表示 |
四.使用介绍
-
安装和导入pillow模块
pip install pillow
from PIL import Image, ImageDraw, ImageGrab from PIL import ImageFilter, ImageFont, ImageColor
-
打开和保存图像文件
# 打开图像文件 im = Image.open(r'testpic.jpg') # 图像模式 print(im.mode) # 图像分辨率 print(im.size) # 调用系统默认的图像查看工具显示图像 im.show() # 将RGB模式转为L模式 im_gray = im.convert('L') im_gray.show() # 图像模式 print(im_gray.mode) im_gray.save('new_testpic.jpg')
-
通道和并与拆分
# 打开图像文件 im = Image.open(r'testpic.jpg') # 将RGB图像拆分成独立的3个通道 r, g, b = im.split() # 保存绿色通道为文件 g.save(r'testpic_g.jpg') # 交换红色、蓝色通道,得到特殊的效果 im_bgr = Image.merge('RGB', (b, g, r)) # 保存交换通道后的图像 im_bgr.save(r'testpicb_bgr.jpg')
-
旋转、缩放、裁切、复制与粘贴
# 打开图像文件 im = Image.open(r'testpic.jpg') # 逆时针旋转30°,以原图分辨率返回新图像 im_30 = im.rotate(30) im_30.show() print(im_30.size) im_30.save(r'testpicnew.jpg') # 逆时针旋转30°,返回扩展的新图像 im.rotate(30, expand=True).show() # 裁切250*150的局部图像 im_box = im.crop((150, 50, 400, 200)) # 复制这个局部图像,不是粘贴的必要条件,这里主要用来演示复制功能 im_copy = im_box.copy() # 粘贴到地图的右下角 im.paste(im_copy, (350, 450)) im.show() # 保存粘贴后的图像 im.save(r'testpicpaste.jpg')
-
使用滤镜
im = Image.open(r'testpic.jpg') # 使用增强滤镜 im.filter(ImageFilter.DETAIL).show() # 使用模糊滤镜 im.filter(ImageFilter.BLUR).show() # 使用轮廓滤镜 im.filter(ImageFilter.CONTOUR).show() # 使用勾画边界滤镜 im.filter(ImageFilter.FIND_EDGES).show()
-
绘图
im = Image.new("RGB", (800, 300), color=(32, 64, 128)) draw = ImageDraw.Draw(im) draw.line((0, 200, 800, 200), width=2, fill=(255, 255, 255)) draw.arc([20, 20, 180, 180], 0, 270, fill=(0, 255, 255)) draw.arc([200, 40, 360, 160], 0, 360, fill=(0, 255, 255)) draw.pieslice([380, 20, 540, 180], 30, 330, fill='red', outline='white') draw.ellipse([380, 20, 540, 180], fill='yellow', outline='white') draw.point([660, 100, 670, 100, 680, 100], fill='red') draw.rectangle([100, 220, 700, 280], fill=(64, 192, 192), outline='white') font = ImageFont.truetype("simfang.ttf", 32) draw.text([130, 230], "人生苦短,我用Python", font=font, fill='white') im.show()
-
截屏
# 截取大小为720*480的屏幕区域 im = ImageGrab.grab((1200, 600, 1920, 1080)) im.show() # 截取整个屏幕 im = ImageGrab.grab() im.show()