Como obter os dados de imagem compactada do codificador JPEG em Java
Pergunta
Eu quero comprimir uma imagem usando codificador JPEG e em vez de escrevê-lo em um arquivo eu quero passar os dados compactados para outro aplicativo. Meu problema é que eu pode comprimir os dados, mas não sei como conseguir que os dados de imagem comprimidos. Estou usando este código:
out = new FileOutputStream ( filename );
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder ( out );
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam ( bi );
param.setQuality ( 0.3f, false );
encoder.setJPEGEncodeParam ( param );
encoder.encode ( bi );
out.close();
Solução
A ByteArrayOutputStream vai dar-lhe acesso aos bytes.
ByteArrayOutputStream out = new ByteArrayOutputStream ( );
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder ( out );
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam ( bi);
param.setQuality ( 0.3f, false );
encoder.setJPEGEncodeParam ( param );
encoder.encode (bi);
out.close(); // a no-op on ByteArrayOutputStream
byte[] data = out.toByteArray();
Outras dicas
Use um ByteArrayOutputStream
em vez de um FileOutputStream
. Em seguida, você pode obter o bytes via toByteArray()
.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow