[Resolvido]Orientação a objetos, não exagere

3 respostas
R

Olá!
Eu estou salvando minhas imagens em forma de arquivos em um diretório. Estava usando o FileItem.write(file) para escrever-las. Funciona perfeitamente, pois é possível salvar qualquer formato de arquivos com essa API. No entanto agora vou converter todos os formatos de imagens para jpg e estou usando o ImageIO.write(imagem, “jpg”, new File(diretorio)).

BufferedImage imagem1=ImageIO.read(fileItem.getInputStream());
BufferedImage imagem2=new BufferedImage(imagem1.getWidth(), imagem1.getHeight(), BufferedImage.TYPE_INT_RGB);
imagem2.createGraphics().drawImage(imagem1,0,0,Color.WHITE,null);
ImageIO.write(imagem2, "jpg", new File("diretorioqualquer/imagem.jpg"));

O problema é que qualquer imagem recebida pelo FileItem que não seja do formato jpg, inverte as cores ao salvar-la. O estranho é que se pegar a imagem direto do seu diretorio sem o FileItem.getInputStreamm e converter usando o metodo main, ela é convertida normalmente.
Alguém sabe como resolver isso?

3 Respostas

R

Resolvi meu problema por um detalhe muito simples.
No código acima eu simplifiquei, mas no meu projeto, eu tinha uma classe ConverteImagem, onde tinha um método converter e esse método recebia um BufferedImage, executava duas linhas de códigos, e depois retornava um BufferedImage para o Servlet salva-la. Resolvi então colocar essas duas linha que convertia a imagem para o formato jpg, como no exemplo acima, no próprio Servlet… Pronto, não houve mais inversão de cores nas imagens salvas. hehehe.
Acho que por passar demais os bytes de uma imagem para muitas classes e métodos, acaba tendo uma pequena perda de dados e ocorre esses erros, mesmo porque, as cores não eram totalmente inversas quando ocorria esse erro. Mas enfim, posso estar enganado, mas meu problema foi resolvido.
Até troco o titulo “imagens invertem as cores ao converter e salvar”, para “Orientação a objetos, não exagere”. kkkkkkkk

V

Por que você faz uma cópia da imagem no meio do caminho? Não é mais fácil fazer diretamente:

BufferedImage imagem = ImageIO.read(fileItem.getInputStream());
ImageIO.write(imagem, "jpg", new File("diretorioqualquer/imagem.jpg"));

O Java geralmente se encarrega de fazer as conversões necessárias.

R

Valeu a dica!
Quanto menos camadas tiver, mais rápido fica a aplicação, e o código ficou muito mais limpo também. Obrigado!

Criado 24 de dezembro de 2015
Ultima resposta 31 de dez. de 2015
Respostas 3
Participantes 2