Inversez les couleurs avec ImageMagick

27

Comment inverser les couleurs d'une image à l'aide de l' convertoutil ImageMagick , pour que le noir devienne blanc et le blanc devient noir?

En d'autres termes, je veux tourner ceci:

original

en cela:

inversé

Jo Liss
la source

Réponses:

45

Utilisez l' -negateoption:

convert input.png -channel RGB -negate output.png

L' -negateoption remplace chaque pixel par sa couleur complémentaire. L' -channel RGBoption est nécessaire à partir d'ImageMagick 7 pour empêcher le canal alpha (s'il est présent) d'être annulé. (Merci à @yoya pour cet aperçu!)

Voir aussi la documentation de -negate.

Jo Liss
la source
5
cela a rendu mon png noir et blanc complètement transparent ...
theonlygusti
Cela a fonctionné pour moi
shadi
2
Le problème de transparence est dû au fait que le canal alpha est également inversé. Utilisez -channel RGB -negatepour éviter cela.
goto-bus-stop
1
C'est intéressant. L'imageMagick sur mon système (version 6.8.9) annule uniquement les canaux RVB, et non le canal alpha par défaut, donc ce -channel RGBn'est pas nécessaire. Il inverse uniquement le canal alpha si je passe -channel RGBA -negate. Je ne sais pas ce qui explique les différents comportements.
Jo Liss
Cela fonctionne pour moi, sans nier. Ce que je suis curieux de savoir, c'est que: alors que identifyl'entrée est "sRGB 8 bits", la sortie est "Gris 8 bits gris".
user74094
3

ImageMagick 6.x peut inverser les intensités de couleur avec l'option -negate uniquement. ref) https://www.imagemagick.org/script/command-line-options.php#negate

convert input.png -negate output.png

ImageMagick 7.x nécessite l'option -channel avec -negate. ref) https://imagemagick.org/script/porting.php#cli Options modifiées

convert input.png -channel RGB -negate output.png

En effet, les canaux actifs par défaut contiennent de la transparence (opaque / alpha) dans ImageMagick 7.x

ImageMagick6: DefaultChannels = ((AllChannels | SyncChannels) &~ OpacityChannel)
ImageMagick7: DefaultChannels = AllChannels

La plupart des algorithmes mettent à jour les canaux rouge, vert, bleu, noir (pour CMJN) et alpha. La convivialité de -negate semble être sacrifiée pour la cohérence globale.

Plus de détails pour vous. http://blog.awm.jp/2018/11/18/im7negate/

yoya
la source
1
convert input.png -negate output.pngfonctionne bien pour moi sur ImageMagick 7.0.8 (ArchLinux)
msrd0
Il n'y a pas de problème sur l'image RVB sans transparence. RGBA avec l'image de transparence pose problème, uniquement ImageMagick7.
yoya
Vous pouvez vérifier que le fichier PNG est transparent ou non. identify -verbose input.png | grep Type Il sort TrueColor ou TrueColorAlpha.
yoya
Excellente réponse, merci! Je suis allé de l'avant et j'ai ajouté -channel RGBà ma réponse.
Jo Liss