Палочка Python рисует многоугольники вместо прямоугольника, когда обводка> 2
Я не уверен, что я сделал не так, но это действительно странно. Не уверен, стоит ли мне отправлять новую проблему в Git-репозиторий Wand.
редактировать: я пытаюсь нарисовать прямоугольник.
Рассмотрим следующий код:
from wand.drawing import Drawing
from wand.color import Color
from wand.image import Image
def drawer():
square = Drawing()
square.fill_color = Color('#fff')
square.stroke_width = 4
square.stroke_color = Color('red')
square.rectangle(left=100, top=100, width=100, height=100)
return square
im = Image(width=500, height=500)
sq = drawer()
sq.draw(im)
im.save(filename='test1.png')
И это выводит:
Из того, что я пробовал и ошибался, этого не произойдет, если square.stroke_width
меньше или равно 2.
Я не уверен, что это ошибка Жезла или я делаю что-то не так.
3 ответа
Я понял это. libmagickwand-dev
в репозитории Ubuntu APT устарели.
$ python -m wand.version -v
Wand 0.4.2
ImageMagick 6.7.7-10 2014-03-06 Q16 http://www.imagemagick.org
$ apt-cache show libmagickwand-dev | grep Version
Version: 8:6.7.7.10-6ubuntu3
Поэтому я обновил его. Следуя инструкциям, приведенным здесь, и я добавил
export MAGICK_HOME=/usr/local/lib/
к моей переменной среды. И это сработало.
$ python -m wand.version -v
Wand 0.4.1
ImageMagick 6.9.2-0 Q16 x86_64 2015-09-08 http://www.imagemagick.org
Похоже, у вас есть осиротевшие экземпляры рисунка. Палочка использует питона with ... as ... :
ключевые слова для управления контекстом и ресурсами. Пример...
from wand.drawing import Drawing
from wand.color import Color
from wand.image import Image
class Drawer(Drawing):
def __enter__(self):
super(Drawing, self).__enter__()
self.fill_color = Color('#fff')
self.stroke_width = 4
self.stroke_color = Color('red')
self.rectangle(left=100, top=100, width=100, height=100)
return self
with Image(width=500, height=500) as im:
with Drawer() as sq:
sq(im)
im.save(filename='/tmp/test1.png')
Он должен нормально работать в соответствии с http://docs.wand-py.org/en/0.4.1/guide/draw.html. Если вы перейдете в конец страницы, он показывает, как рисовать полигоны. По сравнению с тем, как выглядит ваш код, он должен работать нормально. Я не знаю, что не так, но я уверен, что ваш код в порядке.