Creating a semi-transparent PNG with ImageMagick/convert

前端 未结 3 1596
野性不改
野性不改 2021-02-06 01:11

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 Ear

相关标签:
3条回答
  • 2021-02-06 01:25

    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.

    0 讨论(0)
  • 2021-02-06 01:33

    To followup on Tony Bogdanov's comment. If you already have fully transparent pixels you may want to use the following strategy:

    1.) convert the transparent pixels into a mask

    convert -alpha extract input.png mask.png

    2.) perform the command listed in the answer above:

    convert input.png -alpha on -channel a -evaluate set 65% output.png

    3.) create a blank canvas the same size as the original image

    example: convert -size 700x800 xc:none blankcanvas.png

    4.) composite the semitransparent image and the blank canvas together using the transparent pixel mask

    composite output.png blankcanvas.png mask.png -compose Src final_output.png

    0 讨论(0)
  • 2021-02-06 01:34
    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.

    0 讨论(0)
提交回复
热议问题