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

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.