使用线帽和线接设置绘制线条

2 投票
2 回答
1050 浏览
提问于 2025-04-16 21:17

我需要一个Python库,可以画线,并且可以选择线的端点样式(比如圆形)和线的连接样式(比如圆形)。

我想要的功能类似于HTML5的画布绘图能力。

我看过PIL和AggDraw,但没有找到线的端点和连接样式的选项。

谢谢。

补充说明

我找到了Cairo库,决定使用它。你可以在这里了解更多关于Cairo的信息,在这里了解关于PyCairo的信息。

2 个回答

2

既然你在问关于HTML5画布的事情,我想你是在网页上输出这些内容。那么,你有没有考虑过使用SVG图形,而不是画布呢?(我个人更喜欢SVG,特别是在绘制线条的时候)

如果你对SVG没问题的话,可以看看pySVG - 这个工具似乎能满足你对多边形和折线的需求。

希望这些信息对你有帮助。

3

使用PyQt,你可以很简单地设置一些属性,这样你的应用程序就可以在没有图形界面的情况下运行,比如说只创建一张图片并保存到文件中。

你可以查看QPainter的文档,了解如何设置抗锯齿效果(使用setRenderHints),还有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")

示例程序的输出

撰写回答