Python模块——Pillow

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzyaiwl/article/details/89023729

志愿者在PIL的基础上创建了一个分支版本,命名为Pillow。这个库专们用来处理图片,支持最新的python3版本。

安装

要注意的一点是,PillowPIL不能共存在同一个环境中,所以如果安装的有PIL的话,那么安装Pillow之前应该删除PILPillow的安装比较的简单,直接pip安装即可:

pip install Pillow

Image

Image是Pillow中最为重要的类,实现了Pillow中大部分的功能,这个类的主要用来表示图片对象。要创建这个类的实例主要有三个方式:

  1. 从文件加载图像
  2. 处理其他图像获得
  3. 创建一个新的图像
  • 实例化对象:
  1. open()打开图片的方法,参数是图片的路径。
  2. new(mode,size,color)新建图片的方法,第一个参数是颜色空间模型,第二个是图片大小,元组形式,第三个是图片背景色,默认是黑色。
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()保存图片,参数是保存后的文件名。
  • show():展示图片。
  • crop(box):裁剪图片,传入的参数是一个四元组,及唯一确定一个矩形区域,返回一个Image对象。
croped_im = im.crop((100, 100, 200, 200))
  • copy():复制图片,返回一个Image对象。
  • 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)):返回给定位置的像素值。如果图像为多通道,则返回一个元组。
     
  • getextrema():返回一个2元组,包括该图像中的最小和最大值。
  • split():将多通道图片按通道分割为单通道图片,返回的是一个元祖,元祖中的元素则是分割后的单个通道的值
  • merge(mode,list):将各个单通道融合起来,作用与split相反。list参数是一个列表,列表每一元素代表一个通道。
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")
  • getdata():以包含像素值的sequence对象形式返回图像的内容。支持索引,迭代,转为list等。
  • getchannel(channel):获取单个通道的数据
R = im.getchannel("R")
  • load():加载图片所有的数据,并比较方便的修改像素的值。此方法返回的是一个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")
  • convert(mode):将当前图像转换为其他模式,并且返回新的图像。
  • close():删除图片对象并释放内存

​​​​​​​常用属性

  • filename:返回文件名
  • format:返回文件格式,如png,如果是由PIL创建的图像,则其文件格式为None。
  • mode:返回颜色空间模型,该属性典型的取值为“1”,“L”,“RGB”或“CMYK”。
  • size:返回图片大小
  • width:返回图片宽度
  • height:返回图片高度
  • info:返回图片一些信息,以字典形式

​​​​​​​
 

猜你喜欢

转载自blog.csdn.net/wzyaiwl/article/details/89023729