画像の高さを取得するには、を使用できますImageIO.read(new URL("…")).getHeight()
。
私の質問:
まず、あなたの質問:
やや。まず第一に、ImageIO.read(...)
メソッドは、デコードにすべてのデフォルトパラメータを使用して、ファイル内の最初の画像をデコードする便利なメソッドです。すべてのImageIO.read(...)
操作は特定のプラグインまたはImageReader
インスタンス(などJPEGImageReader
)をフォーマットするように委任されているため、これはプラグイン固有の場合があります。しかし、一般的なケースは、画像データが「オンザフライ」で転送およびデコードされることです。ここには「サイズ計算」はなく、この場合は画像全体がにデコードされることに注意してくださいBufferedImage
。ファイル内の最初の画像を復号するために必要とされるようになっているように多くのデータとして転送され、必ずしもではない格納されたデコードされた画素値以外のコンピュータ上の任意の場所、。
場合によります。ImageIO.setUseCache(boolean)
データをディスクにキャッシュするかRAMにキャッシュするかを制御する設定があります。
true
場合、データは一時的にディスクに保存されます。通常はデフォルトの一時ディレクトリに保存されます(java.io.tempdir
システムプロパティを参照)。false
の場合、画像のデコード中にデータが一時的にメモリに保存されます。いいえ、サーバーにこのデータを提供するための特別なAPIがあり、このAPIに対して特定のリクエストを実行しない限り、そうではありません。ただし、ImageIO
APIには、画像全体を事前にダウンロード/デコードせずに、画像のサイズをはるかに高速に取得できる、より詳細なメソッドがあります。
画像のサイズを取得するより速い方法は次のとおりです。
try (InputStream stream = url.openStream()) {
// The "useCache" setting will decide whether "input" below
// will be disk or memory cached
try (ImageInputStream input = ImageIO.createImageInputStream(stream)) {
ImageReader reader = ImageIO.getImageReaders(input).next(); // TODO: Handle no reader
try {
reader.setInput(input);
// Get dimensions of first image in the stream, without decoding pixel values
int width = reader.getWidth(0);
int height = reader.getHeight(0);
}
finally {
reader.dispose();
}
}
}
繰り返しますが、画像形式に応じて、上記のコードは、画像のサイズを決定するために必要な量のヘッダー/メタデータのみを読み取る必要があります。ほとんどのImageReader
実装は、このためにすべてのヘッダーデータを読み取りますが、それでも、イメージ全体をデコードするよりもはるかに高速で、必要なデータ(およびメモリ)がはるかに少なくなります。
さまざまな形式にさまざまなサイズのヘッダーがあり、基になるトランスポート(HTTPなど)が「チャンク」などでデータを転送する可能性があるため、ダウンロードするデータの量やダウンロードする必要があるデータの量を推測するのは困難です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加