Qual è la migliore libreria / approccio per l'elaborazione delle immagini Java? [chiuso]


245

Sto usando sia le API multimediali JAI sia ImageMagick?

ImageMagick presenta alcuni problemi di scalabilità e anche JMagick basato su JNI non è attraente. JAI ha risultati di scarsa qualità quando si eseguono operazioni di ridimensionamento rispetto a ImageMagick.

Qualcuno conosce strumenti eccellenti sia open source che commerciali che sono nativi Java e forniscono risultati di alta qualità?


5
JMagick non ha quasi documentazione tranne i javadocs. Ho appena trascorso due ore a cercare qualcosa che avrebbe dovuto essere abbastanza facile da fare.
Alex Ciminian,

Infatti. Ho scelto di uscire dal processo e usare ImageMagick usando apache exec come mezzo per gestire il processo. Questo ha funzionato bene. Potrei essere arrivato al punto di costruire un server di immagini solo per questo scopo. È difficile trovare qualcosa con la qualità e la funzionalità di ImageMagick.
Daniel Honig,

158
È ridicolo che domande come questa vengano chiuse come fuori tema. Oltre 100000 visualizzazioni, è chiaramente una domanda che la gente si pone. A volte le persone non sanno esattamente tutto ciò che faranno in anticipo e apprezzerebbero le risposte "supposte" di altre persone sul miglior quadro generale. Troppa moderazione moderata su SO!
user467257,

12
Cosa c'è di sbagliato se le persone discutono dei pro e dei contro di un aspetto chiave della programmazione Java? Cosa non dovrebbe fare SO? IMHO, tali domande dovrebbero essere attentamente moderate e mantenute per fornire un buon riferimento agli sviluppatori che ricominciano da capo sull'argomento specifico.
Raúl,

20
Sì. Miglior risultato in Google per java image processing libraryma chiuso ... come al solito. La moderazione sta esagerando in questi giorni.
Stijn de Witt il

Risposte:


88

C'è ImageJ , che si vanta di essere il

il programma di elaborazione di immagini Java più veloce al mondo

Può essere utilizzato come libreria in un'altra applicazione. L'architettura non è brillante, ma svolge attività di elaborazione delle immagini di base.


2
Uso ImageJ come libreria in numerose applicazioni di elaborazione delle immagini. È una libreria Java decente. Si integra perfettamente anche con Java2D, quindi puoi mescolare e abbinare i 2 abbastanza facilmente.
Hohonuuli,

3
All'epoca in cui utilizzavo ImageJ, la sua API era piuttosto imbarazzante: è più un'applicazione per la quale puoi scrivere plugin che una libreria. E per quanto ricordo, provare a sviluppare una nuova GUI in quella vecchia base di codice AWT è stato un dolore.
Ivan,

4
Ho appena perso mezza giornata cercando di fare una semplice rotazione, ridimensionamento e ritaglio dell'immagine. È il 2019 e la documentazione di ImageJ non è utilizzabile.
M. Leonhard,

133

So che questa domanda è piuttosto vecchia, ma quando esce un nuovo software aiuta a ottenere alcuni nuovi collegamenti a progetti che potrebbero essere interessanti per la gente.

imgscalr è una libreria di ridimensionamento di immagini in puro Java (e operazioni semplici come riempimento, ritaglio, rotazione, schiarimento / attenuazione, ecc.) che è dolorosamente semplice da usare - una singola classe è costituita da un insieme di semplici operazioni grafiche tutte definite come metodi statici che si passa un'immagine e si ottiene un risultato.

L'esempio più basilare di utilizzo della libreria sarebbe simile al seguente:

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

E un uso più tipico per generare miniature di immagini usando alcune modifiche di qualità e simili potrebbe apparire così:

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);
}

Tutte le operazioni di elaborazione delle immagini utilizzano la pipeline Java2D non elaborata (che è accelerata dall'hardware sulle principali piattaforme) e non introdurranno il dolore di richiamare tramite il conflitto della libreria JNI come nel codice.

imgscalr è stato anche distribuito in produzioni su larga scala in parecchi posti - l'inclusione della classe AsyncScalr lo rende un perfetto drop-in per qualsiasi elaborazione di immagini sul lato server.

Esistono numerose modifiche alla qualità dell'immagine che è possibile utilizzare per bilanciare tra velocità e qualità con la massima modalità ULTRA_QUALITY che fornisce un risultato in scala che sembra migliore dell'implementazione Lancoz3 di GIMP.


@Riyad Kalla sembra interessante grazie ... Ma non capisco, può essere utilizzato in progetti commerciali?
user592704

2
@ user592704 Assolutamente, imgscalr è concesso in licenza con la licenza Apache 2; la stessa licenza tutto sotto Apache Foundation è concesso in licenza. Puoi prenderlo e fare quello che vuoi con esso in prodotti open source o commerciali. imgscalr è attualmente già distribuito in diverse app Web commerciali in produzione.
Riyad Kalla

1
@DavidParks Hai ragione, imgscalr è destinato a subentrare una volta che hai quell'istanza BufferedImage (dati immagine decodificati), non prima. Non volevo nemmeno prendere in considerazione l'idea di provare a fare i miei decodificatori / codificatori poiché quelle pipeline sono state accelerate da tempo dall'hardware sotto le coperte dal team Java2D, cercando di rifare tutto ciò che funziona senza errori e in modo efficiente sarebbe un'impresa erculea.
Riyad Kalla,

1
@gstackoverflow imgscalr opera sulle istanze di BufferedImage non elaborate (dati di immagine decodificati) - quindi qualcos'altro (in genere la libreria ImageIO) deve decodificare i dati di immagine codificati in BufferedImage e quindi ricodificarli in una nuova immagine una volta che imgscalr è operativo su di esso - metti in un altro modo "imgscalr non si preoccupa del formato del file, hai già decodificato l'immagine prima di passarla a imgscalr"
Riyad Kalla,

1
ImgScalr è utile solo per la manipolazione di base delle immagini. Se si tratta di caricamento ed elaborazione delle immagini. manca la complessità.
MarekM,

31

Un'altra buona alternativa: Marvin


9
Molte grazie. Mi hai salvato la giornata! : D (PS: non sono l'OP. Mi sono imbattuto in questo post mentre googling e mi fido di me, mi ha aiutato molto! (Ti comprerò una birra se ti incontrerò un giorno.)).
missingfaktor

3
@missingfaktor ora ti devo una birra. Anche la tua lode di Joseph mi ha salvato la giornata. Giuseppe, stai bevendo una birra troppo spesso :)!
Filip Dupanović,

3
Questo URL apparentemente non esiste più, ma marvinproject.sourceforge.net sembra essere il nuovo URL.
Amos M. Carpenter,

Ok, sono obbligato a dare un'occhiata a QUESTO. =)
Marvo,

Sembra davvero buono, ci proverò.
Ridcully,


8

L'elaborazione è nuova ma molto, molto buona.


1
Sono a conoscenza dell'elaborazione, ma la gente lo sta davvero usando in, mi piacerebbe eseguire la trasformazione X sulla mia libreria di moda di X jpeg?
Daniel Honig

L'ho usato e sembra davvero potente e vale la pena scommettere
fmsf

2
In realtà le librerie di base (che potrebbero essere utilizzate per integrare la funzionalità) sono LGPL. Ma nessuno ha chiesto quale sia la licenza. wiki.processing.org/w/…
Benjamin Atkin

5

Prova a usare Catalano Framework .

Punti chiave:

  • Architettura come AForge.NET/Accord.NET.
  • Esegui in entrambi gli ambienti con lo stesso codice, desktop e Android.
  • Contiene diversi filtri in parallelo.
  • Lo sviluppo è a tutto vapore.

Il Catalano Framework è un framework per il calcolo scientifico per Java e Android. Il progetto è iniziato come una porta iniziale delle numerose funzionalità dei framework AForge.NET e Accord.NET per .NET, ma è in costante crescita con funzionalità più avanzate che vengono ora condivise tra tali progetti.

Esempio:

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 Frameworksembra che tu stia pubblicizzando il tuo prodotto. Il tuo framework potrebbe essere eccezionale, ma dovresti rivelare la tua affiliazione con esso, come indicato nelle FAQ .
Matthias Braun,

@MatthiasBraun OK, sono d'accordo con te, non lo sapevo. Ho modificato la risposta.
Diego Catalano

1
Catalano Framework è passato a github.com/DiegoCatalano/Catalano-Framework
HairOfTheDog

4

imo l'approccio migliore sta usando GraphicsMagick Image Processing System con im4java come interfaccia a riga di comando per Java.

GraphicsMagick offre molti vantaggi, ma uno per tutti:

  • GM viene utilizzato per elaborare miliardi di file nei siti di foto più grandi del mondo (ad esempio Flickr ed Etsy).

è solo un wrapper a riga di comando - non una libreria ....
Kulpemovitz

3

http://im4java.sourceforge.net/ - se stai eseguendo Linux biforcando un nuovo processo non è costoso.


Fai attenzione agli errori di memoria insufficiente ...
Claes Mogren,

il fork è costoso. Può usare molta memoria. Vedi la citazione della persona da un articolo in fondo a coderanch.com/t/419196/java/java/there-any-way-execute-Linux (L'articolo è: developers.sun.com/solaris/articles/subprocess/subprocess .html )
Plaudit Design

@Plaudit checkout gm4java, crea un pool di processi GM in modalità interattiva e non è necessario eseguire il fork ogni volta per convertire un'immagine. kennethxu.blogspot.com/2013/04/…
Kenneth Xu

2

Per gli strumenti commerciali, potresti provare Snowbound.

http://www.snowbound.com/

La mia esperienza con loro è in qualche modo datata, ma ho trovato la loro API di imaging Java molto più facile da usare rispetto a JAI e molto più veloce.

Anche il supporto clienti e gli esempi di codice erano molto buoni.



1

Non posso dire che sia la libreria "migliore", ma penso che tu possa provare questo: http://algart.net/java/AlgART/ È una libreria Java open source che supporta array e matrici "intelligenti" generalizzati con elementi di diversi tipi (da 1 bit a 64 bit in virgola mobile), tra cui l'elaborazione di immagini 2D, 3D e multidimensionali e altri algoritmi, lavorando con matrici e matrici. Sfortunatamente in questo momento non contiene abbastanza demo ed esempi, ma, d'altra parte, contiene molti JavaDocs. Rimase alla base del software commerciale (SIMAGIS) per diversi anni, ma ora è open-source.


2
Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il collegamento come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia.
Matthias,

Hai ragione, ho modificato il primo commento.
Daniel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.