本文基于
- PIL简明教程
- Python图片裁剪(如: 头像裁剪)
- pillow官方文档
PIL(Python Image Library)是Python进行图像处理最常用也是最基础的库之一。基本上已经算是半标准库了。但是原版PIL的开发者已经基本上放弃更新这个库了。致使这个库有很多issues亟待解决,同时也无法支持日益流行的python3。所以,现在这个库已经基本被它的一个分支pillow取代。
安装
对于Linux和Windows来说,最方便的安装方法就是pip了。
pip install pillow
要注意的是,pillow和PIL不可以同时存在。如果要使用Pillow库必须要先卸载原来的PIL库。
安装好之后,打开 Python 解释器,输入 from PIL import Image 来测试是否安装成功。
Image类
Image类的读取、显示与保存
像openCV中的Mat
一样。研究pillow就必须先研究其图像类Image
。
from PIL import Image
im = Image.open("source.png")
im.show()
经典三部曲。引库,读取,显示。经测试,直接im-show("source.png")
也可以直接显示。还可以用im.save('somewhere.png')
保存。注意可以利用改变保存文件的后缀来实现格式转换。比如
Image.open('in.jpg').save('out.png')
另外也可以从零创造一个新的空白图像。
im = Image.new(mode, size, color=0)
mode
是RGB还是CMYK之类的选择。size`是一个二元元组。
color``是背景色颜色,默认是黑色,也是用一个元组给出。
Image类的常用属性
#尺寸
w, h = im.size
#格式
print(im.format)
#或者
print(type(im))
#色彩模式
print(im.mode)
Image 类的 thumbnail() 方法
Image 类的 thumbnail() 方法可以制作缩略图。用法是在参数中输入一个二元列表或者元组,如im.thumbnail([200, 400])
或im.thumbnail((200, 400))
都可以。这里要注意,这一个过程型的方法,作用的对象是im本身。这个函数没有返回值。
small_im = im.thumbnail([200, 400])
是错误的。
Image类的crop(box)方法
crop()方法用于裁剪图像的一部分。它的参数是一个box元组,即(x, y, x+w, y+h), (x,y)是裁剪框左上角的坐标, (x+w, y+h)是右下角的坐标。如下图所示
x = 100
y = 100
w = 200
h = 200
region = im.crop((x, y, x+w, y+h))
region.show()
region.save('region.jpg')
调用方法的对象是输入图像,方法的返回值即输出图像。
Image类的paste()方法
paste()是粘贴类。输入参数有两个。一个是待贴入的图像,另一个也是一个box元组标记位置。box元组同上一部分。而带贴入的图像是一个Image类对象。调用这个paste()的对象就是被贴图的基底图像。这个方法也是一个没有返回值的过程方法。
im.paste(region, (x+50, y+50, x+50+w, y+50+h))
Image类的transpose()方法
顾名思义,transpose()方法是用来实现图形变换的。可以在Image对象的后面以.transpose().transpose().transpose()的形式进行连续变换。输入参数是变换方法和参数,选取如下之一:
Image.FLIP_LEFT_RIGHT, Image.FLIP_TOP_BOTTOM,
Image.ROTATE_90,
Image.ROTATE_180,
Image.ROTATE_270
Image.TRANSPOSE.