Инвертируйте цвета с помощью ImageMagick


27

Как инвертировать цвета изображения с помощью convertинструмента ImageMagick , чтобы черный стал белым, а белый стал черным?

Другими словами, я хочу включить это:

оригинал

в это:

перевернутый

Ответы:


45

Используйте -negateопцию:

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

-negateОпция заменяет каждый пиксель со своим дополнительным цветом. Эта -channel RGBопция необходима в ImageMagick 7 для предотвращения отрицания альфа-канала (если имеется). (Спасибо @yoya за это понимание!)

Смотрите также документацию для -negate.


5
это сделало мой черно-белый PNG полностью прозрачным ...
theonlygusti

Это сработало для меня
Шади

2
Проблема прозрачности заключается в том, что альфа-канал также инвертирован. Используйте, -channel RGB -negateчтобы избежать этого.
Goto-автобусная остановка

1
Это интересно. ImageMagick в моей системе (версия 6.8.9) только отрицает каналы RGB, но не альфа-канал по умолчанию, поэтому -channel RGBне является необходимым. Это только инвертирует альфа-канал, если я прохожу -channel RGBA -negate. Я не уверен, что объясняет другое поведение.
Джо Лисс

Это работает для меня, без отрицания. Что меня интересует, так это то, identifyчто хотя вход воспринимается как «8-битный sRGB», вывод - «8-битный серый».
user74094

3

ImageMagick 6.x может инвертировать интенсивность цвета только с опцией -negate. ref) https://www.imagemagick.org/script/command-line-options.php#negate

convert input.png -negate output.png

Для ImageMagick 7.x требуется параметр -channel с параметром -negate. ref) https://imagemagick.org/script/porting.php#cli Измененные параметры

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

Это потому, что активные каналы по умолчанию содержат прозрачность (непрозрачный / альфа) в ImageMagick 7.x

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

Большинство алгоритмов обновляют красный, зеленый, синий, черный (для CMYK) и альфа-каналы. Юзабилити -negate, похоже, приносится в жертву для общей согласованности.

Более подробно для вас. http://blog.awm.jp/2018/11/18/im7negate/


1
convert input.png -negate output.pngу меня отлично работает на ImageMagick 7.0.8 (ArchLinux)
msrd0

Нет проблем с изображением RGB без прозрачности. RGBA с прозрачностью изображения вызывает проблемы, только ImageMagick7.
Йоя

Вы можете проверить, имеет ли PNG файл прозрачность или нет. identify -verbose input.png | grep Type Он выводит TrueColor или TrueColorAlpha.
Йоя

Отличный ответ, спасибо! Я пошел дальше и добавил -channel RGBк своему ответу.
Джо Лисс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.