Mam kilka obrazów PNG z przezroczystością i muszę tworzyć wersje z warstwą obrazu skomponowaną na białym tle. Próbowałem różnych rzeczy z operacjami „konwersji” Image Magick, ale albo nic się nie dzieje, albo pojawia się błąd. Nie chcę przejść do pośredniego formularza JPG, ponieważ nie chcę artefaktów. Oczywiście łatwo to zrobić w Gimp, Photoshopie itp., Ale wolałbym napisać skrypt z wiersza poleceń, ponieważ jest wiele takich rzeczy.
Przykładem niedziałającego polecenia Magii obrazu jest:
convert img1.png -background white -flatten img1-white.png
To powoduje błąd.
Dzięki!
png
imagemagick
alpha-transparency
Pointy
źródło
źródło
Odpowiedzi:
To działa dla mnie:
Referencje dokumentacji:
-flatten
opcja wiersza poleceń-layers
opcja wiersza poleceń (-flatten
jest równoważna z-layers flatten
)źródło
-flatten
. Spłaszczy strony do jednej strony.mogrify -flatten *.png
wszelki wypadek nie zapomnij wykonać kopii zapasowej. Więcej informacji tutaj: imagemagick.org/script/mogrify.phpPrzykład:
Zastąp
white
go dowolnym innym kolorem, jaki chcesz. Dokumentacja Imagemagick mówi o-alpha remove
operacji:źródło
-background white
nie jest to konieczne (prawdopodobnie dotyczy to innych kolorów).-alpha off
.convert image.png -background white -alpha off white.png
stworzył obraz z czarnym tłem.convert image.png -background "#00ff33" -alpha off 00ff33.png
stworzył czarne tłoSpłaszczanie obrazu i stosowanie obrazu tła jest proste w ImageMagick
Jednak kolejność poleceń jest bardzo ważna
Aby zastosować dowolne tło na przezroczystym obrazie i spłaszczyć je, najpierw zastosuj tło niż spłaszcz je. Rewers nie działa.
źródło
Jedyną, która działała dla mnie, była kombinacja wszystkich odpowiedzi:
źródło
... -background "#010203" ...
zamiast białego.mogrify -background white -flatten */*.png
-alpha remove
co mi to zrobiłooto jak zamienić ten sam obraz we wszystkich folderach w katalogu na biały zamiast przezroczystego:
mogrify -background white -flatten */*.png
źródło
Używanie -flatten doprowadziło mnie do szaleństwa, ponieważ -flatten w połączeniu z potężnym kadrowaniem i zmiana rozmiaru po prostu nie działa. Oficjalnym i dla mnie jedynym poprawnym sposobem jest „usunięcie” kanału alfa.
-alfa remove -alfa off (niepotrzebne w JPG)
Zobacz dokumentację: http://www.imagemagick.org/Usage/masking/#remove
źródło
convert imgWithTranspBkg.png -alpha remove -alpha off bkg.jpg resultImg.png
Sekcja Alpha Remove w Przewodniku użytkowania ImageMagick sugeruje użycie
-alpha remove
opcji, np .:... używając wybranego
-background
koloru.Przewodnik stwierdza:
Dodaje dodatkowo notatkę:
Dlatego jeśli nie potrzebujesz kanału alfa, możesz zmniejszyć rozmiar obrazu wyjściowego, dodając
-alpha off
opcję, np .:Więcej szczegółowych informacji na temat innych często używanych technik usuwania przezroczystości opisano w sekcji Usuwanie przezroczystości z obrazów .
W tej sekcji znajduje się wzmianka o ważnym zastrzeżeniu dotyczącym zastosowania
-flatten
jako techniki usuwania przezroczystości:Tak więc, jeśli konwertujesz kilka obrazów jednocześnie, np. Generowanie miniaturek z pliku PDF,
-flatten
nie zrobisz tego, co chcesz (spłaszczy wszystkie obrazy dla wszystkich stron w jeden obraz). Z drugiej strony, używając-alpha remove
techniki będzie nadal generować wiele obrazów, z których każdy ma usuniętą przezroczystość.źródło
Wygląda na to, że twoje polecenie jest prawidłowe, więc problem może wynikać z braku obsługi PNG (). Możesz to sprawdzić
convert -list configure
lub po prostu wypróbować:źródło
libpng12-0
zainstalowanym i działającym. Czy widzisz png, jeśli to uruchomisz?convert -list configure | grep \png
To nie jest dokładnie odpowiedź na twoje pytanie, ale znalazłem twoje pytanie, próbując dowiedzieć się, jak usunąć kanał alfa, więc postanowiłem dodać tę odpowiedź tutaj:
Jeśli chcesz usunąć kanał alfa za pomocą imagemagick, możesz użyć tego polecenia:
źródło
Welp wygląda na to, że moja decyzja o zainstalowaniu „magii graficznej” nad „magią graficzną” ma pewne szorstkie krawędzie - kiedy ponownie instaluję oryginalną, chrupiącą „magię graficzną”, powyższe polecenie działa doskonale.
edytuj , długi czas później - kiedyś sprawdzę, czy „magia graficzna” rozwiązała ten problem.
źródło
Potrzebowałem albo:
-alpha background
i-flatten
, albo-fill
.Zrobiłem nowy PNG z przezroczystym tłem i czerwoną kropką na środku.
convert image.png -background green -alpha off green.png
nie powiodło się: wytworzył obraz z czarnym tłemconvert image.png -background green -alpha background -flatten green.png
utworzył obraz z prawidłowym zielonym tłem.Oczywiście przy innym pliku, którego nazwę zmieniłem
image.png
, nic nie udało się zrobić. W przypadku tego pliku stwierdziłem, że kolor przezroczystych pikseli to „# d5d5d5”, więc wypełniłem ten kolor zielonym:convert image.png -fill green -opaque "#d5d5d5" green.png
zastąpiono przezroczyste piksele prawidłową zielenią.źródło
convert image.png -background green -alpha background -alpha off green.png
lubconvert image.png -background green -alpha background -alpha remove green.png
lubconvert image.png -background green -flatten green.png
Opcja bez wiersza poleceń: otwórz plik PNG w Windows Paint i kliknij Zapisz.
źródło
tworzy to obraz, który umieszcza pierwszy z przezroczystością na drugim
pierwotnie znalazłem wskazówkę dotyczącą tego postu
źródło
Aby faktycznie usunąć kanał alfa z pliku, użyj opcji wyłączenia alfa :
źródło
Widziałem to pytanie i odpowiedzi, które naprawdę mi pomagają, ale wtedy musiałem to zrobić dla wielu plików, więc na wypadek, gdybyś miał wiele obrazów (obrazów PNG) w jednym folderze i chcesz to zrobić dla wszystkich:
źródło
To -alfa wyłączone, NIE -alfa usuń! Przesyłanie do sklepu z aplikacjami na iOS kończy się niepowodzeniem, gdy w dowolnej ikonie jest kanał alfa !!
Oto jak to zrobić: mogrify -alpha off * .png
źródło