転送またはダウンロードせずに画像の幅と高さを取得する方法はJavaにありますか?

マイクB。

画像の高さを取得するには、を使用できますImageIO.read(new URL("…")).getHeight()

私の質問:

  1. この方法でサイズ計算の前に画像がローカルコンピューターにダウンロードされることを正しく理解していますか?
  2. はいの場合、イメージが正確にダウンロードされる場所— HDD上のJVMのキャッシュまたは直接RAM?
  3. 転送やダウンロードせずに画像の高さを取得する方法はありますか?しかし、サーバーへのある種の要求では?
haraldK

まず、あなたの質問:

  1. やや。まず第一に、ImageIO.read(...)メソッドは、デコードにすべてのデフォルトパラメータを使用して、ファイル内最初の画像をデコードする便利なメソッドです。すべてのImageIO.read(...)操作は特定のプラグインまたはImageReaderインスタンス(などJPEGImageReaderをフォーマットするように委任されているため、これプラグイン固有の場合があります。しかし、一般的なケースは、画像データが「オンザフライ」で転送およびデコードされることです。ここには「サイズ計算」はなく、この場合画像全体がにデコードされることに注意してくださいBufferedImageファイル内の最初の画像を復号するために必要とされるようになっているように多くのデータとして転送され、必ずしもではない格納されたデコードされた画素値以外のコンピュータ上の任意の場所、。

  2. 場合によります。ImageIO.setUseCache(boolean)データをディスクにキャッシュするかRAMにキャッシュするかを制御する設定があります。

    • 設定がのtrue場合、データは一時的にディスクに保存されます。通常はデフォルトの一時ディレクトリに保存されます(java.io.tempdirシステムプロパティを参照)。
    • 設定がfalse場合、画像のデコード中にデータが一時的にメモリに保存されます。
  3. いいえ、サーバーにこのデータを提供するための特別なAPIがあり、このAPIに対して特定のリクエストを実行しない限り、そうではありません。ただし、ImageIOAPIには、画像全体を事前にダウンロード/デコードせずに、画像のサイズをはるかに高速に取得できる、より詳細なメソッドがあります。

画像のサイズを取得するより速い方法は次のとおりです。

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]

編集
0

コメントを追加

0

関連記事

分類Dev

Java JDKを安全にダウンロードする方法はありますか?

分類Dev

新しいバージョンを手動でダウンロードせずにJDKを更新する方法はありますか?

分類Dev

Webブラウザウィンドウのサイズを特定の幅と高さに変更する方法はありますか?

分類Dev

Pythonはすべての画像をダウンロードせずにページを取得する方法を要求しますか?

分類Dev

makefileに別のmakefileを自動ダウンロードさせる方法はありますか?

分類Dev

デバイスモードのときに「幅」と「デバイス幅」を減らすようにブラウザを取得する方法はありますか?

分類Dev

トレーニングは100%であり、動画から抽出した画像をディープラーニングモデルにフィードする方法にもかかわらず、検証の精度を向上させることはできません

分類Dev

Xamarin:テスターがAppCenter FirstにログインせずにAppCenterからアプリをダウンロードする方法はありますか?

分類Dev

フォントAwesomeIconの高さと幅を親コンテナの全幅と高さに設定する方法はありますか?

分類Dev

Webブラウザーのウィンドウのサイズを変更して、その寸法が特定の幅と高さになるようにする方法はありますか?

分類Dev

実際にウェブページをリロードせずに、hbspartial(nodejs、mogodb、express)をレンダリングしながら、PARTIALと一緒に送信されたデータを更新する方法はありますか?

分類Dev

Javaのパスからファイルを読み取らずにファイルのダウンロードを提供する方法はありますか?

分類Dev

CSSでdivの幅を高さに設定する方法はありますか?

分類Dev

新しいバージョンを再ダウンロードせずにMavenを自己更新する方法はありますか

分類Dev

JS / PHP:ウィンドウが最初にロードされるのを待たずに画像の高さを取得する方法はありますか?

分類Dev

S3にプッシュする前にフラスコ経由でアップロードされたスマートフォンの画像を回転させるよりクリーンな方法はありますか?

分類Dev

モーダルウィンドウの背景画像をモーダルウィンドウと同時に表示する方法はありますか?

分類Dev

Rパッケージをインストールせずにダウンロードしてロードする方法はありますか?

分類Dev

ダウンロードせずにリモートファイルのサイズを取得する方法はありますか?

分類Dev

新しいISOをダウンロードせずにWindowsビルドバージョンをアップグレードする方法はありますか?

分類Dev

Java 3Dにジャンプせずに、Javaを使用してz軸を中心に画像を回転させる簡単な方法はありますか?

分類Dev

plistから画像をロードすると、高さと幅は常にゼロになります

分類Dev

Outlook / Exchangeの特定のフォルダーに追加された電子メールを転送する方法はありますか?

分類Dev

GitHub Pagesにバウアーの依存関係をダウンロードさせる方法はありますか?

分類Dev

ウィンドウが最小化されたときにキーボード入力を取得するpygameの方法はありますか?

分類Dev

Javaでインターネットからダウンロードした写真の高さと幅を取得するにはどうすればよいですか?

分類Dev

Firebaseでダウンロードせずに子のリストが変更されたかどうかを確認する方法はありますか?

分類Dev

何もレンダリングせずに弦の高さを計算する方法はありますか?

分類Dev

私のアプリはデバイス上で遅くなりますそれは私が使用する画像のためであり、ハードコードされた幅と高さを削除するにはどうすればよいですか?

Related 関連記事

  1. 1

    Java JDKを安全にダウンロードする方法はありますか?

  2. 2

    新しいバージョンを手動でダウンロードせずにJDKを更新する方法はありますか?

  3. 3

    Webブラウザウィンドウのサイズを特定の幅と高さに変更する方法はありますか?

  4. 4

    Pythonはすべての画像をダウンロードせずにページを取得する方法を要求しますか?

  5. 5

    makefileに別のmakefileを自動ダウンロードさせる方法はありますか?

  6. 6

    デバイスモードのときに「幅」と「デバイス幅」を減らすようにブラウザを取得する方法はありますか?

  7. 7

    トレーニングは100%であり、動画から抽出した画像をディープラーニングモデルにフィードする方法にもかかわらず、検証の精度を向上させることはできません

  8. 8

    Xamarin:テスターがAppCenter FirstにログインせずにAppCenterからアプリをダウンロードする方法はありますか?

  9. 9

    フォントAwesomeIconの高さと幅を親コンテナの全幅と高さに設定する方法はありますか?

  10. 10

    Webブラウザーのウィンドウのサイズを変更して、その寸法が特定の幅と高さになるようにする方法はありますか?

  11. 11

    実際にウェブページをリロードせずに、hbspartial(nodejs、mogodb、express)をレンダリングしながら、PARTIALと一緒に送信されたデータを更新する方法はありますか?

  12. 12

    Javaのパスからファイルを読み取らずにファイルのダウンロードを提供する方法はありますか?

  13. 13

    CSSでdivの幅を高さに設定する方法はありますか?

  14. 14

    新しいバージョンを再ダウンロードせずにMavenを自己更新する方法はありますか

  15. 15

    JS / PHP:ウィンドウが最初にロードされるのを待たずに画像の高さを取得する方法はありますか?

  16. 16

    S3にプッシュする前にフラスコ経由でアップロードされたスマートフォンの画像を回転させるよりクリーンな方法はありますか?

  17. 17

    モーダルウィンドウの背景画像をモーダルウィンドウと同時に表示する方法はありますか?

  18. 18

    Rパッケージをインストールせずにダウンロードしてロードする方法はありますか?

  19. 19

    ダウンロードせずにリモートファイルのサイズを取得する方法はありますか?

  20. 20

    新しいISOをダウンロードせずにWindowsビルドバージョンをアップグレードする方法はありますか?

  21. 21

    Java 3Dにジャンプせずに、Javaを使用してz軸を中心に画像を回転させる簡単な方法はありますか?

  22. 22

    plistから画像をロードすると、高さと幅は常にゼロになります

  23. 23

    Outlook / Exchangeの特定のフォルダーに追加された電子メールを転送する方法はありますか?

  24. 24

    GitHub Pagesにバウアーの依存関係をダウンロードさせる方法はありますか?

  25. 25

    ウィンドウが最小化されたときにキーボード入力を取得するpygameの方法はありますか?

  26. 26

    Javaでインターネットからダウンロードした写真の高さと幅を取得するにはどうすればよいですか?

  27. 27

    Firebaseでダウンロードせずに子のリストが変更されたかどうかを確認する方法はありますか?

  28. 28

    何もレンダリングせずに弦の高さを計算する方法はありますか?

  29. 29

    私のアプリはデバイス上で遅くなりますそれは私が使用する画像のためであり、ハードコードされた幅と高さを削除するにはどうすればよいですか?

ホットタグ

アーカイブ