Есть ли способ обрезать прозрачные области с помощью Wand (привязка ImageMagick к Python)?

#python #imagemagick #wand

#python #imagemagick #wand

Вопрос:

Следующий код генерирует ошибку.

 #!/usr/bin/env python

import collections.abc
from wand.image import Image, COMPOSITE_OPERATORS, DISTORTION_METHODS, CHANNELS
from wand.drawing import Drawing

wand_imageText = Image(width=1080,
                   height=1080,
                   background='rgb(0,0,0,0)')

with Drawing() as draw:        
    draw.font = 'Impact'
    draw.font_size = 100
    draw.gravity = 'north_west'
    draw.fill_color = 'rgb(255, 255, 255, 255)' 
    draw.text(0, 0, "Let's rock!")        
    draw(wand_imageText)

wand_imageText.trim(color='rgb(0,0,0,0)',fuzz=0)

wand_imageText.save(filename='C:\Temp\Wand_trim_test.jpg')
wand_imageText.close()
  

Файл «C:Program FilesPython37libsite-packageswandimage.py «, строка 865, в завернутом
результат = файл функции (self, * args, ** kwargs) «C:Program FilesPython37libsite-packageswandimage.py «, строка 4444, в trim
с цветом или self[0, 0] в качестве цвета: ошибка атрибута: введите

Есть ли способ обрезать прозрачность с помощью Wand?

Комментарии:

1. Попробуйте использовать rgba в wand_imageText.trim(color='rgba(0,0,0,0)',fuzz=0) . Также используйте rgba в draw.fill_color = 'rgba(255, 255, 255, 255)' Именно так определяются прозрачные цвета в ImageMagick. Извините, я не знаю Python Wand. Но я предполагаю, что он будет использовать тот же синтаксис, что и ImageMagick. Видишь docs.wand-py.org/en/0.5.1/wand/color.html

2. Использование rgba () не работает. Он по-прежнему выдает ту же ошибку.

3. Извините, я не знаю Wand. Но опубликовали ли вы свой полный код? Я не вижу связи сообщения об ошибке с тем, что вы закодировали. Вы добавили rgba во все места, включая background='rgba(0,0,0,0)'

4. Да, это полный код. Это функция trim, которая генерирует ошибку. Я везде использовал rgba ().

5. Поддерживает ли ImageMagick обрезку по альфа-значению?

Ответ №1:

Я выяснил, что я делал неправильно.

Аргументом color функции trim должно быть значение wand.color.Цветной объект для работы функции.

Следующий код, который использует предложение fmw42 об использовании rgba(), выполняет обрезку с использованием альфа-значения.

 from wand.color import Color

wand_imageText.trim(color=Color('rgba(0,0,0,0)'),fuzz=0)