【问题标题】:Draw lines with settings for line cap and line join使用线帽和线连接的设置绘制线
【发布时间】:2011-10-03 01:47:03
【问题描述】:

我需要一个 Python 库,它可以通过选择线帽(例如圆形)和线连接(例如圆形)来绘制线条。

我正在寻找类似于 HTML5 Canvas 绘图功能的东西。

我查看了 PIL、AggDraw 并没有找到 line cap 和 join 选项。

谢谢。

编辑

我找到了 Cairo 图书馆,我决定使用它。你可以阅读更多关于 Cairo here 和 PyCairo here

【问题讨论】:

    标签: python image html drawing


    【解决方案1】:

    使用 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")
    

    【讨论】:

    • 是的...我编辑添加了一个完整的示例(程序创建一个图像并将其保存到一个.png文件)
    • 看起来很有趣,但我找到了 Cairo 图书馆,所以我选择了它。
    • Cairo 也是一个非常不错的库,当然体积要小得多(Qt 已经实现了一切,然后还有更多)。我在使用 Cairo 时发现的唯一问题是找到正确的 windows 库以及如果你想在封闭源程序中使用它,IMO 会混淆的许可条款。
    【解决方案2】:

    由于您询问的是 HTML5 画布,我假设您将其输出到网页。在这种情况下,您会考虑使用 SVG 图形而不是 Canvas 吗? (我个人更喜欢 SVG 而不是 Canvas,尤其是画线)

    如果您对 SVG 没问题,那么您可能想查看 pySVG - 它似乎满足您在多边形和折线方面的需求。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多