GraphicsMagick / ImageMagick replace all non-transparent pixels (like Photoshop's Color Overlay)

1.3k Views Asked by At

I'm trying to replace all non-transparent pixels to a given color using GraphicsMagick for Node.

Using a composite image is not an option, I simply need to change every non-transparent pixel to a given color.

Original image:

Original image

Goal:

enter image description here

Transparent pixels should stay transparent. I'm trying to achieve Photoshop's Color Overlay effect:

enter image description here

2

There are 2 best solutions below

2
On BEST ANSWER

This is a bit simpler. In ImageMagick do the following:

convert 84xHk.png -fill "#E91FCB" +opaque none result.png

enter image description here

0
On

I'm not familiar with Node's GraphicsMagick library, but there are a few methods to achieve this. Here's a few I can think of...

Extract alpha, and replace colors

convert 84xHk.png -alpha extract \
        -negate -fill '#E91FCB' -fuzz 50% \
        -opaque black output.png

First Example

Create solid color image, and copy alpha channel

convert 84xHk.png \
       \( +clone -alpha off \
          -fill '#E91FCB' \
          -draw 'color 0,0 reset' \
       \) +swap -compose CopyOpacity -composite output.png

Second Example

Use FX expressions

 convert 84xHk.png -fx 'p.a==1?#E91FCBFF:#E91FCB00' output.png

Third Example