Jaka jest najlepsza biblioteka / podejście do przetwarzania obrazów Java? [Zamknięte]


245

Korzystam zarówno z interfejsu API JAI, jak i ImageMagick?

ImageMagick ma pewne problemy ze skalowalnością, a JMagick oparty na JNI również nie jest atrakcyjny. JAI ma słabą jakość wyników podczas operacji zmiany rozmiaru w porównaniu do ImageMagick.

Czy ktoś wie o doskonałych narzędziach open source lub komercyjnych, które są rodzimymi językami Java i zapewniają wysoką jakość wyników?


5
JMagick nie ma prawie żadnej dokumentacji oprócz javadocs. Właśnie spędziłem dwie godziny na poszukiwaniu czegoś, co powinno być dość łatwe do zrobienia.
Alex Ciminian

W rzeczy samej. Zdecydowałem się po prostu wyjść z procesu i użyć ImageMagick za pomocą apache exec jako sposobu zarządzania procesem. To działało dobrze. Mogłem posunąć się nawet do zbudowania serwera obrazów tylko w tym celu. Trudno jest znaleźć coś z jakością i funkcjonalnością ImageMagick.
Daniel Honig,

158
To niedorzeczne, że tego typu pytania są zamykane jako nie na temat. Ponad 100 000 wyświetleń, to jest pytanie, które ludzie zadają. Czasami ludzie nie wiedzą dokładnie wszystkiego, co zamierzają zrobić z góry, i doceniliby reakcje innych ludzi na najlepsze ogólne ramy. Zbyt wiele imponujących moderacji na SO!
user467257

12
Co jest złego, jeśli ludzie omawiają zalety i wady sposobów kluczowego aspektu programowania Java? Czy to, co SO powinno zrobić? IMHO, takie pytania powinny być starannie moderowane i utrzymywane, aby zapewnić dobre odniesienie dla programistów rozpoczynających od nowa na dany temat.
Raúl

20
Tak. Najlepszy wynik w Google, java image processing libraryale zamknięty ... jak zwykle. W dzisiejszych czasach moderacja zaczyna się przesadzać.
Stijn de Witt

Odpowiedzi:


88

Istnieje ImageJ , który może się poszczycić

najszybszy na świecie program do przetwarzania obrazów w czystej technologii Java

Może być używany jako biblioteka w innej aplikacji. Jego architektura nie jest genialna, ale wykonuje podstawowe zadania przetwarzania obrazu.


2
Używam ImageJ jako biblioteki w wielu aplikacjach do przetwarzania obrazów. To bardzo przyzwoita biblioteka Java. Ładnie integruje się również z Java2D, więc możesz łatwo miksować i dopasowywać 2.
hohonuuli

3
W chwili, gdy korzystałem z ImageJ, jego interfejs API był dość niezręczny. Jest to raczej aplikacja, dla której możesz pisać wtyczki niż biblioteka. I o ile pamiętam, próby opracowania nowego GUI w starej bazie kodu AWT były uciążliwe.
Ivan

4
Właśnie zmarnowałem pół dnia, próbując wykonać prosty obrót obrazu, skalowanie i kadrowanie. Jest rok 2019, a dokumentacja ImageJ nie jest użyteczna.
M. Leonhard

133

Wiem, że to pytanie jest dość stare, ale kiedy pojawia się nowe oprogramowanie, pomaga uzyskać nowe linki do projektów, które mogą być interesujące dla ludzi.

imgscalr to biblioteka do skalowania obrazów w czystej Javie (i proste operacje, takie jak wypełnianie, kadrowanie, obracanie, rozjaśnianie / ściemnianie itp.) Biblioteka, która jest niezwykle prosta w użyciu - pojedyncza klasa składa się z zestawu prostych operacji graficznych zdefiniowanych jako statyczne metody, które przekazujesz obraz i odzyskujesz wynik.

Najbardziej podstawowy przykład użycia biblioteki wygląda następująco:

BufferedImage thumbnail = Scalr.resize(image, 150);

A bardziej typowe użycie do generowania miniatur obrazów przy użyciu kilku poprawek jakości i tym podobnych może wyglądać następująco:

import static org.imgscalr.Scalr.*;

public static BufferedImage createThumbnail(BufferedImage img) {
    // Create quickly, then smooth and brighten it.
    img = resize(img, Method.SPEED, 125, OP_ANTIALIAS, OP_BRIGHTER);

    // Let's add a little border before we return result.
    return pad(img, 4);
}

Wszystkie operacje przetwarzania obrazu wykorzystują nieprzetworzony potok Java2D (który jest przyspieszany sprzętowo na głównych platformach) i nie wprowadzą bólu wywołania za pomocą JNI, podobnie jak rywalizacja o bibliotekę w kodzie.

Imgscalr został również wdrożony w dużych produkcjach w kilku miejscach - włączenie klasy AsyncScalr sprawia, że ​​jest to idealne narzędzie do przetwarzania obrazu po stronie serwera.

Istnieje wiele drobnych poprawek jakości obrazu, których możesz użyć, aby dokonać kompromisu między szybkością a jakością, dzięki najwyższemu trybowi ULTRA_QUALITY, który zapewnia skalowany wynik, który wygląda lepiej niż implementacja Lancoz3 GIMP.


@Riyad Kalla to wydaje się interesujące dzięki ... Ale nie rozumiem, czy można go wykorzystać w projektach komercyjnych?
user592704

2
@ user592704 Oczywiście, imgscalr jest licencjonowany na licencji Apache 2; ta sama licencja, wszystko na licencji Apache Foundation jest licencjonowane. Możesz go wziąć i robić, co chcesz, w produktach open source lub komercyjnych. Imgscalr jest już wdrożony w wielu komercyjnych aplikacjach internetowych w produkcji.
Riyad Kalla

1
@DavidParks Masz rację, imgscalr ma przejąć kontrolę, gdy tylko będziesz mieć instancję BufferedImage (zdekodowane dane obrazu), a nie wcześniej. Nie chciałem nawet rozważać pójścia ścieżką próbowania tworzenia własnych dekoderów / koderów, ponieważ te potoki od dawna są przyspieszane sprzętowo pod przykryciem przez zespół Java2D - próbując przerobić wszystko, co działa bezbłędnie i wydajnie byłoby przedsięwzięciem herkulesowym.
Riyad Kalla

1
@gstackoverflow imgscalr działa na surowych instancjach BufferedImage (zdekodowane dane obrazu) - więc coś innego (zazwyczaj biblioteka ImageIO) musi zdekodować zakodowane dane obrazu do BufferedImage, a następnie ponownie zakodować je do nowego obrazu po zakończeniu działania imgscalr na nim - inaczej: „imgscalr nie dba o format pliku, już zdekodowałeś obraz, zanim podałeś go imgscalr”
Riyad Kalla

1
ImgScalr nadaje się tylko do podstawowej manipulacji obrazem. Jeśli chodzi o ładowanie i przetwarzanie obrazu. brakuje mu złożoności.
MarekM

31

Kolejna dobra alternatywa: Marvin


9
Wielkie dzięki. Uratowałeś mi dzień! : D (PS: Nie jestem OP. Natknąłem się na ten post podczas googlowania i zaufaj mi, bardzo mi pomógł! (Kupię ci piwo, jeśli kiedyś cię spotkam.)).
missingfaktor

3
@missingfaktor teraz jestem ci winien piwo. Wasze uwielbienie dla Józefa właśnie uratowało mi dzień. Joseph, ty też pijesz piwo :)!
Filip Dupanović

3
Ten adres URL najwyraźniej już nie istnieje, ale marvinproject.sourceforge.net wydaje się być nowym adresem URL.
Amos M. Carpenter

Okej, jestem trochę zobowiązany rzucić okiem NA TEN. =)
Marvo,

Wygląda naprawdę dobrze, spróbuje.
Ridcully,


8

Przetwarzanie jest nowe, ale bardzo, bardzo dobre.


1
Jestem świadomy przetwarzania, ale czy ludzie naprawdę używają go w, chciałbym uruchomić transformację X w mojej bibliotece stylu X JPEG?
Daniel Honig

Użyłem go i wydaje się naprawdę potężny i warty obstawiania
fmsf

2
Właściwie podstawowymi bibliotekami (które mogłyby być wykorzystane do wbudowania funkcji) są LGPL. Ale nikt nie pytał, jaka jest licencja. wiki.processing.org/w/…
Benjamin Atkin

5

Spróbuj użyć Catalano Framework .

Kluczowe punkty:

  • Architektura taka jak AForge.NET/Accord.NET.
  • Uruchom w obu środowiskach z tym samym kodem, na komputerze stacjonarnym i systemie Android.
  • Zawiera kilka filtrów równolegle.
  • Rozwój jest w pełni.

Catalano Framework to framework do obliczeń naukowych dla Java i Androida. Projekt rozpoczął się jako początkowy port wielu funkcji frameworków AForge.NET i Accord.NET dla platformy .NET, ale stale się rozwija wraz z bardziej zaawansowanymi funkcjami, które są obecnie udostępniane między tymi projektami.

Przykład:

FastBitmap fb = new FastBitmap(bitmap);

Grayscale g = new Grayscale();
g.applyInPlace(fb);

Threshold t = new Threshold(120);
t.applyInPlace(fb);

bitmap = fb.toBitmap();

//Show the result

6
The best framework in Java is Catalano Frameworkbrzmi to tak, jakbyś reklamował swój własny produkt. Twoje ramy mogą być świetne, ale powinieneś ujawnić swoją przynależność do nich, jak podano w FAQ .
Matthias Braun

@MatthiasBraun OK, zgadzam się z tobą, nie wiedziałem o tym. Zredagowałem odpowiedź.
Diego Catalano

1
Catalano Framework został przeniesiony na github.com/DiegoCatalano/Catalano-Framework
HairOfTheDog

4

imo najlepszym podejściem jest użycie GraphicsMagick Image Processing System z im4java jako interfejsu linii poleceń dla Java.

GraphicsMagick ma wiele zalet, ale jedna dla wszystkich:

  • GM służy do przetwarzania miliardów plików na największych światowych stronach fotograficznych (np. Flickr i Etsy).

to tylko opakowanie linii poleceń - nie biblioteka ....
Kulpemovitz

3

http://im4java.sourceforge.net/ - jeśli używasz Linuksa, rozwidlenie nowego procesu nie jest drogie.


Uważaj jednak na błędy braku pamięci ...
Claes Mogren

rozwidlenie jest drogie. Może zużywać dużo pamięci. Zobacz cytat osoby z artykułu na dole coderanch.com/t/419196/java/java/there-any-way-execute-Linux (Artykuł to: developers.sun.com/solaris/articles/subprocess/subprocess .html )
Plaudit Design

@Plaudit checkout gm4java, tworzy pulę procesu GM w trybie interaktywnym i nie musi rozwidlać się za każdym razem, aby przekonwertować obraz. kennethxu.blogspot.com/2013/04/…
Kenneth Xu

2

W przypadku narzędzi komercyjnych możesz wypróbować Snowbound.

http://www.snowbound.com/

Moje doświadczenia z nimi są nieco przestarzałe, ale zauważyłem, że ich Java Imaging API jest o wiele łatwiejszy w obsłudze niż JAI i znacznie szybszy.

Ich obsługa klienta i próbki kodu również były bardzo dobre.



1

Nie mogę powiedzieć, że jest to „najlepsza” biblioteka, ale myślę, że możesz spróbować: http://algart.net/java/AlgART/ Jest to biblioteka Java typu open source, obsługująca uogólnione „inteligentne” tablice i macierze elementy różnych typów (od 1 do 64-bitowych liczb zmiennoprzecinkowych), w tym przetwarzanie obrazów 2D, 3D i wielowymiarowe oraz inne algorytmy, pracujące z tablicami i macierzami. Niestety w tej chwili nie zawiera wystarczającej liczby wersji demo i przykładów, ale z drugiej strony zawiera dużo JavaDoców. Przez kilka lat leżał w bazie oprogramowania komercyjnego (SIMAGIS), ale teraz jest oprogramowaniem typu open source.


2
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest dołączyć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie.
Matthias,

Masz rację, zredagowałem pierwszy komentarz.
Daniel
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.