使用 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.
我有一组从草图光栅化的 (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.