Problema com ImageIO.read();

3 respostas
L

Olá pessoal eu to tendo um problema pra ler uma imagem.
Eu estou usando o comando

ImageIO.read(new File("D:\\teste_imagens\\imagem.jpg"));

E tendo a seguinte exceção

Exception in thread "main" java.lang.IllegalArgumentException: Numbers of source Raster bands and source color space components do not match
	at java.awt.image.ColorConvertOp.filter(ColorConvertOp.java:460)
	at com.sun.imageio.plugins.jpeg.JPEGImageReader.acceptPixels(JPEGImageReader.java:1114)
	at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(Native Method)
	at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1082)
	at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:897)
	at javax.imageio.ImageIO.read(ImageIO.java:1422)
	at javax.imageio.ImageIO.read(ImageIO.java:1326)
	at fastfoodapp.resizer.aplicacao.Image.<init>(Image.java:39)
	at fastfoodapp.resizer.aplicacao.ImageLoader.fromFile(ImageLoader.java:42)
	at fastfoodapp.resizer.aplicacao.Resize.salvarArquivo(Resize.java:32)
	at fastfoodapp.resizer.aplicacao.Resize.main(Resize.java:22)

Grato a quem puder ajudar

3 Respostas

E

Pegue essa imagem (e todas as outras que tiverem esse problema, que é o de estar um pouco fora da especificaçao do JPEG) e use o ImageMagick para corrigi-las.

Algo como:

convert -strip -colorspace rgb -quality 100 imagem.jpg

ou coisa parecida (não estou com o ImageMagick para conferir se tem algum parâmetro faltando, procure o help em ImageMagick.org )

L

Eu meio que percebi isso a pouco tempo.
Meu problema é que eu estou usando esse comando pra redimensionar imagens que são enviadas para um sistema web pelos usuários.
É muito ruim eu dizer pra um usuário que não sabe nem o que é um “JPEG” que a imagem dele está fora das especificações =/
Tem alguma maneira de ler a imagem mesmo estando fora dessas especificações? Tipo uma biblioteca ou outro comando?

E

Na verdade, tirei esse comando de um post de alguém que teve um problema muito semelhante mas em ColdFusion (he he he).

A idéia é a seguinte: em vez de redimensionar a imagem usando as APIs do Java, até porque pode haver imagens ligeiramente defeituosas como as que você reportou, redimensione a imagem usando o ImageMagick - acho que há algumas APIs do ImageMagick que facilitam chamar o ImageMagick a partir do Java. Como ele é escrito em C e muito otimizado, se não me engano até usando rotinas em Assembly para otimizar o processamento, deve ser mais rápido que as APIs do Java (que também foram escritas em C, casualmente, mas não há alguém que fique periodicamente otimizando o código como há no caso do ImageMagick.)

Criado 15 de junho de 2012
Ultima resposta 15 de jun. de 2012
Respostas 3
Participantes 2