我的问题是,当使用imageio.write时,我看到的是使用hdd,也读到了有关jDeli (但太贵)、Apache的文章,它们都要快得多.
我想使用例程返回的编码字节..。在一个定制的远程桌面实用程序..。
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;
}
发布于 2022-10-28 12:23:10
如果您已经观察到这段代码在保存到ByteArrayOutputStream
时会导致磁盘活动,那么也许您应该尝试将ImageIO
“使用缓存”标志设置为false
ImageIO.setUseCache(false);
setUseCache
的Javadoc说:
设置一个标志,指示在创建ImageInputStream和ImageOutputStreams.
时是否应该使用基于磁盘的缓存文件。
https://stackoverflow.com/questions/74226509
复制相似问题