Konwertuj obraz w skali szarości na obraz kanału alfa w powłoce unix
14
Mam obraz w skali szarości. Chcę przekonwertować go na przezroczysty PNG, tak aby czarne piksele (na oryginalnym obrazie) stały się całkowicie nieprzezroczyste, białe piksele stały się całkowicie przezroczyste, 50% szary piksel stałby się 50% przezroczysty i tak dalej dla wszystkich odcieni pomiędzy.
Jak mogę to osiągnąć?
(Tak, wiem, że jest to prawie to samo pytanie, co Konwertowanie odcieni szarości na kanał alfa , ale chcę wiedzieć, jak to zrobić, używając tylko narzędzi wiersza poleceń - np. ImageMagick lub NetPBM.)
Oto przykładowy wynik powyższego pytania. Ta próbka jest wynikiem, który chciałbym osiągnąć przy użyciu tylko narzędzi wiersza polecenia.
Jeśli otworzysz ten PNG w przeglądarce obsługującej przezroczystość, zobaczysz, co mam na myśli.
Oooookay. Po mnóstwie googlingu i przeczytaniu większej ilości instrukcji ImageMagick, niż mi zależy, oto odpowiedź. Biorąc pod uwagę, że masz obraz w skali szarości source.png, oto moje polecenia.
Aby uczynić czarne piksele przezroczystymi i zachować białe piksele takimi, jakie są, uruchom następujące polecenie:
convert - Jest poleceniem ImageMagic (jednym z kilku)
source.png - Obraz źródłowy w skali szarości.
-alpha copy - Skopiuj zawartość poprzedniego pliku do kanału alfa.
-channel alpha - Określ, że tylko operatorzy powinni wpływać na kanał alfa.
-negate- Odwróć kanał alfa (spowoduje, że z powodu poprzedniego -chanel alphanie wpłynie na żadną inną część obrazu).
+channel- Określ, że tylko operatorzy powinni wpływać na kanały kolorów i nie modyfikować już kanału alfa. (Jest to ustawienie domyślne, dlatego nie musimy go podawać w pierwszym, prostszym przykładzie).
-fx '#000'- Zamień zawartość kanału kolorów na czarne piksele. (Ze względu +channelna kanał alfa nie będzie to miało wpływu).
Jest bardzo ważne, aby dołączyć tę ostatnią -fxopcję, w przeciwnym razie wszystkie półprzezroczyste piksele w generowanym obrazie zachowają kolory. (Ponieważ te piksele są półprzezroczyste, może to nie być oczywiste, ale wynik końcowy nie jest tym, czego można się spodziewać).
całkiem dobre wyjaśnienie, aby osiągnąć cel, gdy używam drugiego polecenia, które powoduje, że mój obraz jest ciemniejszy niż rzeczywisty obraz w skali szarości. W rzeczywistości moim celem jest uzyskanie tego samego odcienia koloru, który występuje w skali szarości innej niż ta przezroczystość, zgodnie z oczekiwaniami. jakiś pomysł, aby to osiągnąć?
Hardik Patel,
to bardzo przydatne, dzięki! :) cieszę się, że nie musiałem sam tego rozgryzać
Sam Watkins
Kocham Cię!!!!!!
mescarra
Tego rodzaju komentarze lepiej przesłać mi za pośrednictwem tego kanału: okcupid.com/profile/zrajm :)
zrajm
1
nie jestem pewien, dlaczego, ale w obecnej wersji (ImageMagick 7.0.7-21) otrzymuję tylko jednolity biały / czarny obraz, bez żadnego kanału alfa. Skopiowałem wiersz polecenia dosłownie, zmieniając tylko ścieżki plików wejściowych / wyjściowych. Może wprowadzili pewne niezgodne wstecz wersje.
Nazwa wyświetlana
0
W ImageMagick 7.0 powyższa odpowiedź już nie jest. Ale możesz użyć:
W przypadku imagemagick 7 uważam, że konieczne jest określenie -channel RGBprzed -fx, w przeciwnym razie otrzymujesz jednolity czarny obraz, na przykład:
W ImageMagick 7.0 powyższa odpowiedź już nie jest. Ale możesz użyć:
convert source.png -channel rgb -fx '#fff' result.png
Aka, wypełnij kanały RGB spacją i niech alfa jak poprzednio.
źródło
W przypadku imagemagick 7 uważam, że konieczne jest określenie
-channel RGB
przed-fx
, w przeciwnym razie otrzymujesz jednolity czarny obraz, na przykład:Negacja jest przydatna, jeśli chcesz, aby czarny był nieprzezroczysty, a biały przezroczysty:
źródło