我的问题是,当使用imageio.write时,我看到它正在使用hdd,还阅读了jDeli(但太贵了(、Apache Commons、JAI,它们要快得多。。。。
我想使用例程返回的编码字节。。。在自定义远程桌面实用程序中。。。
public static byte[] imageToJPEGByteArray(Image aImage, int width, int height, int qualityPercent) throws IOException {
byte[] imageBytes = new byte[0];
float quality = 75 / 100f;
BufferedImage destImage;
destImage = SwingFXUtils.fromFXImage(aImage, null);
// Output JPEG byte array
ByteArrayOutputStream baos = new ByteArrayOutputStream();
if(qualityPercent != -1) {
// Start to create JPEG with quality option
ImageWriter writer = null;
Iterator iter = ImageIO.getImageWritersByFormatName("gif");
if (iter.hasNext()) {
writer = (ImageWriter) iter.next();
}
ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
writer.setOutput(ios);
ImageWriteParam iwparam = new JPEGImageWriteParam(Locale.getDefault());
iwparam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwparam.setCompressionQuality(quality);
writer.write(null, new IIOImage(destImage, null, null), iwparam);
ios.flush();
writer.dispose();
ios.close();
// Done creating JPEG with quality option
} else {
// This one line below created a JPEG file without quality option
ImageIO.write(destImage, "gif", baos);
}
baos.flush();
imageBytes = baos.toByteArray();
baos.close();
// Done
return imageBytes;
}
如果您发现此代码在保存到ByteArrayOutputStream
时会导致磁盘活动,那么您应该尝试设置ImageIO
"使用高速缓存";至false
:的标志
ImageIO.setUseCache(false);
setUseCache
的Javadoc说:
设置一个标志,指示在创建ImageInputStream和ImageOutputStreams时是否应使用基于磁盘的缓存文件。