Как выполнить графический вызов ImageMagick с помощью палочки python

Попытка конвертировать эту команду ImageMagick в код Python Wand, но я не вижу средства для создания градиентного изображения с Wand.

    convert -size 800x800 gradient:"rgba(0,0,0,0.12)-rgba(0,0,0,1)" gradient_overlay.png

    convert gradient_overlay.png background.png -compose Overlay -composite -depth 8 background_gradient.png

Кто-нибудь знает, как я могу добиться этого с помощью палочки?

python-2.7,imagemagick,wand,

1

Ответов: 3


Вам нужно будет выделить экземпляр палочки, установить размер холста, а затем прочитать формат псевдо-изображения.

from wand.image import Image
from wand.api import library

with Image() as canvas:
    library.MagickSetSize(canvas.wand, 800, 800)
    canvas.read(filename="gradient:rgba(0,0,0,0.12)-rgba(0,0,0,1)")
    canvas.save(filename="gradient_overlay.png")

gradient_overlay.png


1

ImageMagick Equivalent для использования с Wand

Я не использовал Wand, но я могу показать вам, как это сделать со ссылкой на ImageMagick. Вы можете создать новое прозрачное изображение. Затем используйте оператор fx для изменения альфа-канала в градиент.

Эквивалентные ссылки Wand:

Создайте новый прозрачный образ (по умолчанию) - см. Http://docs.wand-py.org/en/0.4.1/guide/read.html?highlight=new%20image#open-empty-image

Используйте fx для преобразования альфа-канала в градиент - см. Http://docs.wand-py.org/en/0.4.1/wand/image.html

convert -size 800x800 xc:transparent -channel a -fx "(j*(1-0.12)/(h-1)+0.12)" +channel alpha.png


введите описание изображения здесь

Вот как я получил формулу fx:

Вы хотите, чтобы 12% серый сверху (0.12) и 100% серый / белый внизу (1.0). Поэтому мы принимаем формулу:

c = a*j + b

At j=0 the top, you need 0.12, so

0.12 = a*0 + b -->  b = 0.12

At j=(h-1) the bottom, you want 1, so 

1 = a*(h-1) + 0.12 --> a = (1-0.12)/(h-1)

So the equation is:

c = j*(1-0.12)/(h-1) + 0.12

h - высота изображения (800).


1 принят

Вот как я решил это на основе обратной связи fmw42

with Color('black') as blackColor:
with Image(width=800, height=800, background=blackColor) as black:
    blackPath = existing[:existing.rfind('/') + 1] + 'black.png'
    with Color('white') as whiteColor:
        with Image(width=800, height=800, background=whiteColor) as alpha:
            fxFilter = "(j*(1-0.12)/(h-1)+0.12)"
            with alpha.fx(fxFilter) as filteredImage:
                black.composite_channel('default_channels', filteredImage, 'copy_opacity', 0, 0)
                black.save(filename=blackPath)
питон-2,7, ImageMagick, палочка,
Похожие вопросы