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

标签 python image plot drawing

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

output

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

最佳答案

这或多或少演示了我在注释中建议的关于能够绘制整个仅使用一次 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.

关于python - 使用 PIL 绘制图像的更快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46614294/

相关文章:

python - 在 geopandas 中移动阿拉斯加和夏威夷以获得 choropleths

javascript - 使用 javascript 删除子元素

python - subprocess.check_output() 模块对象有 out 属性 'check_output'

image - 在 Markdown 中在文本和图像之间添加空格

python - 如何根据索引组合嵌套列表?

java - 在 Java Swt 和内存消耗中缩放图像

android - 从 Uri 转换位图返回 null

python - 显示图形限制之外的文本

javascript - 如何使用 django 在服务器端加密我的数据

Python多处理安全地写入文件