Python Pillow ImageDraw 模块
ImageDraw ‘模块为Image Object提供了简单的2D图形支持。一般来说,我们使用这个模块来创建新的图像,注释或修饰现有的图像,并为网络使用而即时生成图形。
图形命令支持形状的绘制和文本的注释。
- 一个图像可以被很好地理解为一个像素(图片元素)的二维阵列。一个像素是被支持的最小的颜色点。
-
ImageDraw所使用的二维坐标系的原点是在图像的 左上角 。
-
我们使用的 Pillow颜色方案是RGB。RGB颜色的表示和支持是由 ImageColor 模块提供的 。
-
bitmap、OpenType或TrueType是可接受的用于文本注释的字体。
-
大多数绘图命令可能需要一个边界框参数,以指定该命令要应用的图像上的区域。
-
一个坐标序列可以表示为[ (x0, y0), (x1, y1), … (xn, yn)]。
-
对于某些绘图命令,我们需要角度值。
例子
下面的python例子在给定的图像上画一条线-
#Import required libraries
import sys
from PIL import Image, ImageDraw
#Create Image object
im = Image.open("images/logo.jpg")
#Draw line
draw = ImageDraw.Draw(im)
draw.line((0, 0) + im.size, fill=128)
draw.line((0, im.size[1], im.size[0], 0), fill=128)
#Show image
im.show()
输出
如果你将上述程序保存为Example.py并执行,它会在图像上画一条线,并使用标准的PNG显示工具显示,如下所示
画布
- ImageDraw是一个图像的Pillow可画表面(即画布)。
-
ImageDraw.Draw(img)返回Image参数img的一个可画的画布表示。画布的背景是 “img “图像。
例子
下面的python例子在给定的图像上绘制文本:
#Import required modules from Pillow package
from PIL import Image, ImageDraw, ImageFont
# get an image
base = Image.open('images/boy.jpg').convert('RGBA')
# make a blank image for the text, initialized to transparent text color
txt = Image.new('RGBA', base.size, (255,255,255,0))
# get a font
fnt = ImageFont.truetype('E:/PythonPillow/Fonts/Pacifico.ttf', 40)
# get a drawing context
d = ImageDraw.Draw(txt)
# draw text, half opacity
d.text((14,14), "Tutorials", font=fnt, fill=(255,255,255,128))
# draw text, full opacity
d.text((14,60), "Point", font=fnt, fill=(255,255,255,255))
out = Image.alpha_composite(base, txt)
#Show image
out.show()
输出
使用 “ImageDraw “模块绘制形状图
ImageDraw模块允许我们创建不同的形状,首先用你要处理的图像创建一个绘图对象,然后应用它。我们可以使用’ImageDraw’模块绘制一些常见的形状,如下所示
线条
以下是使用Python Pillow画线的语法:
draw.line(xy, fill=None, width=0)
line() 方法从边界盒xy和canvas的左上角到右下角画一条线。该线使用填充颜色。参数fill和width是可选的,默认值分别为None和0。
例子
from PIL import Image, ImageDraw
img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.line((200, 100, 300, 200), fill=(0, 0, 0), width=10)
img.show()
输出
椭圆
以下是使用python pillow绘制椭圆的语法:
draw.ellipse(xy, fill=None, outline=None)
ellipse() 方法在绘制时画出由边界框xy包围的椭圆。该形状使用颜色填充,周边使用颜色轮廓。默认值为None,参数fill和width是可选的。
例子
from PIL import Image, ImageDraw
img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.ellipse((200, 125, 300, 200), fill=(255, 0, 0), outline=(0, 0, 0))
img.show()
输出
矩形
以下是使用Python Pillow绘制矩形的语法:
draw.rectangle(xy, fill=None, outline=None)
rectangle() 方法在绘制时给定边界框xy来绘制矩形。该形状使用颜色填充,周边使用颜色轮廓。默认值为None,参数fill和width是可选的。
from PIL import Image, ImageDraw
img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.rectangle(
(200, 125, 300, 200),
fill=(255, 0, 0),
outline=(0, 0, 0))
img.show()
输出
多边形
以下是使用Python pillow绘制矩形的语法:
draw.polygon(seq, fill=None, outline=None)
polygon() 方法绘制一个多边形,用直线连接绘制时的坐标序列位置seq。seq中的第一个和最后一个坐标也由一条直线连接。形状用填充色填充,周长用轮廓色填充。参数fill和outline是可选的,默认值为 None。
from PIL import Image, ImageDraw
img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.polygon(
((200, 200), (300, 100), (250, 50)),
fill=(255, 0, 0),
outline=(0, 0, 0))
img.show()
输出