- 内容提要
- 作者简介
- 技术评审者简介
- 致谢
- 译者序 会编程的人不一样
- 前言
- 本书的读者对象
- 编码规范
- 什么是编程
- 本书简介
- 下载和安装 Python
- 启动 IDLE
- 如何寻求帮助
- 聪明地提出编程问题
- 小结
- 第一部分 Python 编程基础
- 第1章 Python 基础
- 第2章 控制流
- 第3章 函数
- 第4章 列表
- 第5章 字典和结构化数据
- 第6章 字符串操作
- 第二部分 自动化任务
- 第7章 模式匹配与正则表达式
- 第8章 读写文件
- 第9章 组织文件
- 第10章 调试
- 第11章 从 Web 抓取信息
- 第12章 处理 Excel 电子表格
- 第13章 处理 PDF 和 Word 文档
- 第14章 处理 CSV 文件和 JSON 数据
- 第15章 保持时间、计划任务和启动程序
- 第16章 发送电子邮件和短信
- 第17章 操作图像
- 第18章 用 GUI 自动化控制键盘和鼠标
- 附录A 安装第三方模块
- 附录B 运行程序
- 附录C 习题答案
17.1 计算机图像基础
为了处理图像,你需要了解计算机如何处理图像中的顔色和坐标的基本知识,以及如何在Pillow中处理颜色和坐标。但在继续探讨之前,先要安装pillow模块。安装第三方模块请见附录A。
17.1.1 颜色和RGBA值
计算机程序通常将图像中的颜色表示为RGBA值。RGBA值是一组数字,指定顔色中的红、绿、蓝和alpha(透明度)的值。这些值是从0(根本没有)到255(最高)的整数。这些RGBA值分配给单个像素,像素是计算机屏幕上能显示一种顔色的最小点(你可以想到,屏幕上有几百万像素)。像素的RGB设置准确地告诉它应该显示哪种颜色的色彩。图像也有一个alpha值,用于生成RGBA值。如果图像显示在屏幕上,遮住了背景图像或桌面墙纸,alpha值决定了“透过”这个图像的象素,你可以看到多少背景。
在Pillow中,RGBA值表示为四个整数值的元组。例如,红色表示为(255,0,0,255)。这种颜色中红的值为最大,没有绿和蓝,并且alpha值最大,这意味着它完全不透明。绿色表示为(0,255,0,255),蓝色是(0,0,255,255)。白色是各种颜色的组合,即(255,255,255,255),而黑色没有任何颜色,是(0,0,0,255)。
如果颜色的alpha值为0,不论RGB值是什么,该颜色是不可见的。毕竟,不可见的红色看起来就像不可见的黑色一样。
Pillow使用了HTML使用的标准颜色名称。表17-1列出了一些标准颜色的名称和值。
表17-1 标准颜色名称及其RGB值
名称
RGBA值
名称
RGBA值
White
(255, 255, 255, 255)
Red
(255, 0, 0, 255)
Green
(0, 128, 0, 255)
Blue
(0, 0, 255, 255)
Gray
(128, 128, 128, 255)
Yellow
(255, 255, 0, 255)
Black
(0, 0, 0, 255)
Purple
(128, 0, 128, 255)
Pillow提供ImageColor.getcolor()函数,所以你不必记住想用的顔色的RGBA值。该函数接受一个颜色名称字符串作为第一个参数,字符串'RGBA'作为第二个参数,返回一个RGBA元组。
要了解该函数的工作方式,就在交互式环境中输入以下代码:
❶ >>> from PIL import ImageColor ❷ >>> ImageColor.getcolor('red', 'RGBA') (255, 0, 0, 255) ❸ >>> ImageColor.getcolor('RED', 'RGBA') (255, 0, 0, 255) >>> ImageColor.getcolor('Black', 'RGBA') (0, 0, 0, 255) >>> ImageColor.getcolor('chocolate', 'RGBA') (210, 105, 30, 255) >>> ImageColor.getcolor('CornflowerBlue', 'RGBA') (100, 149, 237, 255)
首先,你需要从PIL导入ImageColor模块❶(不是从Pillow,稍后你就会明白为什么)。传递给ImageColor.getcolor()的颜色名称字符串是不区分大小写的,所以传入'red'❷和传入'RED'❸将得到同样的RGBA元组。还可以传递更多的不常见的顔色名称,如'chocolate'和'Cornflower Blue'。
Pillow支持大量的颜色名称,从'aliceblue'到'whitesmoke'。在http://nostarch. com/automatestuff/的资源中,可以找到超过100种标准颜色名称的完整列表。
17.1.2 坐标和Box元组
图像像素用x和y坐标指定,分别指定像素在图像中的水平和垂直位置。原点是位于图像左上角的像素,用符号(0,0)指定。第一个0表示x坐标,它以原点处为0,从左至右增加。第二个0表示y坐标,它以原点处为0,从上至下增加。这值得重复一下:y坐标向下走增加,你可能还记得数学课上使用的y坐标,与此相反。图17-1展示了这个坐标系统的工作方式。
图17-1 27×26的图像的x和y坐标,某种古老的数据存储装置
CMYK和RGB着色
上小学时你学过,混合红、黄、蓝三种顔料可以得到其他颜色。例如,可以混合蓝色和黄色,得到绿色顔料。这就是所谓的减色模型,它适用于染料、油墨和颜料。这就是为什么彩色打印机有的CMYK墨盒:青色(蓝色)、品红色(红色)、黄色和黑色墨水可以混合在一起,形成任何颜色。
然而,光的物理使用所谓的加色模型。如果组合光(例如由计算机屏幕发出的光),红、绿和蓝光可以组合形成其他颜色。这就是为什么在计算机程序中使用RGB值表示颜色。
许多Pillow函数和方法需要一个矩形元组参数。这意味着Pillow需要一个四个整坐标的元组,表示图像中的一个矩形区域。四个整数按顺序分别是:
· 左:该矩形的最左边的x坐标。
· 顶:该矩形的顶边的y坐标。
· 右:该矩形的最右边右面一个像素的x坐标。此整数必须比左边整数大。
· 底:该矩形的底边下面一个像素的y坐标。此整数必须比顶边整数大。
注意,该矩形包括左和顶坐标,直到但不包括右和底坐标。例如,矩形元组(3, 1, 9, 6)表示图17-2中黑色矩形的所有像素。
图17-2 由矩形元组(3, 1, 9, 6)表示的区域
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论