Qual é a melhor biblioteca / abordagem de processamento de imagem java? [fechadas]


244

Estou usando as APIs de mídia JAI e o ImageMagick?

O ImageMagick tem alguns problemas de escalabilidade e o JMagick baseado em JNI também não é atraente. O JAI apresenta resultados de baixa qualidade ao realizar operações de redimensionamento em comparação com o ImageMagick.

Alguém conhece alguma ferramenta excelente, de código aberto ou comercial, que é Java nativo e oferece resultados de alta qualidade?


5
O JMagick quase não possui documentação, exceto os javadocs. Passei duas horas procurando por algo que deveria ter sido bem fácil de fazer.
— Alex Ciminian 04/08/19

De fato. Eu escolhi sair do processo e usar o ImageMagick usando o apache exec como um meio de gerenciar o processo. Isso funcionou bem. Eu poderia ter ido tão longe a ponto de criar um servidor de imagem apenas para esse fim. É difícil encontrar algo com a qualidade e a funcionalidade do ImageMagick.
— Daniel Honig

158
É ridículo que perguntas como essa sejam encerradas como fora de tópico. Mais de 100.000 visualizações, é claramente uma pergunta que as pessoas estão fazendo. Às vezes, as pessoas não sabem exatamente tudo o que vão fazer com antecedência e apreciam as respostas "opinativas" de outras pessoas sobre a melhor estrutura geral. Muita moderação grandiosa no SO!
— user467257

12
O que há de errado se as pessoas discutem prós e contras de maneiras de um aspecto fundamental da programação Java? Não é o que SO deveria fazer? IMHO, essas perguntas devem ser cuidadosamente moderadas e mantidas para fornecer uma boa referência aos desenvolvedores que estão começando novamente no tópico específico.
— Raúl

20
Sim. Melhor resultado no Google, java image processing librarymas fechado ... como de costume. A moderação está exagerando no SO atualmente.
— Stijn de Witt

Respostas:


88

Há ImageJ , que se orgulha de ser o

o programa de processamento de imagem Java puro mais rápido do mundo

Pode ser usado como uma biblioteca em outro aplicativo. Sua arquitetura não é brilhante, mas executa tarefas básicas de processamento de imagem.


2
Eu uso o ImageJ como uma biblioteca em vários aplicativos de processamento de imagem. É uma biblioteca Java muito decente. Ele também se integra muito bem ao Java2D, para que você possa misturar e combinar os 2 facilmente.
— hohonuuli

3
No momento em que usei o ImageJ, sua API era bastante estranha. É mais um aplicativo para o qual você pode escrever plugins do que uma biblioteca. E até onde me lembro, tentar desenvolver uma nova GUI nessa antiga base de código do AWT foi uma dor.
— Ivan

4
Acabei de desperdiçar meio dia tentando fazer uma rotação, escala e corte simples da imagem. É 2019 e a documentação do ImageJ não é utilizável.
— M. Leonhard

133

Sei que essa pergunta é bastante antiga, mas à medida que o novo software é lançado, ajuda a obter novos links para projetos que podem ser interessantes para as pessoas.

O imgscalr é o redimensionamento de imagem em Java puro (e operações simples, como preenchimento, corte, rotação, clareamento / escurecimento etc.), que é extremamente simples de usar - uma única classe consiste em um conjunto de operações gráficas simples, todas definidas como métodos estáticos que você passa uma imagem e obtém um resultado.

O exemplo mais básico de uso da biblioteca seria assim:

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

E um uso mais típico para gerar miniaturas de imagens usando alguns ajustes de qualidade e similares pode ser assim:

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

Todas as operações de processamento de imagem usam o pipeline Java2D bruto (que é acelerado por hardware nas principais plataformas) e não apresentará a dor de chamar via JNI como contenção de biblioteca em seu código.

O imgscalr também foi implantado em produções em larga escala em muitos lugares - a inclusão da classe AsyncScalr o torna um componente perfeito para qualquer processamento de imagem no servidor.

Existem vários ajustes na qualidade da imagem que você pode usar para trocar entre velocidade e qualidade com o modo ULTRA_QUALITY mais alto, fornecendo um resultado em escala que parece melhor do que a implementação Lancoz3 do GIMP.


@Riyad Kalla, parece interessante, obrigado ... Mas não entendo, pode ser usado em projetos comerciais?
— user592704

2
@ user592704 Absolutamente, o imgscalr está licenciado sob a licença Apache 2; a mesma licença sob a qual tudo está licenciado na Apache Foundation. Você pode pegá-lo e fazer o que quiser com ele em produtos comerciais ou de código aberto. O imgscalr já está implantado em vários aplicativos da web comerciais em produção.
— Riyad Kalla

1
@DavidParks Você está correto, imgscalr deve assumir o controle assim que você tiver a instância BufferedImage (dados de imagem decodificados), não antes. Eu não queria nem pensar em tentar fazer meus próprios decodificadores / codificadores, pois esses pipelines há muito tempo são acelerados por hardware sob a proteção da equipe Java2D - tentando refazer todo esse trabalho sem erros e com eficiência seria uma empresa hercúlea.
— Riyad Kalla

1
@gstackoverflow imgscalr opera nas instâncias brutas de BufferedImage (dados de imagem decodificados) - portanto, outra coisa (normalmente a biblioteca ImageIO) precisa decodificar os dados da imagem codificada em uma BufferedImage e recodificá-los para uma nova imagem quando o imgscalr terminar de operar sobre ele - dito de outra forma "imgscalr não se preocupa com formato de arquivo, você já decodificado a imagem antes de entregá-lo a imgscalr"
— Riyad Kalla

1
O ImgScalr é bom apenas para manipulação básica de imagens. Se se trata de carregamento e processamento de imagens. falta o complexo.
— MarekM

31

Outra boa alternativa: Marvin


9
Muito obrigado. Você salvou o meu dia! : D (PS: Eu não sou o OP. Me deparei com esse post enquanto pesquisava no Google e confia em mim, isso me ajudou muito!
— missingfaktor

3
@missingfaktor agora te devo uma cerveja. Seu louvor a Joseph acabou de salvar meu dia também. Joseph, você também está recebendo uma cerveja :)!
— Filip Dupanović 19/10/11

3
Aparentemente, esse URL não existe mais, mas marvinproject.sourceforge.net parece ser o novo URL.
— Amos M. Carpenter

Ok, sou meio que obrigada a dar uma olhada neste. =)
— Marvo 28/07

Parece muito bom, vai tentar.
— Ridcully 25/09


8

O processamento é novo, mas muito, muito bom.


1
Estou ciente do processamento, mas as pessoas realmente o estão usando no, gostaria de executar a transformação X na minha biblioteca de estilos de moda do X jpeg?
— Daniel Honig

Eu usei-o e parece realmente poderosa e vale a pena apostar em
— FMSF

2
Na verdade, as bibliotecas principais (que podem ser usadas para incorporar funcionalidades) são LGPL. Mas ninguém perguntou qual é a licença. wiki.processing.org/w/…
— Benjamin Atkin

5

Tente usar o Catalano Framework .

Pontos chave:

  • Arquitetura como AForge.NET/Accord.NET.
  • Execute nos dois ambientes com o mesmo código, desktop e Android.
  • Contém vários filtros em paralelo.
  • O desenvolvimento está a todo vapor.

O Catalano Framework é um framework para computação científica para Java e Android. O projeto começou como uma porta inicial dos muitos recursos das estruturas AForge.NET e Accord.NET para .NET, mas está crescendo constantemente com recursos mais avançados que agora estão sendo compartilhados entre esses projetos.

Exemplo:

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 Frameworkparece que você está anunciando seu próprio produto. Sua estrutura pode ser ótima, mas você deve divulgar sua afiliação a ela, conforme indicado nas Perguntas frequentes .
— Matthias Braun

@MatthiasBraun OK, eu concordo com você, eu não sabia disso. Eu editei a resposta.
— Diego Catalano

1
O Catalano Framework mudou-se para github.com/DiegoCatalano/Catalano-Framework
— HairOfTheDog

4

A melhor abordagem é usar o GraphicsMagick Image Processing System com o im4java como uma interface de linha de comando para Java.

Existem muitas vantagens do GraphicsMagick, mas uma por todos:

  • O GM é usado para processar bilhões de arquivos nos maiores sites de fotos do mundo (por exemplo, Flickr e Etsy).

; s apenas um invólucro de linha de comando - não uma biblioteca ....
— Kulpemovitz

3

http://im4java.sourceforge.net/ - se você estiver executando o linux bifurcação, um novo processo não é caro.


Cuidado com erros de falta de memória ...
— Claes Mogren 6/10

bifurcar é caro. Pode usar muita memória. Consulte a citação da pessoa de um artigo na parte inferior de coderanch.com/t/419196/java/java/there-any-way-execute-Linux (O artigo é: developers.sun.com/solaris/articles/subprocess/subprocess .html )
— Plaudit Design

O check-out do @Plaudit gm4java cria um conjunto de processos GM no modo interativo e não precisa ser bifurcado todas as vezes para converter uma imagem. kennethxu.blogspot.com/2013/04/...
— Kenneth Xu

2

Para ferramentas comerciais, convém experimentar o Snowbound.

http://www.snowbound.com/

Minha experiência com eles é um pouco datada, mas achei a API do Java Imaging muito mais fácil de usar que o JAI e muito mais rápida.

O suporte ao cliente e os exemplos de código também foram muito bons.



1

Não posso dizer que é a melhor "biblioteca", mas acho que você pode tentar o seguinte: http://algart.net/java/AlgART/ É uma biblioteca Java de código aberto, suportando matrizes e matrizes "inteligentes" generalizadas com elementos de diferentes tipos (de 1 a 64 bits de ponto flutuante), incluindo processamento de imagem 2D, 3D e multidimensional e outros algoritmos, trabalhando com matrizes e matrizes. Infelizmente, no momento, não há demo e exemplos suficientes, mas, por outro lado, contém muitos JavaDocs. Ele ficou na base do software comercial (SIMAGIS) durante vários anos, mas agora é de código aberto.


2
Embora esse link possa responder à pergunta, é melhor incluir aqui as partes essenciais da resposta e fornecer o link para referência. As respostas somente para links podem se tornar inválidas se a página vinculada for alterada.
— Matthias

Você está certo, eu editei o primeiro comentário.
— 26413 Daniel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.