Python 细聊可以媲美 PS 的 PIL 图片处理库

1 . 前言

PIL 是 Python Image Library 的简称。

PIL 库中提供了诸多用来处理图片的模块,可以对图片做类似于 PS(Photoshop) 的编辑。比如:改变图像大小、旋转图像、图像格式转换,转换颜色通道,图像增强,直方图处理,插值和滤波等等。

PIL 是第三方库,使用之前需要先安装。

pip install pillow

2. 颜色模式

继续之前先解一个重要概念:颜色模式。

所谓颜色模式:指在计算机中如何模拟出现实世界中的各种颜色,或准确讲是一种颜色生成算法。

常用的颜色模式:

  • RGB: 基础理论就是对图片中的每一个像素点,按红 (Red)、绿(Green)、蓝(Blue)三色系的不同分量组合出现实世界中的颜色。也可以说,我们在计算机上中所看到的 RGB 图片的颜色是由三色系分量组合而成。或称其有 3 个颜色通道。

    Tip: 我们在电脑中所看到的图片大多数都是像素图片,像素图片的特点就是整张图片由很多的像素点组成,每一个像素点有自己的颜色。

    在 RGB 颜色模式中,计算机为红色、绿色、蓝色分别分配 8 bit 的空间,也意味着红色、绿色、蓝色各自的分量变化是在 0~255(8bit 二进制换算成十进制度的最大值)之间。

    所以计算机使用 RGB 颜色模式最多可以模拟出 255X255X255 种颜色,这应该足够多了,已经可以让计算机显示出多彩斑斓的现实世界。

    Tip: RGBARGB 颜色模式的增加版。除了可以模拟颜色,还可以摸拟透明度。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",
……
}

3. 处理图片

处理图片,主要是使用 PIL 库的 Image 模块(也是核心模块)。在处理图片之前请提前准备 3 张图片(2 张 jpg 格式的图片,1 张 png 格式的图片)。

Tip: 为了方便操作,把图片存放到项目目录中,加载图片时使用相对路径描述。

这是一张名为 back_,jpg 的图片

这是一张名为 dog.jpg 的图片

这是一张名为 guo_ke.png 的图片

3.1 基本操作

  1. 打开图片: 处理图片之前,先要打开图片,可以使用 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( ) 方法参数说明:

  • fp: 设置要打开的图片文件。可以是字符串描述的文件名称、也可以是一个文件对象。
from PIL import Image
# mode 必须是 "rb"
file = open("dog.png", mode="rb")
#文件对象作为参数
img = Image.open(file)
  • mode: 对图片文件操作的模式,默认是 “r” 。如果设置,也只能是 “r”。
  • formats: 列表或元组类型,指定文件的打开格式,默认由方法自己判断。
  1. 图片的常规属性: 图片对象有几个常用的属性。
  • 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")
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一枚大果壳

码文不易,晚上熬夜需要点咖啡钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值