Python第三方模块—PIL

语法

系统相关

  • img = Image.open(path):打开图像,返回图片对象
  • img.show():调用系统工具显示图像
  • img.save(path):保存当前图像
    • 只要是图像对象,都可调用此方法
  • 上述方法可进行链式编程:如img.rotate(90).save(path)

获取属性

  • img.filename:图片的相对路径
  • img.format:图片格式(后缀),如JPEGPNG
  • img.mode:模式,如RGBRGBA
  • 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位像素,表示黑和白,存储的时候每个像素存储为8bit
    • L:8位像素,表示黑和白
    • P:8位像素,使用调色板映射到其他模式
    • RGB:3x8位像素,为真彩色
    • RGBA:4x8位像素,有透明通道的真彩色
    • CMYK:4x8位像素,颜色分离
    • YCbCr:3x8位像素,彩色视频格式
    • I:32位整型像素
    • F:32位浮点型像素
  • img.copy():复制指定图片,返回图片对象
  • img.crop((lx, ly, rx, ry)):裁剪图片,参数
    • lxly:左上点的x、y坐标
    • rxry:右下点的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]):调整宽高为wh
  • 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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值