Jak przekonwertować folder .pngs na .jpgs, ustawiając kolor tła?

10

Mam folder plików png z przezroczystym tłem. Chciałbym przekonwertować je z wiersza poleceń i zachować przezroczyste tło obrazów.

Byłbym wdzięczny za wszelką pomoc.

Ponieważ pliki JPG nie obsługują przezroczystości, w jaki sposób mogę określić wartość szesnastkową wyjściowego koloru tła JPG? Teraz domyślnie jest to #ffffff? Próbowałem tego skryptu, ale daje wyjściowe jpgs białe tło:

mogrify -quality 100 -format jpg *.png

Aktualizacja

Te pliki png utworzyłem w inkscape. Powinienem wspomnieć, że moim celem w konwersji tych pngs do jpgs jest pozbycie się postrzępionych krawędzi na obiektach okrągłych lub kątowych. Pliki PNG mają obecnie postrzępione krawędzie i czytam, że konwersja ich do plików JPG może rozwiązać ten problem. Jednak konwersja metodą opisaną w odpowiedzi Christiana Skjødta daje obrazom jeszcze gorsze postrzępione krawędzie. Czy istnieje sposób, w jaki mogę przekonwertować pliki PNG na JPG, a także zastosować wygładzanie krawędzi lub inną technikę, aby pozbyć się postrzępionych krawędzi? Dzięki za pomoc.

James
źródło
3
Trudno jest odpowiedzieć na twoje pytanie, jeśli zmienia się ono cały czas ... Do wykorzystania w przyszłości: Spróbuj uwzględnić w swoim pytaniu to, co chcesz osiągnąć od samego początku. Re twoja „aktualizacja 2”: Czy „postrzępienie” jest po prostu wynikiem wybranej rozdzielczości? Co się stanie, jeśli zwiększysz rozdzielczość (liczbę DPI w oknie dialogowym „Eksportuj mapę bitową ...”)?
Marcel Stimberg

Odpowiedzi:

3

Aby wygładzić krawędzie, możesz utworzyć pliki PNG 10 razy większe niż docelowy rozmiar, a następnie zmienić rozmiar z wygładzaniem do JPG. Zrobiłem to za pomocą Pythona i Biblioteki obrazowania Python z dobrym skutkiem, ale nie jestem pewien, jak to zrobić za pomocą innych narzędzi.

Brousch
źródło
28

Format JPEG nie obsługuje przezroczystości - dlatego utrzymanie przezroczystego tła nie jest możliwe, jeśli chcesz (lub musisz) użyć formatu JPEG. Zobacz Wikipedię, aby zapoznać się z możliwościami różnych formatów obrazów.

Należy pamiętać, że JPEG 2000 rzeczywiście obsługuje przezroczystość, ale jest znacznie mniej powszechny niż format JPEG. To, czy jest to realna alternatywa, zależy od przypadku użycia.

Marcel Stimberg
źródło
Mogę się mylić, ale OP pyta o ustawienie koloru, w jakim będą tworzone przezroczyste obszary. Robi się je białymi, ale OP może na przykład użyć niebieskiego.
nanofarad
16

Na twoje drugie pytanie:

Aby określić kolor tła podczas konwersji obrazów, możesz użyć -fillopcji:

mogrify -quality 100 -format jpg -fill "#FF0000" -opaque none *.png

Korzystanie -backgroundzapewnia podobne wyniki. Nie zapomnij -opaque none.

Christian Skjødt
źródło
Hej, dzięki za pomoc. Czy jest jakiś sposób na antyializację wyjściowego JPEG za pomocą tego polecenia? Dodatkowy kontekst zawiera aktualizacja 2 powyżej. Dzięki.
James
4

Przykro mi, nie ma mowy, jpegformat nie obsługuje, alpha channelwięc nie możesz mieć przezroczystości.

Pan Shunz
źródło
0

w zależności od tego, co próbujesz zrobić z obrazem, może być możliwe ustawienie kanału alfa na osobny obraz w skali szarości lub na maskę bitów, a program, który używa obrazu zastosuje obraz pomocniczy jako wartości półprzezroczyste / przezroczyste . Chociaż ostatecznie lepiej jest zmodyfikować program, aby obsługiwał alpha png.

Lie Ryan
źródło