我从草图中栅格化了一组(x,y)坐标:
x = [167, 109, 80, 69, 58, 31]
y = [140, 194, 227, 232, 229, 229]
我想重新创建该草图并将其另存为图像。目前我正在使用PIL绘制线功能,如下所示:
from PIL import Image, ImageDraw
img = [[1, 1]]
im = Image.new('L', (256, 256), 255)
imgdata = np.array(img[0][1])*256 + np.array(img[0][1])
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()
可能有帮助吗?
答案 0 :(得分:1)
这或多或少证明了我在评论中提出的建议(在strerror()
调用中没有*
前缀)关于能够仅使用一次调用来{{1}来绘制整行。 1}}。
优点是代码更少,而且稍微更快(即使测试数据不明显)。
zip()
对于 Python 3.x ,您需要使用draw.line()
将行更改为以下(虽然在Python 2中可以执行,但需要额外的,虽然无害,但处理不必要):
import numpy as np
from PIL import Image, ImageDraw
img = [[1, 1]]
x = [167, 109, 80, 69, 58, 31]
y = [140, 194, 227, 232, 229, 229]
im = Image.new('L', (256, 256), 255)
imgdata = np.array(img[0][1])*256 + np.array(img[0][1])
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(zip(x, y), fill=0, width=2) # Draws entire line.
#im.save('test.png')
im.show() # Display the image.