【发布时间】:2011-10-03 01:47:03
【问题描述】:
我需要一个 Python 库,它可以通过选择线帽(例如圆形)和线连接(例如圆形)来绘制线条。
我正在寻找类似于 HTML5 Canvas 绘图功能的东西。
我查看了 PIL、AggDraw 并没有找到 line cap 和 join 选项。
谢谢。
编辑
【问题讨论】:
我需要一个 Python 库,它可以通过选择线帽(例如圆形)和线连接(例如圆形)来绘制线条。
我正在寻找类似于 HTML5 Canvas 绘图功能的东西。
我查看了 PIL、AggDraw 并没有找到 line cap 和 join 选项。
谢谢。
编辑
【问题讨论】:
使用 PyQt,您可以轻松设置这些属性,并且应用程序可以没有 gui(例如,只需创建图像并保存到文件中)。
只需查看有关设置抗锯齿(使用 setRenderHints)的 QPainter 文档和有关设置上限和连接样式的 QPen 类的文档。
from PyQt4.Qt import *
import math
app = QApplication([])
img = QImage(256, 256, QImage.Format_RGB32)
dc = QPainter(img)
dc.fillRect(0, 0, 256, 256, QColor(192, 192, 192))
dc.setRenderHints(QPainter.Antialiasing)
dc.setPen(QPen(QColor(128, 128, 192),
12.0,
Qt.SolidLine,
Qt.RoundCap,
Qt.RoundJoin))
pts = []
for i in xrange(7):
t = i * 2 * 3 * math.pi / 7
pts.append(QPointF(128 + 100 * math.cos(t),
128 + 100 * math.sin(t)))
dc.drawPolyline(QPolygonF(pts))
dc = None
img.save("output.png")
【讨论】:
由于您询问的是 HTML5 画布,我假设您将其输出到网页。在这种情况下,您会考虑使用 SVG 图形而不是 Canvas 吗? (我个人更喜欢 SVG 而不是 Canvas,尤其是画线)
如果您对 SVG 没问题,那么您可能想查看 pySVG - 它似乎满足您在多边形和折线方面的需求。
希望对您有所帮助。
【讨论】: