Zamień przezroczystość w obrazach PNG na białe tło
Mam kilka obrazów PNG z przezroczystością i muszę utworzyć wersje z warstwą obrazu złożoną na białym tle. Próbowałem różnych rzeczy z operacjami "Konwertuj" Image Magick, ale albo nic się nie dzieje, albo dostaję błąd. Nie chcę iść do pośredniego formularza JPG, bo nie chcę artefaktów. Oczywiście łatwo jest to zrobić w Gimpie lub Photoshopie, ale naprawdę wolałbym skrypt z linii poleceń, ponieważ jest ich wiele rzeczy.
Przykład niedziałającego polecenia Image Magick to:convert img1.png -background white -flatten img1-white.png
To powoduje błąd.
Dzięki!13 answers
To działa dla mnie:
convert -flatten img1.png img1-white.png
Odniesienia do dokumentacji:
-
-flatten
opcja wiersza poleceń -
-layers
opcja wiersza poleceń (-flatten
jest równoważne-layers flatten
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-21 16:34:46
-background white -alpha remove
Przykład:
convert image.png -background white -alpha remove white.png
Możesz zastąpić white
dowolnym innym kolorem. Dokumentacja Imagemagick mówi tak o operacji -alpha remove
:
Ta operacja jest prosta i szybka, i wykonuje zadanie bez potrzeby każde dodatkowe użycie pamięci lub inne działania niepożądane, które mogą być związane z alternatywnymi technikami usuwania przezroczystości. jest więc preferowany sposób usuwania przezroczystości obrazu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-23 08:29:02
Spłaszczanie obrazu i nakładanie 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, a następnie spłaszcz je. Odwrotność nie działa.
$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-06 15:13:09
Jedyna, która mi pomogła, to mieszanka wszystkich odpowiedzi:
convert in.png -background white -alpha remove -flatten -alpha off out.png
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-16 03:51:33
Użycie -flatten całkowicie mnie wkurzyło, ponieważ-flatten w połączeniu z mogrify crop i zmiana rozmiaru po prostu nie działa. Oficjalnym i dla mnie jedynym poprawnym sposobem jest "usunięcie" kanału alfa.
- alpha remove-alpha off (nie potrzebne z JPG)
Zobacz dokument: http://www.imagemagick.org/Usage/masking/#remove
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-21 10:07:42
Sekcja Alpha Remove w ImageMagick Usage Guide sugeruje użycie opcji -alpha remove
, np.:
convert in.png -background white -alpha remove out.png
...używając wybranego przez Ciebie koloru -background
.
Przewodnik stwierdza:
Ta operacja jest prosta i szybka, i wykonuje swoją pracę bez potrzeby dodatkowego wykorzystania pamięci lub innych skutków ubocznych, które mogą być związane z alternatywnymi technikami usuwania przezroczystości. Jest to więc preferowany sposób usuwania obrazu przejrzystość.
Dodaje dodatkowo notkę:
Zauważ, że gdy przezroczystość jest 'usunięta', kanał alfa pozostanie włączony, ale będzie w pełni nieprzezroczysty. Jeśli nie potrzebujesz już kanału alfa, możesz go wyłączyć za pomocą wyłączonego kanału alfa.
Tak więc, jeśli nie potrzebujesz kanału alfa, możesz zmniejszyć rozmiar wyjściowego obrazu, dodając opcję -alpha off
, np:
convert in.png -background white -alpha remove -alpha off out.png
Jest więcej szczegółów na temat innych, często używanych techniki usuwania przezroczystości opisane w sekcji usuwanie przezroczystości z obrazów .
W tej sekcji jest wzmianka o ważnym zastrzeżeniu do stosowania -flatten
jako techniki usuwania przezroczystości:
Nie będzie to jednak działać z" mogrify "lub sekwencją wielu obrazów, ponieważ operator "- flatten " jest tak naprawdę zaprojektowany, aby łączyć wiele obrazów w jeden obraz.
Więc, jeśli konwertujesz kilka obrazów naraz, np. generowanie miniatur z pliku PDF, -flatten
nie zrobi tego, co chcesz (spłaszczy wszystkie obrazy dla wszystkich stron w jeden obraz). Z drugiej strony, użycie techniki -alpha remove
będzie nadal produkować wiele obrazów, z których każdy ma usuniętą przezroczystość.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-22 16:37:48
Oto jak zastąpić ten sam obraz we wszystkich folderach w katalogu białym zamiast przezroczystym:
mogrify -background white -flatten */*.png
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-28 04:04:31
Wygląda na to, że Twoje polecenie jest poprawne, więc problem może być spowodowany brakiem wsparcia dla PNG (). Możesz sprawdzić za pomocą convert -list configure
lub po prostu spróbować:
sudo yum install libpng libpng-devel
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-01 11:10:04
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:
mogrify -alpha off ./*.png
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-17 08:22:10
Welp wygląda na to, że moja decyzja o zainstalowaniu "graphics magick" nad "image magick" ma szorstkie krawędzie - po ponownym zainstalowaniu oryginalnego starego "image magick", powyższe polecenie działa doskonale.
edit , długo później-któregoś dnia sprawdzę ,czy "graphics magick" naprawił ten problem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-17 20:42:57
Tworzy to obraz po prostu umieszczając 1st z przezroczystością na górze 2nd
composite -gravity center ImgWithTransp.png BackgroundSameSizeOfImg.png ResultImg.png
Originally found the tip on this post
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-09 08:52:13
Aby usunąć kanał alfa z pliku, użyj opcji alpha off :
convert in.png -background white -alpha off out.png
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-09 15:41:49
Widziałem to pytanie i odpowiedzi, które naprawdę mi pomagają, ale potem musiałem to zrobić dla wielu plików, więc w przypadku, gdy masz wiele obrazów (obrazów PNG) w jednym folderze i chcesz to zrobić dla wszystkich:
find ./ -name "*.png" -exec convert {} -flatten {} \;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-12 15:52:19