📅  最后修改于: 2020-11-07 07:50:26             🧑  作者: Mango
“ ImageDraw”模块为Image Object提供了简单的2D图形支持。通常,我们使用此模块来创建新图像,注释或修饰现有图像,以及即时生成图形以供Web使用。
图形命令支持图形的绘制和文本的注释。
可以将图像深思熟虑为像素(图片元素)的二维阵列。像素是受支持的最小颜色点。
ImageDraw使用的二维坐标系的原点在图像的左上角。
我们使用的枕头配色方案是RGB。彩色RGB表示和支持由模块ImageColor提供。
位图,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是图像的枕头可绘制表面(即画布)。
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’模块绘制的一些常见形状如下-
以下是使用Python枕头画线的语法-
draw.line(xy, fill=None, width=0)
line()方法从边界框xy和画布的左上角到右下角绘制一条线。该行使用颜色填充进行填充。默认值None和0分别是可选参数fill和width的值。
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枕头绘制椭圆的语法-
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枕头绘制矩形的语法-
draw.rectangle(xy, fill=None, outline=None)
矩形()方法在绘制时绘制给定边界框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枕头绘制矩形的语法-
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()