naprawdę polecam dając wygląd: imgscalr.
jest wydany na licencji Apache 2, gościł na GitHub, zostały rozmieszczone w kilku już aplikacji internetowych, ma bardzo prosty, ale pedantically documented API ma kod, który działa około 2 poważnych błędów graficznych w JDK dla Ciebie przejrzysty że zauważysz tylko, jeśli nagle zaczniesz otrzymywać "czarne" obrazy po operacji skalowania lub okropnie wyglądających wynikach, uzyskasz najlepsze możliwe wyniki dostępne w Javie, jest dostępna przez Mavena, a także ZIP i jest po prostu jedna klasa.
Podstawowe użycie wygląda następująco:
BufferedImage img = ImageIO.read(...); // load image
BufferedImage scaledImg = Scalr.resize(img, 320);
Jest to najprostsza rozmowa gdzie biblioteka wykorzysta najlepiej odgadnąć jakości, honorować swoje proporcje obrazu i dopasować wynik w oknie 320x320 ograniczenia. UWAGA, ramka ograniczająca jest po prostu maksymalną wartością W/H, ponieważ proporcje obrazu są honorowane, wynikowy obraz nadal będzie honorował to, powiedzmy 320x200.
Jeśli chcesz zastąpić tryb automatyczny i zmusić go do uzyskania najlepszego wyniku, a nawet zastosować bardzo łagodny filtr antyaliasingowy, aby wyglądał jeszcze lepiej (szczególnie dobrze dla miniatur), to połączenie będzie wyglądać następująco:
BufferedImage img = ImageIO.read(...); // load image
BufferedImage scaledImg = Scalr.resize(img, Method.QUALITY,
150, 100, Scalr.OP_ANTIALIAS);
Są to tylko przykłady, API jest szeroki i obejmuje wszystko, od bardzo prostych przypadków użycia do bardzo specjalistycznych.Możesz nawet przekazać swoje własne BufferedImageOps, które mają być zastosowane do obrazu (a biblioteka automatycznie naprawi dla ciebie sześcioletni błąd BufferedImageOp JDK!).
Jest dużo więcej rzeczy do skalowania obrazów w Javie z powodzeniem, że biblioteka robi dla ciebie, na przykład zawsze utrzymując obraz w jednym z najlepiej obsługiwanych typów obrazu RGB lub ARGB podczas pracy na nim. Pod pokrywami potok przetwarzania obrazu Java2D cofa się do gorszego oprogramowania, jeśli typ obrazu wykorzystywany do jakichkolwiek operacji na obrazie jest słabo obsługiwany.
Jeśli wszystko to brzmi jak ból głowy, to jest coś takiego ... dlatego napisałem bibliotekę i otworzyłem ją, więc ludzie mogli zmienić rozmiar swoich zdjęć i przejść do ich życia bez konieczności martwienia się o to.
Nadzieję, że pomaga.
Podany przykład dotyczy 'getScaledInstance()', a nie AffineTransform. Więc co to jest? Czytałem mieszane recenzje, że 'getScaledInstance' nie jest tak wydajne ... – gdbj