Creating a semi-transparent PNG with ImageMagick/convert

10,502

Solution 1

Resolution has been found:

convert input.png -alpha set -channel A -evaluate set 50% output.png

The above command makes the entire image (all colors) semi-transparent.

Another problem I had was that the latest version of ImageMagick was compiled from source without all the most recent image libraries installed (in particular libpng). Pay close attention to the output of configure to ensure libpng is found if compiling from source. It also appears that versions of ImageMagick earlier than 6.6 and/or older versions of libpng may not support transparent png generation.

Solution 2

convert input.png -alpha set -channel A -evaluate Divide 2 output.png

Thank you @caw for pointing this out in your comment. This helps in the case where the image already has some transparent pixels. -evaluate set 50% ruins the already-transparent pixels that had alpha 0, setting their alpha to 50%, which is often not desirable.

-evaluate Divide 2 preserves the alpha, since fully transparent pixels are alpha 0, and 0 divided by 2 is still 0.

Share:
10,502
user1502835
Author by

user1502835

Updated on June 07, 2022

Comments

  • user1502835
    user1502835 about 2 years

    I have PNG files that I would like to convert the whole image to be semi-transparent.

    The image will be referenced in a KML file as an icon overlay for use in Google Earth/Maps.

    The following examples have been suggested to me using the ImageMagick convert command, however neither seems to work.

    The first example results in an error,

    $ /usr/local/bin/convert 121112142121.png -channel Alpha -evaluate Set 50% 2121112142121.png
    convert: no decode delegate for this image format '121112142121.png' @ error/constitute.c/ReadImage/550.
    convert: option requires an argument '-evaluate' @ error/convert.c/ConvertImageCommand/1400.
    

    the second fails to make any observable change to the image:

    convert filename.png -fill '#00000080' -draw 'matte 100,100 reset' output.png
    

    While I can find many examples on the web for creating fully transparent images from specific colors or alpha masks, I cannot seem to find any that work for creating semi-transparent images or changing the opacity. I would like to find a way to do this with the convert command, or with ImageMagick Perl.

    (ImageMagick version is 6.8.0-4)

  • caw
    caw over 10 years
    You can also use -evaluate Divide 2 if you want to make it independent from the original image (just double the transparency for all pixels).
  • Tony Bogdanov
    Tony Bogdanov over 8 years
    The problem with this approach is that if you already have fully transparent pixels in the image, their transparency seems to change as well making them semi-transparent black :( Any ideas?
  • Jonathan Allard
    Jonathan Allard over 4 years
    I found that the image would be pixelated unless I added the -matte flag.