Нарисуйте линии с настройками для колпачка и соединения линий - PullRequest
2 голосов
/ 11 июля 2011

Мне нужна библиотека на Python, которая может рисовать линии с возможностью выбора верхнего колонтитула (например, круглого) и соединения (например, круглого).

Я ищу что-то, что работает как возможности HTML5 Canvas Drawing.

Я посмотрел на PIL, AggDraw и не нашел ограничения строки и параметров соединения.

Спасибо.

РЕДАКТИРОВАНИЕ

Я нашел Каирскую библиотеку, которую решил использовать.Вы можете прочитать больше о Каире здесь и о PyCairo здесь

Ответы [ 2 ]

3 голосов
/ 11 июля 2011

С помощью PyQt вы можете легко установить эти атрибуты, и приложение может быть без графического интерфейса (например, просто создать изображение и сохранить, например, в файл).

Просто проверьте QPainter документация по настройке сглаживания (с помощью setRenderHints) и документация по классу QPen для установки стиля cap и join.

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

Output of the example program

2 голосов
/ 12 июля 2011

Поскольку вы спрашиваете о HTML5 canvas, я предполагаю, что вы выводите это на веб-страницу. В таком случае, вы бы рассматривали графику SVG, а не Canvas? (лично я бы предпочел SVG, а не Canvas, особенно для рисования линий)

Если с SVG у вас все в порядке, вы, возможно, захотите взглянуть на pySVG - похоже, он соответствует вашим потребностям в плане полигонов и полилиний.

Надеюсь, это поможет.

...