志愿者在PIL
的基础上创建了一个分支版本,命名为Pillow。这个库专们用来处理图片,支持最新的python3版本。
安装
要注意的一点是,Pillow
和PIL
不能共存在同一个环境中,所以如果安装的有PIL
的话,那么安装Pillow
之前应该删除PIL
。Pillow
的安装比较的简单,直接pip安装即可:
pip install Pillow
Image
是Pillow中最为重要的类,实现了Pillow中大部分的功能,这个类的主要用来表示图片对象。要创建这个类的实例主要有三个方式:
from PIL import Image
im = Image.open('happy.png')
PIL使用笛卡尔像素坐标系统,坐标(0,0)位于左上角。坐标经常用于二元组(x,y)。长方形则表示为四元组,前面是左上角坐标。例如,一个覆盖800x600的像素图像的长方形表示为(0,0,800,600)。
这个元组参数包含四个值,分别代表矩形四条边的距离X轴或者Y轴的距离。顺序是(左,顶,右,底)
。其实就相当于,矩形的左上顶点坐标为(左,顶)
,矩形的右下顶点坐标为(右,底)
,两个顶点就可以确定一个矩形的位置。
右和底坐标稍微特殊,跟python列表索引规则一样,是左闭又开的。可以理解为[左, 右)
和[顶, 底)
这样左闭右开的区间。比如(3, 2, 8, 9)就表示了横坐标范围[3, 7];纵坐标范围[2, 8]的矩形区域。
1:1位像素,表示黑和白,但是存储的时候每个像素存储为8bit。
L:8位像素,表示黑和白。
P:8位像素,使用调色板映射到其他模式。
RGB:3x8位像素,为真彩色。
RGBA:4x8位像素,有透明通道的真彩色。
CMYK:4x8位像素,颜色分离。
YCbCr:3x8位像素,彩色视频格式。
I:32位整型像素。
F:32位浮点型像素。
PIL也支持一些特殊的模式,包括RGBX(有padding的真彩色)和RGBa(有自左乘alpha的真彩色)。
常用到的有'1'、'L'、'RGB'。
save()
:保存图片,参数是保存后的文件名。croped_im = im.crop((100, 100, 200, 200))
paste(image,box
)
:粘贴图片,参数image是一个Image对象。box是一个二元组,对应粘贴的图像的左顶点。box也可以是定义了左,上,右和下像素坐标的4元组,如果给定4元组,被粘贴的图像的尺寸必须与区域尺寸一样。resize((weidth,height)):
调整图像大小。rotate(angle):
旋转图像,此方法按逆时针旋转,并返回一个新的Image
对象.再加一个参数expand=True表示会将图片的边角保存住。transpose()
:翻转图像。# 水平翻转
im.transpose(Image.FLIP_LEFT_RIGHT)
# 垂直翻转
im.transpose(Image.FLIP_TOP_BOTTOM)
getpixel
((x,y)):返回给定位置的像素值。如果图像为多通道,则返回一个元组。from PIL import Image
im1 = Image.open("jing.jpg")
im2 = Image.open("wu.jpg")
r1,g1,b1 = im1.split()
r2,g2,b2 = im2.split()
imgs =[r1,g2,b2]
im_merge = Image.merge("RGB",imgs)
im_merge.save("he.jpg")
R = im.getchannel("R")
PIL.PyAccess
,可以通过这个类的索引来对指定坐标的像素点进行修改。eval(image,function):使用变量function对应的函数(该函数应该有一个参数,参数代表每一点的像素值)处理变量image所代表图像中的每一个像素点。如果变量image所代表图像有多个通道,那变量function对应的函数作用于每一个通道。
from PIL import Image
im = Image.open("jing.jpg")
def deffun(c):
return c*0.89 #改变了亮度
im_eval = Image.eval(im,deffun)
im_eval.save("gai.jpg")