Załóżmy, że masz dowolny obraz (PNG lub JPG). Ten obraz ma białe tło i muszę ustawić przezroczyste tło.
Próbowałem z tymi przykładami:
convert original.png -background none transparent.png
convert original.png -background white -flatten -alpha off transparent.png
ale bez pożądanych rezultatów.
Jak mam to zrobić?
WAŻNE: Korzystanie z convert
wiersza poleceń.
png
imagemagick
alpha-transparency
Izrael
źródło
źródło
convert original.png -transparent white new.png
ale po wypróbowaniu nie mogę go uruchomić. Na marginesie, czy jesteś pewien, że twoje tło jest rzeczywiście białe (#FFFFFF), czy jest po prostu prawie białe (np. #FEFEFE)?Odpowiedzi:
Używam ImageMagick 6.6.9-7 na Ubuntu 12.04.
U mnie zadziałało:
To zmieniło całą biel w test.png na przezroczystą.
źródło
Miałem ten sam problem. W którym muszę usunąć białe tło z formatu obrazu jpg / png za pomocą ImageMagick.
U mnie zadziałało:
1) Konwertuj format obrazu na png:
convert input.jpg input.png
2)
convert input.png -fuzz 2% -transparent white output.png
źródło
mogrify -format png -median 2 -fuzz 5% -transparent white ico_*.jpg
Rozwiązanie
Wyjaśnienie
Jest to trochę dłużej niż podane wcześniej proste odpowiedzi, ale daje znacznie lepsze wyniki: (1) Jakość jest lepsza dzięki wygładzeniu alfa i (2) tylko tło jest usuwane w przeciwieństwie do pojedynczego koloru. („Tło” jest definiowane jako w przybliżeniu taki sam kolor jak górny lewy piksel, przy użyciu wypełnienia z krawędzi obrazu).
Dodatkowo kanał alfa ulega erozji o pół piksela, aby uniknąć aureoli. Oczywiście operacje morfologiczne ImageMagicka nie działają (jeszcze?) Na poziomie subpikseli, więc widać, że przed erozją zwiększam kanał alfa do 200%.
Porównanie wyników
Oto porównanie prostego podejścia („-fuzz 2% -przezroczysty biały”) z moim rozwiązaniem, gdy jest uruchamiane z logo ImageMagick . Spłaszczyłem oba przezroczyste obrazy na siodłowo brązowym tle, aby różnice były widoczne (kliknij, aby zobaczyć oryginały).
Zwróć uwagę, jak broda czarodzieja zniknęła w prostym podejściu. Porównaj krawędzie kreatora, aby zobaczyć, w jaki sposób wygładzona alfa pomaga figurze płynnie wtapiać się w tło.
Oczywiście przyznaję, że są chwile, kiedy możesz chcieć skorzystać z prostszego rozwiązania. (Na przykład: jest o wiele łatwiejszy do zapamiętania, a jeśli konwertujesz na GIF, i tak jesteś ograniczony do 1-bitowej alfa).
Skrypt powłoki mktrans
Ponieważ jest mało prawdopodobne, abyś chciał wielokrotnie wpisywać to polecenie, zalecam zawinięcie go w skrypt. Możesz pobrać skrypt powłoki BASH z github, który wykonuje moje sugerowane rozwiązanie. Można go uruchomić na wielu plikach w katalogu i zawiera przydatne komentarze na wypadek, gdybyś chciał coś poprawić.
bg_removal script
Nawiasem mówiąc, ImageMagick zawiera skrypt o nazwie „bg_removal”, który używa funkcji floodfill w podobny sposób, jak moje rozwiązanie. Jednak wyniki nie są świetne, ponieważ nadal używa 1-bitowej alfa. Ponadto skrypt bg_removal działa wolniej i jest nieco trudniejszy w użyciu (wymaga określenia dwóch różnych wartości fuzz). Oto przykład danych wyjściowych z bg_removal.
źródło
gimp
ani w ogóle . :)To działa dla mnie:
gdzie im mniejszy% fuzz, tym bliżej do prawdziwej bieli lub odwrotnie, im większy procent, tym większe odchylenie od bieli może stać się przezroczyste
źródło
mktrans
skryptu powłoki: github.com/hackerb9/mktransMożesz użyć tego, aby uczynić tło przezroczystym
Powyższe daje prefektowi przezroczyste tło
źródło
()
:convert more-icon.png -gravity center -background 'rgba(0,0,0,0)' -extent 27x27 new-more-icon.png
Używając ImageMagick, jest to bardzo podobne do kodu i wyniku hackerb9, ale jest trochę prostszą linią poleceń. Zakłada się, że lewy górny piksel to kolor tła. Po prostu wypełniam tło przezroczystością, następnie wybieram kanał alfa i rozmywam go oraz usuwam połowę rozmytego obszaru za pomocą -level 50x100%. Następnie ponownie włącz wszystkie kanały i spłaszcz go w stosunku do brązowego koloru. -Blur 0x1 -poziom 50x100% działa antyialiasowo na granice przezroczystości kanału alfa. Możesz dostosować wartość rozmycia, wielkość rozmycia i wartość -level 50%, aby zmienić stopień wygładzania krawędzi.
źródło
Jeśli chcesz kontrolować poziom przezroczystości, możesz użyć rgba. gdzie a jest alfa. 0 dla przezroczystych i 1 dla nieprzezroczystych. Upewnij się, że końcowy plik wyjściowy musi mieć rozszerzenie .png, aby był przezroczysty.
źródło
Tak. Miałem ten sam problem. Oto polecenie, które uruchomiłem i zadziałało idealnie:
convert transparent-img1.png transparent-img2.png transparent-img3.png -channel Alpha favicon.ico
źródło