Палочка 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')

И это выводит:

странное изображение 1

Из того, что я пробовал и ошибался, этого не произойдет, если 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')

rectangel

Он должен нормально работать в соответствии с http://docs.wand-py.org/en/0.4.1/guide/draw.html. Если вы перейдете в конец страницы, он показывает, как рисовать полигоны. По сравнению с тем, как выглядит ваш код, он должен работать нормально. Я не знаю, что не так, но я уверен, что ваш код в порядке.

Другие вопросы по тегам