PIL模块使用


PIL模块内容结构

PIL模块 - Python图像处理
来自http://www.tpleina.com/2019/05/2487951348.html

介绍PIL、Pillow

PIL(Python Imaging Library)是Python图像处理库,PIL模块于2009年9月发布,最新版本是1.1.7,仅支持Python1.5.2 - 2.7
目前PIL项目已经停止开发,最后一次更新是在2011年

强调一下:PIL不支持Python3.x

而Pillow也是Python的图像处理库,与PIL区别:Pillow是PIL特定版本Fork代码,Pillow兼容PIL绝大多数用法,开发活跃,更主要是Pillow库支持Python3.x,所以推荐使用Pillow

现在说的PIL,一般都指Pillow,包括文章下面说的PIL,都是Pillow模块

本节使用演示图片:
PIL操作图片

  • 图片大小:1680x1050
  • 图片格式:JPEG
  • 图片颜色模式:RGB

Image类

Image是PIL最重要的类,PIL大部分功能都是从Image类实例开始的

Image实例有5个属性:

  • format : 返回图像格式(PNG,JPG,…),如果图像不是从文件读取的,则值None
  • mode : 返回图像的模式,常用模式有:
    • L (luminance) 灰度图像,8位像素,表示黑和白
    • RGB 3x8位像素,为真彩色图像
    • RGBA 4x8位像素,有透明通道的真彩色
    • CMYK 4x8位像素,颜色分离,出版图像
    • P 8位像素,使用调色板映射到其他模式
    • 1 1位像素,表示黑和白,但是存储的时候每个像素存储为8bit
    • YCbCr:3x8位像素,彩色视频格式
    • I 32位整型像素
    • F 32位浮点型像素
    • PIL支持一些特殊的模式,包括RGBX(有padding的真彩色)和RGBa(有自左乘alpha的真彩色)
  • size : 是一个二元tuple,包含width和height(宽度和高度,单位是px)
  • palette : 仅当 mode 为 P 时有效,返回 ImagePalette 实例
  • info : info信息,返回/设置图像一些额外信息,一个字典结构对象

示例代码

# -*- coding:utf-8 -*-
from PIL import Image

if __name__ == '__main__':
    # 打开图片
    im = Image.open('xiana.jpg')
    # 得到图片大小
    print(im.size)
    # 图片格式
    print(im.format)
    # 图片色彩模式
    print(im.mode)
    # 返回 ImagePalette 实例
    print(im.palette)
    # 实例信息(dict)
    print(im.info)
    # 打开,并查看图片
    im.show()

说一下最后一个方法show() 查看图片,原理是将图片暂存为一个临时文件,然后调用操作系统默认图片浏览软件打开图片文件

Pillow库不会直接解码或者加载全部图像数据
当用Image.open打开一个图片文件,只会读取文件头信息来确定格式、颜色模式、大小等,文件其他数据不会处理,这种方式保证了图片操作性能
可以说Image.open是一个懒操作(只读文件头信息,直到图像操作才会读取整个图像数据),因此调用load()方法可以强行加载图像数据

额外说一下“通道”概念
每张图片都是由一个或多个数据通道构成,例如RGB图像是由三个数据通道构成,分别为R、G和B通道
获得图片通道数及通道名称:Image.getbands()

图像操作

创建缩略图

Image.thumbnail()方法可以制作缩略图,接受一个二元数组作为缩略图的尺寸,然后将实例图片缩小到指定尺寸

生成JPG缩略图,示例如下:

# -*- coding:utf-8 -*-
from PIL import Image

if __name__ == '__main__':
    # 打开图片
    im = Image.open('xiana.jpg')
    print(im.size)
    x, y = im.size
    # 缩略图大小
    im.thumbnail((x//2, y//2))
    print(im.size)
    # 打开,查看图片
    im.show()

裁剪图片

Image.crop() 能从图像中提取一个子矩形选区

Pillow库以图像左上角为坐标原点 (0,0),矩形选区区域由一个元组决定,元组信息包括 (左,上,右,下) 的坐标

裁剪图片示例:

# -*- coding:utf-8 -*-
from PIL import Image

if __name__ == '__main__':
    # 打开图片
    im = Image.open('test.png')
    # (左,上,右,下)
    selected = (610,140,1100,820) 
    # 得到400x680px图片
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值