Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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

like image 784
Adriaan Meuris Avatar asked Jan 03 '23 23:01

Adriaan Meuris


2 Answers

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

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

enter image description here

like image 190
fmw42 Avatar answered Jan 16 '23 22:01

fmw42


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

like image 20
emcconville Avatar answered Jan 16 '23 21:01

emcconville