pythongrayscalewandmagickwand

Wand turns transparent background to black


I am trying to grayscale with python using Wand, but when I do

from wand.image import Image
with Image(filename='image.png') as img:
    img.type = 'grayscale'
    img.save(filename='image_gray.png')

it turns the transparent background into black. If I use one with white background it works. What do I do wrong. And also as grayscaling is

Y = 0.2126 * RED + 0.7152 * GREEN + 0.0722 * BLUE

Where can I do that manually in Wand, say if I want to change the values a bit. I looked in the documentation and in various forums but I couldn't find any answer, only stuff for photoshop.

Thanks!


Solution

  • PNG image type set to grayscale removes transparent layer (see PNG docs). One option would be to enable the Alpha channel after setting grayscale.

    img.alpha = True
    # or
    img.background_color = Color('transparent')
    

    Depending on which version you have, this might not work.

    Another Option

    Alter the color saturation with Image.modulate.

    img.modulate(saturation=0.0)
    

    Another Option

    Alter the colorspace.

    img.colorspace = 'gray'
    # or
    img.colorspace = 'rec709luma'
    # or
    img.colorspace = 'rec601luma'
    

    Another Option

    If your version has Image.fx. The following would work

    with img.fx('lightness') as gray_copy:
       ....