我的問題是在使用 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;
}
uj5u.com熱心網友回復:
如果您說您已經觀察到此代碼在保存時似乎會導致磁盤活動,ByteArrayOutputStream那么您應該嘗試將ImageIO“使用快取”標志設定為false:
ImageIO.setUseCache(false);
JavadocsetUseCache說:
設定一個標志,指示在創建 ImageInputStream 和 ImageOutputStreams 時是否應使用基于磁盤的快取檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/523545.html
