下面就是Python实现PIL模块在图片画线写字的攻略:
1. 安装PIL模块和Python环境
在实现之前,首先需要在本地安装Python环境,以及PIL模块。可以使用pip命令进行安装,安装命令如下:
pip install pillow
2. 打开图片
使用PIL的Image.open()方法打开待处理的图片,代码示例如下:
from PIL import Image
img = Image.open('test.jpg')
3. 绘制线条
绘制线条可以使用ImageDraw的line()方法。这个方法接收一个元组,表示绘制的线条的两个端点坐标。可以指定线条颜色、宽度等属性。代码示例如下:
from PIL import Image, ImageDraw
img = Image.new('RGB', (200, 200), (255, 255, 255))
draw = ImageDraw.Draw(img)
draw.line([(0, 0), (199, 0), (199, 199), (0,199), (0,0)], fill = (0, 0, 0), width = 2)
img.show()
上述示例中,我们使用了Image.new方法创建了一个白色背景的图片,使用ImageDraw创建了一个在图片内任意指定的线条,线条的颜色和宽度均可以修改。其中linewidth表示线条的宽度,fill表示线条的颜色。
4. 写文字
可以使用ImageDraw的text方法在指定位置绘制文本。也可以通过定义字体等属性来修改文本的样式。代码示例如下:
from PIL import Image, ImageDraw, ImageFont
img = Image.new('RGB', (200, 200), (255, 255, 255))
draw = ImageDraw.Draw(img)
text = 'Hello World!'
font = ImageFont.truetype('arial.ttf', 36)
draw.text((50, 50), text, font=font, fill=(0, 0, 0))
img.show()
上述示例中,我们创建了一个白色背景的图片,并在图像上绘制了”Hello World!”文本。通过ImageFont.truetype()方法加载字体文件,并通过font属性指定字体的大小和类型。
5. 保存图片
在绘制完线条和文字后,可以将结果保存为图片文件。使用Image的save()方法即可实现图片的保存,代码示例如下:
from PIL import Image, ImageDraw
img = Image.new('RGB', (200, 200), (255, 255, 255))
draw = ImageDraw.Draw(img)
draw.line([(0, 0), (199, 0), (199, 199), (0,199), (0,0)], fill = (0, 0, 0), width = 2)
img.save('line.jpg')
上述示例中的save方法自动识别了保存的文件类型和后缀,想把图片保存为其他格式可以在文件名中指定后缀即可。
最后,这是一个综合练习示例,可以在图片内部创建一个20行,20列的方格图,并在每个小方格中心添加数字:
import os
from PIL import Image, ImageDraw, ImageFont
# 创建图片,定义大小和背景颜色
img = Image.new('RGB', (450, 450), (255, 255, 255))
# 计算小方格的大小
size = 20
width, height = img.size
rows = height // size
cols = width // size
# 绘制方格图
draw = ImageDraw.Draw(img)
for y in range(rows):
for x in range(cols):
x1 = x * size
y1 = y * size
x2 = x1 + size
y2 = y1 + size
draw.rectangle((x1, y1, x2, y2), outline=(0, 0, 0), width=1)
# 添加数字
font = ImageFont.truetype('arial.ttf', 16)
draw = ImageDraw.Draw(img)
for y in range(rows):
for x in range(cols):
cx = x * size + size // 2
cy = y * size + size // 2
draw.text((cx, cy), str(x + y * cols), font=font, fill=(0, 0, 0))
# 保存图片
img.save('grid.png')
这个示例程序首先创建了一个白色背景的图片,然后计算出每个小方格的大小并在图片内部循环绘制方格图。最终使用ImageDraw的text方法在每个小方格的中心添加数字,最终保存成文件。