Bom dia a todos.
Tenho um problema com gravação de imagem JPG que ainda não consegui resolver. Eu tiro uma screen da tela e envio da máquina cliente até a máquina servidor pela Internet, porém, notei que está meio lento para atualizar as telas, e descobri que as imagens geradas estão muito grandes (em kb).
Uma imagem JPG, de 1024x768, em 256 cores com 70% de qualidade está girando em torno de 100KB (inviável).
Mesmo com o programa enviando telas apenas quando a screen tirada pelo robot for diferente da screen anteriormente enviada, ainda fica lento.
Tenho o seguinte código:
Rectangle screenSize = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage screen = robot.createScreenCapture(screenSize);
BufferedImage bimage = new BufferedImage(screenSize.width, screenSize.height, preferencias.getQualidadeCor());
Onde qualidade cor pode ser
byte qualidadeCor = BufferedImage.TYPE_BYTE_INDEXED //256 Cores
byte qualidadeCor = BufferedImage.TYPE_BYTE_GRAY //Tons de Cinza
Após obter esta BufferedImage, eu crio ela com a qualidade desejada assim
[code]
public static void createJPG(BufferedImage image, OutputStream out, float quality) throws IOException {
Iterator jpgWriter = ImageIO.getImageWritersBySuffix("jpeg");
ImageWriter imageWriter = (ImageWriter) jpgWriter.next();
ImageOutputStream ios = ImageIO.createImageOutputStream(out);
jpgWriter.setOutput(ios);
ImageWriteParam imgParam = jpgWriter.getDefaultWriteParam();
imgParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
imgParam.setCompressionQuality(quality);
jpgWriter.write(null, new IIOImage(image, null, null), imgParam);
}[/code]
onde quality é
Float quality = new Float(7 / 10.0f)
Depois, envio esta imagem, que é um byte[], em um byte[] comprimido em ZIP. Mesmo com compressão máxima, a imagem não muda muito de tamanho. Consigo uma compressão de no máximo 10%.
Minha pergunta é:
- Existe a possibilidade de gravar uma imagem JPG entre 60-70% de qualidade, com 256 cores (pode até ser menos, só preciso mesmo é “ver” a tela do computador monitorado) e que fique com um tamanho mais “aceitável”?
Pensei em redimensionar para enviar, mas a imagem fica muito pequena.
A imagem precisa ser pequena (em kb) e não precisa ter qualidade, portanto, não há necessidade de trabalhar com Antialiasing, Blur, etc, etc.
Tentei até mesmo usar o depreciado JPEGEncoder, mas é lento que chega a dar dó.
Alguma dica?