语法
系统相关
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.NEARESTexpand:若旋转后图片大小超过原图片,要不要扩展,默认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和himg.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)
本文详细介绍了PythonImagingLibrary(PIL)中的各种功能,包括图像的打开、显示、保存,属性获取,如尺寸、格式等,以及图像操作(如转换、裁剪、粘贴)、旋转、滤镜应用、增强效果和截图截取。
1163

被折叠的 条评论
为什么被折叠?



