一、预先知识:
1. 颜色:
美术三原色:红、黄、蓝,它们是不能再分解的基本颜色。
色光三原色:红、绿、蓝,在计算机中,我们可以将红、绿、蓝三种色光以不同的比例叠加来组合成其他的颜色。在计算机系统中,我们通常会将一个颜色表示为一个RGB值或RGBA值(其中的A表示Alpha通道,它决定了透过这个图像的像素,也就是透明度)。
2. 像素:
对于一个由数字序列表示的图像来说,最小的单位就是图像上单一颜色的小方格,这些小方块都有一个明确的位置和被分配的色彩数值,而这些一小方格的颜色和位置决定了该图像最终呈现出来的样子,它们是不可分割的单位,我们通常称之为像素(pixel)。每一个图像都包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小。
Pillow是由从著名的Python图像处理库PIL发展出来的一个分支,通过Pillow可以实现图像压缩和图像处理等各种操作
一 安装:
二、使用
Pillow中最为重要的是Image
类,可以通过Image
模块的open
函数来读取图像并获得Image
类型的对象。
1.读取和显示图像
从 string 二进制流中读取
从tar文件中读取
2. 格式转换并保存图像
3. 剪裁图像
4. 生成缩略图
5. 黏贴图像
6. 几何变换
Image 包含调整图像大小 resize() 和旋转 rotate() 的方法。
7. 颜色变换
8. 滤镜效果
9. 像素点处理
10. 高级增强
其他图像增强功能可以使用 ImageEnhance 模块中的类。从图像创建后,可以使用 ImageEnhance 快速调整图片的对比度、亮度、饱和度和清晰度。
三、使用Pillow绘图
"""
Pillow中有一个名为ImageDraw的模块,该模块的Draw函数会返回一个ImageDraw对象,
通过ImageDraw对象的arc、line、rectangle、ellipse、polygon等方法,
可以在图像上绘制出圆弧、线条、矩形、椭圆、多边形等形状,也可以通过该对象的text方法在图像上添加文字。
"""
import random
from PIL import Image, ImageDraw, ImageFont
def random_color():
"""生成随机颜色"""
red = random.randint(0, 255)
green = random.randint(0, 255)
blue = random.randint(0, 255)
return red, green, blue
width, height = 800, 600
# 创建一个800*600的图像,背景色为白色
image = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255))
# 创建一个ImageDraw对象
drawer = ImageDraw.Draw(image)
# 通过指定字体和大小获得ImageFont对象
# font = ImageFont.truetype('Kongxin.ttf', 32)
# 通过ImageDraw对象的text方法绘制文字
drawer.text((300, 50), 'Hello, world!', fill=(255, 0, 0)) # , font=font)
# 通过ImageDraw对象的line方法绘制两条对角直线
drawer.line((0, 0, width, height), fill=(0, 0, 255), width=2)
drawer.line((width, 0, 0, height), fill=(0, 0, 255), width=2)
xy = width // 2 - 60, height // 2 - 60, width // 2 + 60, height // 2 + 60
# 通过ImageDraw对象的rectangle方法绘制矩形
drawer.rectangle(xy, outline=(255, 0, 0), width=2)
# 通过ImageDraw对象的ellipse方法绘制椭圆
for i in range(4):
left, top, right, bottom = 150 + i * 120, 220, 310 + i * 120, 380
drawer.ellipse((left, top, right, bottom), outline=random_color(), width=8)
# 显示图像
image.show()
# 保存图像
image.save('result.png')
四、参考:
知乎 木头人 Python 图像处理 Pillow 库 基础篇Python 图像处理 Pillow 库 基础篇 - 知乎 (zhihu.com)
GitHub:javkfrued大神的python语言基础课
Python-Core-50-Courses/第28课:用Python处理图像.md at master · jackfrued/Python-Core-50-Courses (github.com)