语法
系统相关
img = Image.open(path)
:打开图像,返回图片对象img.show()
:调用系统工具显示图像img.save(path)
:保存当前图像- 只要是图像对象,都可调用此方法
- 上述方法可进行链式编程:如
img.rotate(90).save(path)
获取属性
img.filename
:图片的相对路径img.format
:图片格式(后缀),如JPEG
、PNG
…img.mode
:模式,如RGB
、RGBA
…img.getbands()
:通道,RGB模式就是('R','G','B')
img.size
:图片尺寸,返回元组类型,(宽度,高度)
img.info
:图片信息,返回字典类型{}
img.width
:图片宽img.height
:图片高img.histogram()
:像素分布,返回一个保存所有像素点的列表img.getpixel(pos)
:某点的色彩通道值- 参数
pos
:像素点坐标,类型为元组(x,y)
- 返回值:色彩分配,如黑色在
RGB
模式得到(0, 0, 0)
- 参数
图像操作
img.convert(mode)
:模式转换,参数mode
(图像模式)1
:1位像素,表示黑和白,存储的时候每个像素存储为8bitL
:8位像素,表示黑和白P
:8位像素,使用调色板映射到其他模式RGB
:3x8位像素,为真彩色RGBA
:4x8位像素,有透明通道的真彩色CMYK
:4x8位像素,颜色分离YCbCr
:3x8位像素,彩色视频格式I
:32位整型像素F
:32位浮点型像素
img.copy()
:复制指定图片,返回图片对象img.crop((lx, ly, rx, ry))
:裁剪图片,参数lx
、ly
:左上点的x、y坐标rx
、ry
:右下点的x、y坐标
img.paste(img1[, pos])
:将img1粘贴到img上- 参数
pos
:元组(左上x, 左上y[, 右下x, 右下y])
,表示粘贴区域矩形坐标 - 如果是四个元素元组的话,box的size必须要和region的size保持一致,否则将会被convert成和region一样的size
- 参数
img.split()
:将图像的各个通道分离- 比如对于RGB图像,可以将其R,G,B三个颜色通道分离
img.merge(mode, channels)
: 将图像的通道合并- 和split方法是相对的,其将多个单一通道的序列合并起来,组成 一个多通道的图像
- 参数
mode
:合并之后图像的模式,例如"RGB"
- 参数
channels
: 是多个单一通道组成的序列
Image.blend(img0, img1,0.3)
:img0和img1必须尺寸相同,进行插值融合。
图像旋转
img.rotate(deg[, filter, expand=False])
:逆时针旋转deg
:角度filter
:可指定Image.NEAREST
expand
:若旋转后图片大小超过原图片,要不要扩展,默认False
不扩展
img.transpose(mode)
:翻转或者旋转,mode
为操作模式,Image.FLIP_LEFT_RIGHT
:左右水平翻转Image.FLIP_TOP_BOTTOM
:上下竖直翻转Image.ROTATE_90
:逆时针旋转90°Image.ROTATE_180
:逆时针旋转180°Image.ROTATE_270
:逆时针旋转270°Image.TRANSPOSE
:进行转置(相当于顺时针旋转90°)Image.TRANSVERSE
:进行转置,再水平翻转
图片大小
img.resize((w, h)[, filter])
:调整宽高为w
和h
img.thumbnail((w, h))
:调整宽高img.point(func[, mode])
:对图像像素操作func
:对每个像素大小进行处理的逻辑,如lambda i:i*2
是对每个像素放大2倍mode
:图像的模式,默认是和原来图像的mode是一样的
Image.eval(img, func)
:缩放图片
特殊操作
ImageDraw
绘制几何图形
# 实例化Draw对象
img_draw = ImageDraw.Draw(img)
# 绘图
img_draw.line((0, img.height, img.width, 0), fill=(255, 0, 0), width=8) # 线段
img_draw.rectangle((150, 150, 200, 200), fill=(0, 255, 0)) # 矩形
img_draw.ellipse((250, 300, 450, 400), fill=(0, 0, 255)) # 椭圆
# 保存
img.save('./imgs/xxx.jpg')
ImageFont
字体
# 实例化Font对象
img_font = ImageFont.truetype('C:/Windows/Fonts/Arial.ttf', size=48)
# 写字
img_draw.multiline_text((20,20), '内容', fill=(255, 0, 0), font=img_font)
# 保存
img.save('./imgs/xxx.jpg')
ImageFilter
滤镜
示例:
# 过滤 # 保存
img.filter(filter).save('./imgs/xxx.jpg')
参数:
ImageFilter.NEAREST
:(默认)最近滤波。从输入图像中选取最近像素为输出像素ImageFilter.BLUR
:模糊操作ImageFilter.GaussianBlur
:高斯模糊ImageFilter.MedianFilter
:中值过滤器ImageFilter.FIND_EDGES
:查找边ImageFilter.CONTOUR
:轮廓线ImageFilter.EMBOSS
:浮雕ImageFilter.DETAIL
:清晰
ImageEnhance
图像增强
# 亮度
ImageEnhance.Brightness(img).enhance(0.8)
# 尖锐
ImageEnhance.Sharpness(img).enhance(7.0)
# 对比度
ImageEnhance.Contrast(img).enhance(2.0)
# 保存
img.save('./imgs/xxx.jpg')
ImageGrab
截屏
# 全屏
ImageGrab.grab().save()
# 区域截屏
ImageGrab.grab(bbox=(100,100,600,600)).save() # (左上x, 左上y, 右下x, 右下y)