CodeGym /Java 课程 /Python SELF ZH /绘制:文本、线条和水印

绘制:文本、线条和水印

Python SELF ZH
第 46 级 , 课程 0
可用

1. 在图片上添加文本

在 Pillow 中使用模块 ImageDraw 来在图片上添加文本,它提供了方法 text() 用于在指定坐标显示文本。

简单的文本添加

                
from PIL import ImageDraw, ImageFont

# 创建绘图对象
draw = ImageDraw.Draw(image)

# 在图片上添加文本
text = "文本示例"
draw.text((50, 50), text, fill="white")

# 保存包含文本的图片
image.save("text_example.jpg")
                
            

在这个例子中,文本 "文本示例" 被添加到坐标 (50, 50)。参数 fill 定义文本颜色,可以用字符串 ("white", "black") 或 RGB 格式 ((255, 255, 255)) 指定。

设置文本字体

默认情况下,Pillow 使用标准字体。要选择其他字体并设置其大小,可以使用 ImageFont.truetype()。确保字体文件在系统中可用。

                
# 加载字体
font = ImageFont.truetype("arial.ttf", 36)

# 使用自定义字体添加文本
draw.text((50, 100), text, font=font, fill="yellow")
image.save("text_custom_font_example.jpg")
                
            

这里我们使用了字体 arial.ttf 和大小为 36 像素。如果没有所需字体,可以下载并提供字体文件路径。

2. 添加水印

水印是一种半透明的文本或图片,叠加在照片上以保护版权。可以添加 logo 或作者信息。在 Pillow 中可以创建简单的文本水印。

文本水印

                
# 创建绘图对象
draw = ImageDraw.Draw(image)

# 水印文本和字体
watermark_text = "© 2023 我的公司"
font = ImageFont.truetype("arial.ttf", 24)

# 定义水印位置的坐标
width, height = image.size
text_width, text_height = draw.textsize(watermark_text, font=font)
x = width - text_width - 10
y = height - text_height - 10

# 在右下角添加水印
draw.text((x, y), watermark_text, font=font, fill=(255, 255, 255, 128))
image.save("watermarked_example.jpg")
                
            

在本例中,文本水印被添加到图片右下角。我们计算 xy,使水印稍微偏离图片边缘。

3. 添加图形元素

除了文本,Pillow 还允许绘制基本的图形元素,如线条、矩形、圆形和椭圆。对于创建边框、高亮区域以及添加几何形状很有用。

绘制线条

使用方法 line() 绘制线条,需传递线条的起点和终点坐标。

                
# 绘制从左上角到右下角的线条
draw.line((0, 0, width, height), fill="red", width=5)
image.save("line_example.jpg")
                
            

这段代码绘制了一条红色线条,沿对角线从左上角到右下角通过图片。

绘制矩形

矩形可以通过方法 rectangle() 绘制,它接受左上角和右下角的坐标。

                
# 绘制一个矩形
draw.rectangle((50, 50, 200, 200), outline="blue", width=3)
image.save("rectangle_example.jpg")
                
            

这里创建了一个蓝色边框的矩形,线条宽度为 3 像素。你也可以使用参数 fill 来填充矩形颜色。

绘制圆形和椭圆

方法 ellipse() 可以绘制圆形和椭圆。要绘制圆形,宽度和高度的尺寸需相同。

                
# 绘制一个圆形
draw.ellipse((150, 150, 250, 250), outline="green", width=4)
image.save("circle_example.jpg")
                
            

这个例子创建了一个以 (200, 200) 为中心的圆形。如果设置不同的宽度和高度,就会得到椭圆形。

绘制多边形

使用方法 polygon() 绘制多边形,需传递多边形顶点的坐标。

                
# 绘制一个三角形
draw.polygon([(100, 100), (150, 50), (200, 100)], outline="purple", fill="orange")
image.save("polygon_example.jpg")
                
            

这段代码绘制了一个填充为橙色,边框为紫色的三角形。通过传递顶点的坐标,你可以创建任意形状的多边形。

4. 示例

创建文本与图形结合的作品示例

综合使用前面提到的内容,创建一个包含文本、水印和图形元素的图片。

                
from PIL import Image, ImageDraw, ImageFont

# 加载图片
image = Image.open("example.jpg")
draw = ImageDraw.Draw(image)

# 添加文本
font = ImageFont.truetype("arial.ttf", 36)
draw.text((50, 50), "演示文本", font=font, fill="yellow")

# 在右下角添加水印
watermark_text = "© 2023 我的公司"
font_watermark = ImageFont.truetype("arial.ttf", 24)
width, height = image.size
text_width, text_height = draw.textsize(watermark_text, font=font_watermark)
x = width - text_width - 10
y = height - text_height - 10
draw.text((x, y), watermark_text, font=font_watermark, fill=(255, 255, 255, 128))

# 绘制线条、矩形和圆形
draw.line((0, 0, width, height), fill="red", width=5)
draw.rectangle((50, 50, 200, 200), outline="blue", width=3)
draw.ellipse((150, 150, 250, 250), outline="green", width=4)

# 保存结果
image.save("final_composition_example.jpg")
                
            

这个例子创建了一个包含文本、水印和多个图形元素(线条、矩形和圆形)的图片。这种组合可以用于演示、博客以及创建专业设计的图片。

实际应用

  • 标注和保护图片: 水印可以保护图片不被未经授权使用,而文本可以添加作者或公司信息。
  • 为社交媒体准备图片: 添加文本和图形可以为图片提供更多信息,适合发布到社交媒体。
  • 信息图表与数据可视化: 使用线条和图形等元素可以创建简单的图表和示意图,这使得 Pillow 在创建信息图表时非常有用。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION