赞
踩
PIL 是 Python Image Library 的简称。
PIL 库中提供了诸多用来处理图片的模块,可以对图片做类似于 PS(Photoshop) 的编辑。比如:改变图像大小、旋转图像、图像格式转换,转换颜色通道,图像增强,直方图处理,插值和滤波等等。
PIL 是第三方库,使用之前需要先安装。
pip install pillow
继续之前先解一个重要概念:颜色模式。
所谓颜色模式:指在计算机中如何模拟出现实世界中的各种颜色,或准确讲是一种颜色生成算法。
常用的颜色模式:
RGB: 基础理论就是对图片中的每一个像素点,按红 (Red)、绿(Green)、蓝(Blue)三色系的不同分量组合出现实世界中的颜色。也可以说,我们在计算机上中所看到的 RGB 图片的颜色是由三色系分量组合而成。或称其有 3 个颜色通道。
Tip: 我们在电脑中所看到的图片大多数都是像素图片,像素图片的特点就是整张图片由很多的像素点组成,每一个像素点有自己的颜色。
在 RGB 颜色模式中,计算机为红色、绿色、蓝色分别分配 8 bit 的空间,也意味着红色、绿色、蓝色各自的分量变化是在 0~255(8bit 二进制换算成十进制度的最大值)之间。
所以计算机使用 RGB 颜色模式最多可以模拟出 255X255X255 种颜色,这应该足够多了,已经可以让计算机显示出多彩斑斓的现实世界。
Tip: RGBA 是 RGB 颜色模式的增加版。除了可以模拟颜色,还可以摸拟透明度。A 是 Alpha 的缩写,这是可以理解为透过或透明度的意思。
CMYK: C:Cyan = 青色,又称为‘天蓝色’或是‘湛蓝’;M:Magenta = 品红色,又称为‘洋红色’;Y:Yellow = 黄色;K:blacK=黑色。CMYK 往往用于模拟印刷制品颜色。多用于广告设计。
可以使用 PIL 库的 ImageColor 模块的 getColor( ) 方法获取一个颜色的不同颜色分量值。
from PIL import ImageColor
red = ImageColor.getrgb("red")
print(red)
'''
输出结果
(255, 0, 0)
'''
Tip: ImageColor 模块内部维护有一个字典。
getColor( ) 方法用使用者提供的颜色名字为键,在字典中查找到对应颜色,再转换成元组后返回。
colormap = { "aliceblue": "#f0f8ff", "antiquewhite": "#faebd7", "aqua": "#00ffff", "aquamarine": "#7fffd4", "azure": "#f0ffff", "beige": "#f5f5dc", "bisque": "#ffe4c4", "black": "#000000", "blanchedalmond": "#ffebcd", …… }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
处理图片,主要是使用 PIL 库的 Image 模块(也是核心模块)。在处理图片之前请提前准备 3 张图片(2 张 jpg 格式的图片,1 张 png 格式的图片)。
Tip: 为了方便操作,把图片存放到项目目录中,加载图片时使用相对路径描述。
这是一张名为 back_,jpg 的图片
这是一张名为 dog.jpg 的图片
这是一张名为 guo_ke.png 的图片
打开图片: 处理图片之前,先要打开图片,可以使用 Image 模块中的 open( ) 方法 打开。此方法返回一个 PIL.Image.Image 类型的对象。
Tip: 本文不刻意区分函数和方法的概念,统一称为方法。
# 原型
def open(fp, mode="r", formats=None):
……
open( ) 方法特点: open( ) 方法不会立即加载图片数据,只有在处理图片或调用图片的 load( ) 方法时才会加载。
from PIL import Image
# open( ) 方法具有懒(延迟)加载的特性
img = Image.open("back_.jpg")
#立即加载图片数据
img.load()
open( ) 方法参数说明:
from PIL import Image
# mode 必须是 "rb"
file = open("dog.png", mode="rb")
#文件对象作为参数
img = Image.open(file)
mode: 图片的颜色模式(RGB,CMYK,RGBA,L……)。不同颜色模式的图片其通道数量会有差异。
format: 图片的格式(PNG,JPEG,GIF……)。JPEG格式的图片没有 A 通道,所以 JPEG 图片是没有透明度信息的。PNG 图片有 A 通道,具有透明性。GIF 图片格式有帧的概念,一张 GIF 图片其实是由多张图片组成的,每一张图片为一帧。
size: 图片大小。在处理图片时,图片大小用 2 元组表示。
from PIL import Image
img = Image.open("dog.jpg", mode="r")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。