我们有一些代码可以使用这个旧的内部Sun软件包来处理图像,实际上在从输入流读取/解码后将JPEG编码为特定的大小和质量.代码示例如下.我将非常感谢使用适当的java.*或javax.* API的最佳实践替换示例.
private void encodeJPEG(BufferedImage bi, BufferedOutputStream out, float quality) throws
ImageFormatException, IOException {
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(quality, false);
param.setDensityUnit(DENSITY_UNIT);
param.setXDensity(DENSITY);
param.setYDensity(DENSITY);
encoder.setJPEGEncodeParam(param);
encoder.encode(bi);
}
private void initJPEG(File jpegFile) throws FileNotFoundException, IOException,
IOException {
FileInputStream inputStream = new FileInputStream(jpegFile);
try {
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(inputStream);
buffImage = decoder.decodeAsBufferedImage();
}
.....error handling.....
}
解决方法:
我没有尝试过这种方法,但你可以看看Java Image I/O API. JPEGImageWriteParam class会特别有意思.