Инвертируйте цвета с помощью 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/

Yoya
источник
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к своему ответу.
Джо Лисс