Quelle est la meilleure bibliothèque / approche de traitement d'images Java? [fermé]


245

J'utilise à la fois les API médias JAI et ImageMagick?

ImageMagick a quelques problèmes d'évolutivité et le JMagick basé sur JNI n'est pas non plus attrayant. JAI a des résultats de mauvaise qualité lors des opérations de redimensionnement par rapport à ImageMagick.

Est-ce que quelqu'un connaît d'excellents outils open source ou commerciaux qui sont natifs java et fournissent des résultats de haute qualité?


5
JMagick n'a presque aucune documentation à l'exception des javadocs. Je viens de passer deux heures à chercher quelque chose qui aurait dû être assez facile à faire.
Alex Ciminian

En effet. J'ai choisi de sortir du processus et d'utiliser ImageMagick en utilisant Apache Exec comme moyen de gérer le processus. Cela a bien fonctionné. J'aurais peut-être été jusqu'à construire un serveur d'images juste à cet effet. Il est difficile de trouver quelque chose avec la qualité et la fonctionnalité d'ImageMagick.
Daniel Honig

158
Il est ridicule que des questions comme celle-ci soient fermées comme hors sujet. Plus de 100 000 visionnements, c'est clairement une question que les gens se posent. Parfois, les gens ne savent pas exactement tout ce qu'ils vont faire à l'avance et apprécieraient les réponses «d'opinions» des autres sur le meilleur cadre général. Trop de modération grandiose sur SO!
user467257

12
Quel est le problème si les gens discutent des avantages et des inconvénients des moyens d'un aspect clé de la programmation Java? N'est-ce pas ce que SO est censé faire? À mon humble avis, ces questions doivent être soigneusement modérées et maintenues pour fournir une bonne référence aux développeurs qui recommencent sur le sujet particulier.
Raúl

20
Ouaip. Meilleur résultat dans Google pour java image processing librarymais fermé ... comme d'habitude. La modération va trop loin sur SO ces jours-ci.
Stijn de Witt

Réponses:


88

Il y a ImageJ , qui se vante d'être le

Le programme de traitement d'images Java pur le plus rapide au monde

Il peut être utilisé comme bibliothèque dans une autre application. Son architecture n'est pas brillante, mais elle effectue des tâches de traitement d'image de base.


2
J'utilise ImageJ comme bibliothèque dans un certain nombre d'applications de traitement d'image. C'est une bibliothèque Java très décente. Il s'intègre bien avec Java2D, vous pouvez donc mélanger et assortir les 2 assez facilement.
hohonuuli

3
À l'époque où j'utilisais ImageJ, son API était assez maladroite, c'est plus une application pour laquelle vous pouvez écrire des plugins qu'une bibliothèque. Et pour autant que je m'en souvienne, essayer de développer une nouvelle interface graphique dans cette ancienne base de code AWT était pénible.
Ivan

4
Je viens de perdre une demi-journée à essayer de faire une simple rotation d'image, une échelle et un recadrage. Nous sommes en 2019 et la documentation d'ImageJ n'est pas utilisable.
M. Leonhard

133

Je sais que cette question est assez ancienne, mais à mesure que de nouveaux logiciels sortent, cela aide à obtenir de nouveaux liens vers des projets qui pourraient être intéressants pour les gens.

imgscalr est une bibliothèque de redimensionnement d'images en Java pur (et d'opérations simples comme le remplissage, le recadrage, la rotation, l'éclaircissement / la gradation, etc.) qui est douloureusement simple à utiliser - une seule classe se compose d'un ensemble d'opérations graphiques simples toutes définies comme des méthodes statiques qui vous passez une image et obtenez un résultat.

L'exemple le plus élémentaire d'utilisation de la bibliothèque ressemblerait à ceci:

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

Et une utilisation plus typique pour générer des miniatures d'images en utilisant quelques réglages de qualité et similaires pourrait ressembler à ceci:

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

Toutes les opérations de traitement d'image utilisent le pipeline Java2D brut (qui est accéléré par le matériel sur les principales plates-formes) et n'introduiront pas la douleur d'appeler via JNI comme un conflit de bibliothèque dans votre code.

imgscalr a également été déployé dans des productions à grande échelle dans de nombreux endroits - l'inclusion de la classe AsyncScalr en fait une solution idéale pour tout traitement d'image côté serveur.

Il existe de nombreux ajustements à la qualité d'image que vous pouvez utiliser pour faire le compromis entre la vitesse et la qualité avec le mode ULTRA_QUALITY le plus élevé fournissant un résultat à l'échelle qui semble meilleur que l'implémentation Lancoz3 de GIMP.


@Riyad Kalla cela semble intéressant merci ... Mais je ne comprends pas, peut-il être utilisé dans des projets commerciaux?
user592704

2
@ user592704 Absolument, imgscalr est sous licence Apache 2; la même licence, tout à la Fondation Apache est sous licence. Vous pouvez le prendre et faire ce que vous voulez avec lui dans des produits open source ou commerciaux. imgscalr est en fait déjà déployé dans un certain nombre d'applications Web commerciales en production.
Riyad Kalla, le

1
@DavidParks Vous avez raison, imgscalr est censé prendre le relais une fois que vous avez cette instance BufferedImage (données d'image décodées), pas avant. Je ne voulais même pas envisager de tenter de faire mes propres décodeurs / encodeurs car ces pipelines ont été accélérés depuis longtemps sous les couvertures par l'équipe Java2D - essayant de refaire tout ce travail sans bug et efficacement serait une entreprise herculéenne.
Riyad Kalla

1
@gstackoverflow imgscalr fonctionne sur les instances brutes de BufferedImage (données d'image décodées) - donc quelque chose d'autre (généralement la bibliothèque ImageIO) doit décoder les données d'image codées en BufferedImage, puis les réencoder en une nouvelle image une fois qu'imgscalr a fini de fonctionner dessus - autrement dit "imgscalr ne se soucie pas du format de fichier, vous avez déjà décodé l'image avant de la remettre à imgscalr"
Riyad Kalla

1
ImgScalr n'est bon que pour la manipulation d'image de base. S'il s'agit de chargement et de traitement d'images. il lui manque le complexicit.
MarekM

31

Une autre bonne alternative: Marvin


9
Merci beaucoup. Tu m'as sauvé la journée! : D (PS: je ne suis pas l'OP. Je suis tombé sur ce post en cherchant sur Google et en me faisant confiance, ça m'a beaucoup aidé! (Je t'achèterai une bière si je te rencontre un jour.)).
missingfaktor

3
@missingfaktor maintenant je te dois une bière. Votre louange de Joseph vient aussi de me sauver la vie. Joseph, tu prends trop de bière :)!
Filip Dupanović

3
Cette URL n'existe apparemment plus, mais marvinproject.sourceforge.net semble être la nouvelle URL.
Amos M. Carpenter

D'accord, je suis en quelque sorte obligé de jeter un coup d'œil à celui-ci. =)
Marvo

Semble vraiment bien, va essayer.
Ridcully


8

Le traitement est nouveau mais très, très bon.


1
Je suis au courant du traitement, mais les gens l'utilisent-ils vraiment dans le, je voudrais aller exécuter la transformation X sur ma bibliothèque du genre de mode X jpeg?
Daniel Honig

Je l'ai utilisé et semble vraiment puissant et mérite d'être parié
fmsf

2
En fait, les bibliothèques de base (qui pourraient être utilisées pour incorporer des fonctionnalités) sont LGPL. Mais personne n'a demandé quelle était la licence. wiki.processing.org/w/…
Benjamin Atkin

5

Essayez d'utiliser Catalano Framework .

Points clés:

  • Architecture comme AForge.NET/Accord.NET.
  • Exécutez dans les deux environnements avec le même code, le même ordinateur de bureau et Android.
  • Contient plusieurs filtres en parallèle.
  • Le développement bat son plein.

Le Catalano Framework est un framework pour le calcul scientifique pour Java et Android. Le projet a commencé comme un port initial des nombreuses fonctionnalités des frameworks AForge.NET et Accord.NET pour .NET, mais croît régulièrement avec des fonctionnalités plus avancées qui sont désormais partagées entre ces projets.

Exemple:

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 Frameworkcela ressemble à de la publicité pour votre propre produit. Votre cadre peut être génial, mais vous devez divulguer votre affiliation avec celui-ci, comme indiqué dans la FAQ .
Matthias Braun

@MatthiasBraun OK, je suis d'accord avec toi, je ne le savais pas. J'ai édité la réponse.
Diego Catalano

1
Le framework Catalano a été déplacé sur github.com/DiegoCatalano/Catalano-Framework
HairOfTheDog

4

imo la meilleure approche consiste à utiliser le système de traitement d'images GraphicsMagick avec im4java comme interface de ligne de commande pour Java.

Il existe de nombreux avantages de GraphicsMagick, mais un pour tous:

  • GM est utilisé pour traiter des milliards de fichiers sur les plus grands sites de photos du monde (par exemple Flickr et Etsy).

c'est juste un wrapper de ligne de commande - pas une bibliothèque ....
Kulpemovitz

3

http://im4java.sourceforge.net/ - si vous utilisez Linux forking, un nouveau processus n'est pas cher.


Attention aux erreurs de mémoire insuffisante ...
Claes Mogren

la fourche coûte cher. Il peut utiliser beaucoup de mémoire. Voir la citation de la personne d'un article au bas de coderanch.com/t/419196/java/java/there-any-way-execute-Linux (l'article est: developers.sun.com/solaris/articles/subprocess/subprocess .html )
Plaudit Design

@Plaudit checkout gm4java, il crée un pool de processus GM en mode interactif et n'a pas besoin de bifurquer à chaque fois pour convertir une image. kennethxu.blogspot.com/2013/04/…
Kenneth Xu

2

Pour les outils commerciaux, vous voudrez peut-être essayer Snowbound.

http://www.snowbound.com/

Mon expérience avec eux est quelque peu dépassée, mais j'ai trouvé que leur API d'imagerie Java était beaucoup plus facile à utiliser que JAI et beaucoup plus rapide.

Leur support client et leurs exemples de code étaient également très bons.



1

Je ne peux pas dire que c'est la "meilleure" bibliothèque, mais je pense que vous pouvez essayer ceci: http://algart.net/java/AlgART/ Il s'agit d'une bibliothèque Java open source, prenant en charge les tableaux et matrices "intelligents" généralisés avec des éléments de différents types (de 1 bit à 64 bits à virgule flottante), y compris le traitement d'image 2D, 3D et multidimensionnel et d'autres algorithmes, en travaillant avec des tableaux et des matrices. Malheureusement, en ce moment, il ne comprend pas suffisamment de démos et d'exemples, mais, d'autre part, il contient beaucoup de JavaDocs. Il a reposé sur la base des logiciels commerciaux (SIMAGIS) pendant plusieurs années, mais maintenant il est open-source.


2
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien de référence. Les réponses de lien uniquement peuvent devenir invalides si la page liée change.
Matthias

Tu as raison, j'ai édité le premier commentaire.
Daniel
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.