JPEG形式の画像を表すバイト配列を受け取り、画像の寸法を返すシンプルなサーバーサイドコードがあります。バッファ付き画像変換のバイト配列を遅く
public String processImage(byte[] data) {
long startTime = System.currentTimeMillis();
ByteArrayInputStream stream = new ByteArrayInputStream(data);
BufferedImage bufferedImage;
bufferedImage = ImageIO.read(stream);
int height = bufferedImage.getHeight();
int width = bufferedImage.getWidth();
long endTime = System.currentTimeMillis();
return "height="+height+" | width="+width+" | elapsed="+(endTime-startTime);
}
問題はそれほど遅くないことです。 100KBの画像の場合、6秒かかります。 900KBの画像の場合、30秒かかります。それは期待されていますか?バッファリングされたイメージ変換にバイト配列をより高速にする方法はありますか?
参考までに、高さ/幅をつかむことだけが私が意図するものではありません。私は最終的にbufferedImageを処理したいと思っています。だから高さ/幅を取得することは単なるコード例でした。
ありがとう、私はこれをまだ試していませんが、分離された環境で同じコードを実行しようとしましたが、200KBで20msしかかかりませんでした。だから問題はそれがコードのように見えません。上記の設定は何を正確に行いますか? – baekacaek
@baekacaek:これは、グラフィックスカードを式の外に出します。 BufferedImageをディスプレイに表示することを決して予定していないなら、グラフィックカードのRAMにロードする時間を無駄にする必要はありません。ローカルでコードスニペットを試してみましたが、上記のコマンドラインオプションはテストイメージの実行時間を約250msから約140msに短縮しました。 YMMV。 – Asaph