Tomasz Zadora

Tomasz Zadora programuję

Temat: Java konwersja PNG do JPG

Witam,

poszukuję kodu w Javie który dokona konwersji obrazka z formatu PNG do JPG.

Żadne znalezione rozwiązania w sieci u mnie nie działają, czyli np.:

http://blog.codebeach.com/2007/06/convert-png-to-jpg-i...
http://stackoverflow.com/questions/464825/converting-t...
http://forums.java.net/jive/thread.jspa?messageID=277097

Ludzie tam piszą, że im działa, mi jednak nie - być może z powodu specyficznych PNG które muszę skonwertować.

Nie chcę też tego rozwiązywać np. przy pomocy jakiegoś zewnętrznego konwertera odpalanego z linii komend - czyli takiego którego można by kontrolować przy pomocy Javy (jednakże konwersja takim narzędziem się udaje).

Wiem, że da się to zrobić przy pomocy standardowych pakietów javy (java.awt.*, java.awt.image.*), dlatego używanie jakichś "grubych" bibliotek graficznych tylko do tej operacji też mija się z celem.

W javie programuje generalnie server-side (J2EE/Servlety) i po prostu szkoda mi spędzać cały dzień albo dłużej na dokładnym czytaniu tutoriala Java 2D, zapoznawaniu się z rastrami, modelami kolorów etc., kiedy potrzebuję tego tylko do małej rzeczy/projektu.

Jeżeli ktoś zna adres dobrego sprawdzonego kodu, albo może go tutaj wrzucić to było by bosko.Tomasz Zadora edytował(a) ten post dnia 04.01.10 o godzinie 16:39

konto usunięte

Temat: Java konwersja PNG do JPG

Opisz może co nie działa Ci w tych przykładach z forów, może będziemy w stanie Ci pomóc.
Aleksander Lech

Aleksander Lech Architekt rozwiązań

Temat: Java konwersja PNG do JPG

Sprubuj za pomocą pakietu ImageIO wczytać obraz PNG z dysku do instancji BufferedImage a następnie również przy pomocy ImageIO zapisz obraz przy użyciu metody:

ImageIO.write(RenderedImage im, String formatName, File output)

gdzie formatName to "jpg". Powinno działać, ja przy tej pomocy generowałem miniaturki z wszystkich formatów i zapisywałem jako JPEG.
Tomasz Zadora

Tomasz Zadora programuję

Temat: Java konwersja PNG do JPG

@Aleksander Lech - tak to jest 1sza rzecz którą zrobiłem, nie działa:
//Create file for the source
File input = new File("c:/temp/image.png");

//Read the file to a BufferedImage
BufferedImage image = ImageIO.read(input);

//Create a file for the output
File output = new File("c:/temp/image.jpg");

//Write the image to the destination as a JPG
ImageIO.write(image, "jpg", output);

@Andrzej Klusiewicz:

Efekt wszystkich prób jest ten sam: tworzy się JPG z oryginalnym obrazem ale jest on "obleczony" pomarańczową powłoką - tak jakby ktoś "przejechał" go filtrem.

Nie wiem czy wynika to ze specyficznego kanału Alpha w PNG, czy jakiejś dodatkowej warstwy.

Szukam kogoś kto miał podobny problem i podzieliłby się kodem który to rozwiązuje.Tomasz Zadora edytował(a) ten post dnia 04.01.10 o godzinie 13:17

konto usunięte

Temat: Java konwersja PNG do JPG

IMO to nie jest kwestia *specyficznego* kanału alfa, ale raczej faktu, że jpg kanału alpha nie posiada. Spróbuj przerysować obrazek ręcznie - utwórz nowy BufferedImage o takich samych rozmiarach i type RGB a nie ARGB. wywołaj getGraphics() potem na tym obiekcie paintImage(orgImage, ...), potem dispose, potem write jak w poprzednim przypadku.

Trochę to nieskładne, wiem. Ale mam nadzieję, że Ci się uda.
Tomasz Zadora

Tomasz Zadora programuję

Temat: Java konwersja PNG do JPG

Dzięki za dobre słowo, to co piszesz nie jest nieskładne, ale w takim stylu to także nie wychodzi - w przykładach które podałem na początku też były wymienione tego typu sposoby.

Z tym, że kierunek który podałeś na pewno jest dobry, ale samo stworzenie nowego obrazka w modelu kolorów RGB i narysowanie na nim (przy pomocy Graphics2D) PNG, nie wystarcza, efekt jest zawsze taki sam.

Na ten moment wydaje mi się, że te pliki PNG z którymi mam do czynienia być może posiadają dodatkową warstwę i z tym standardowe rozwiązania stosowane w takich przypadkach sobie nie radzą.

Wizualizacja problemu:

PNG:

Obrazek


JPG po obróbce przez jave:

Obrazek

konto usunięte

Temat: Java konwersja PNG do JPG

A czy próbowałeś wyświetlać ten jpg po wczytaniu? Może już na etapie wczytywania jest błąd?

Upewnij się też, że masz najnowszy fixpack javy, coś mi świta, że było ostatnio poprawiane coś dotyczące właśnie pngów.
Tomasz Zadora

Tomasz Zadora programuję

Temat: Java konwersja PNG do JPG

SUKCES!

Po zainstalowaniu wersji "_017" i zmianie typu z ARGB na RGB.

Dziękuje.

Następna dyskusja:

Programista JAVA pilnie pos...




Wyślij zaproszenie do