Перетворити зображення сірого масштабу в зображення альфа-каналу в оболонці Unix


14

У мене зображення сірого кольору. Я хочу перетворити його в прозорий PNG, таким чином, щоб чорні пікселі (на оригінальному зображенні) стали повністю непрозорими, білі пікселі стали повністю прозорими, 50% сірий піксель став би 50% прозорим тощо для всіх відтінків по середині.

Як я можу цього досягти?

(Так, я знаю, що це майже те саме питання, що і перетворення відтінків сірого масштабу в альфа-канал , але я хочу знати, як це зробити, використовуючи лише інструменти командного рядка - наприклад ImageMagick або NetPBM.)

Ось зразок результату з вищезазначеного питання. Цей зразок - це результат, якого я хотів би досягти, використовуючи лише інструменти командного рядка.

Зразок

Якщо ви відкриєте цей PNG у переглядачі, який підтримує прозорість, ви побачите, що я маю на увазі.

Відповіді:


18

Оооокей. Після безлічі гуглінгу та читання більшої частини посібника з ImageMagick, ніж я насправді переймаюся, ось відповідь. З огляду на те, що у вас є назва сірого зображення source.png, ось мої команди.

Щоб зробити чорні пікселі прозорими та зберегти білі пікселі такими, якими вони є, запустіть цю команду:

 convert source.png -alpha copy -fx '#fff' result.png

Щоб замість цього зробити білі пікселі прозорими , зберігаючи чорний як є, використовуйте:

 convert source.png -alpha copy -channel alpha -negate +channel -fx '#000' result.png

Пояснимо цю останню команду трохи ретельніше:

  • convert - Чи є команда ImageMagic (одна з декількох)
  • source.png - Вихідне зображення сірого масштабу.
  • -alpha copy - Скопіюйте вміст попереднього файлу в альфа-канал.
  • -channel alpha - Вкажіть, що лише наступні оператори повинні впливати на альфа-канал.
  • -negate- Інвертуйте альфа-канал (через попередній -chanel alphaне вплине на будь-яку іншу частину зображення).
  • +channel- Вкажіть, що лише наступні оператори повинні впливати на кольорові канали, а не змінювати альфа-канал. (Це за замовчуванням, і тому нам не потрібно наводити це в першому, більш простому прикладі.)
  • -fx '#000'- Замініть вміст кольорового каналу чорними пікселями. (Через +channelальфа-канал це не вплине).

Досить важливо включити цей остаточний -fxваріант, інакше всі напівпрозорі пікселі в створеному зображенні збережуть кольори. (Оскільки ці пікселі є напівпрозорими, це може бути не очевидно, але кінцевий результат - це не те, чого варто очікувати.)

Я знайшов список параметрів ImageMagick досить корисним.


досить вдале пояснення для досягнення своєї мети, коли я використовую другу команду, яка робить моє зображення темнішим, ніж фактичне зображення в градаціях сірого. Насправді, моя мета досягти того ж кольорового тону, який є у відтінках сірого, крім тієї прозорості, як очікувалося. якась ідея цього досягти?
Hardik Patel

це дуже корисно, дякую! :) радий, що мені не довелося розібратися у цьому для себе
Сем Уоткінс

Я тебе люблю!!!!!!
mescarra

Такі коментарі, напевно, краще надіслати мені через цей канал: okcupid.com/profile/zrajm :)
zrajm

1
не впевнений, чому, але в поточній версії (ImageMagick 7.0.7-21) я отримую лише суцільне біло / чорне зображення в результаті, без жодного альфа-каналу. Я скопіював командний рядок дослівно, змінивши лише шляхи введення / виводу файлів. Можливо, вони внесли якісь невідповідні зміни.
Відображати ім’я

0

З ImageMagick 7.0, наведена вище відповідь вже не працює. Але ви можете використовувати:

перетворити source.png -channel rgb -fx '#fff' result.png

Ака, заповніть RGB канали порожнім, і нехай альфа, як і раніше.


Я підозрюю, що ви пропустили "-альфа-копію" :)
Кріс,

0

З Imagemagick 7 я вважаю, що це потрібно вказати -channel RGBперед -fx, інакше ви отримаєте суцільне чорне зображення, як-от так:

convert input.png -alpha copy -channel RGB -fx '#000' out.png

І заперечення корисно, якщо ви хочете, щоб чорний був непрозорим, а білий - прозорим:

convert input.png -negate -alpha copy -channel RGB -fx '#000' out.png
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.