使用 PIL 绘制图像的更快方法?

Faster way to plot an image with PIL?

我有一组从草图光栅化的 (x,y) 坐标:

x = [167, 109, 80, 69, 58, 31]
y = [140, 194, 227, 232, 229, 229]

我想重新创建该草图并将其另存为图像。目前我正在使用PIL画线功能,像这样:

from PIL import Image, ImageDraw

im = Image.new('L', (256, 256), 255)
draw = ImageDraw.Draw(im)
for i in range(len(x)-1):
    draw.line((x[i],y[i], x[i+1], y[i+1]),fill=0,width=2)
im.save('test.png')

不知道有没有更快的方法。 (x,y) 点按绘制顺序排列,因此使用 Image.putdata() 可能会有帮助?

这或多或少展示了我在评论中的建议(没有 zip() 调用中的 * 前缀)关于能够仅使用一次调用来绘制整条线draw.line().

优点是它需要更少的代码,并且可能稍微更快(即使这在测试数据中并不明显)。

try:
    from itertools import izip
except ImportError:  # Python 3
    izip = zip
from PIL import Image, ImageDraw

x = [167, 109, 80, 69, 58, 31]
y = [140, 194, 227, 232, 229, 229]

im = Image.new('L', (256, 256), 255)
draw = ImageDraw.Draw(im)

#for i in range(len(x)-1):
#    draw.line((x[i],y[i], x[i+1], y[i+1]), fill=0, width=2)

draw.line(list(izip(x, y)), fill=0, width=2) # Draws entire line.
#im.save('test.png')
im.show()  # Display the image.