Python基础入门 Day104 图像绘制与图形生成

63次阅读
没有评论

共计 2483 个字符,预计需要花费 7 分钟才能阅读完成。

在前一节中,我们学习了使用 Pillow 进行图像的读取、处理和保存。本节将继续深入,介绍如何在图像上进行绘制操作,包括绘制线条、矩形、圆形、多边形以及添加文字等内容。掌握这些技能后,你可以自行生成图形化内容,如验证码、报表图标或自定义图像水印。

  1. 创建一个空白图像
    首先,我们需要创建一个新的空白图像:
from PIL import Image, ImageDraw

# 创建一个 RGB 图像,大小为 400x300,背景为白色
img = Image.new("RGB", (400, 300), color="white")

# 获取绘图对象
draw = ImageDraw.Draw(img)

# 保存或显示图像
img.save("blank_image.jpg")
img.show()

Image.new() 可以创建不同模式的图像,如 RGBRGBA(带透明通道)或灰度 L 模式。

  1. 绘制线条
    可以使用 line() 方法绘制直线:
draw.line((50, 50, 350, 50), fill="blue", width=3)
draw.line((50, 100, 350, 200), fill="red", width=5)
img.save("lines.jpg")

参数 (x1, y1, x2, y2) 定义了起点和终点坐标,fill 表示颜色,width 控制线宽。

  1. 绘制矩形与圆形
    矩形和椭圆都是通过边界框来定义的:
# 绘制矩形
draw.rectangle((50, 50, 150, 150), outline="green", width=3, fill="yellow")

# 绘制圆形
draw.ellipse((200, 50, 300, 150), outline="blue", width=3, fill="lightblue")

img.save("shapes.jpg")
  • rectangle():绘制矩形,可以添加填充色。
  • ellipse():绘制椭圆,如果边界框为正方形则为圆形。
  1. 绘制多边形与点
    多边形由多个点连接而成,可以绘制三角形、五边形等:
# 绘制三角形
draw.polygon([(200, 200), (250, 100), (300, 200)], outline="purple", fill="violet")

# 绘制单个点
draw.point((100, 250), fill="black")

img.save("polygon.jpg")
  1. 添加文字
    通过 ImageDraw.text() 可以在图像中加入文字:
from PIL import ImageFont

font = ImageFont.load_default()
draw.text((20, 250), "Hello, Python!", fill="black", font=font)
img.save("text.jpg")

若希望使用更美观的字体,可以加载 .ttf 文件:

font = ImageFont.truetype("arial.ttf", 20)
draw.text((20, 250), " 使用自定义字体 ", fill="darkgreen", font=font)
img.save("text_custom_font.jpg")
  1. 绘制坐标网格示例
    一个实用示例是生成坐标背景,用于测试或标注:
from PIL import Image, ImageDraw

img = Image.new("RGB", (400, 300), "white")
draw = ImageDraw.Draw(img)

# 绘制网格
for x in range(0, 401, 50):
    draw.line((x, 0, x, 300), fill="lightgray")
for y in range(0, 301, 50):
    draw.line((0, y, 400, y), fill="lightgray")

# 绘制坐标轴
draw.line((0, 150, 400, 150), fill="black", width=2)
draw.line((200, 0, 200, 300), fill="black", width=2)

img.save("grid.jpg")

这种网格图可用于生成教学图、绘制函数曲线或制作坐标背景。

  1. 生成验证码图像
    验证码是绘图的常见应用之一。我们可以利用 Pillow 生成简单验证码:
import random
from PIL import Image, ImageDraw, ImageFont

chars = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789"
code = "".join(random.choice(chars) for _ in range(5))

img = Image.new("RGB", (120, 40), "white")
draw = ImageDraw.Draw(img)
font = ImageFont.load_default()

# 绘制文字
for i, c in enumerate(code):
    draw.text((10 + i * 20, 10), c, fill=(random.randint(0, 150), random.randint(0, 150), random.randint(0, 150)), font=font)

# 添加噪点
for _ in range(100):
    x, y = random.randint(0, 120), random.randint(0, 40)
    draw.point((x, y), fill=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))

img.save("captcha.jpg")

运行后即可生成一个包含随机字符和噪点的验证码图像。

总结:
通过 ImageDraw 模块,Pillow 不仅能编辑图像,还能动态绘制图形内容。掌握线条、形状、文字等绘制方法后,你可以制作统计图标、验证码、图像水印甚至小游戏画面。图像绘制结合 Pillow 的图像处理功能,为可视化开发打下了坚实基础。

练习与思考:

  1. 尝试绘制一个彩色棋盘格图像。
  2. 实现一个动态生成的海报,包含文字、矩形边框和背景图片。
  3. 结合前一节内容,制作一个带水印和边框的图片生成脚本。
正文完
 0
评论(没有评论)