3

最初にダウンロードしなくても、JavaでWebサイト上の画像のサイズを取得するためのコードを探しています。画像が大きすぎると、ファイルをダウンロードせずにエラーメッセージが返されるため、ユーザーはファイルが大きすぎることにつながるURLを入力しないという考え方です。画像の高さと幅が必要になります。

StackOverflowの別のユーザーからのこのコードは、システムにファイルがある場合にこれを実行することを知っています。

private Dimension getImageDim(final String path) {
Dimension result = null;
String suffix = this.getFileSuffix(path);
Iterator<ImageReader> iter = ImageIO.getImageReadersBySuffix(suffix);
if (iter.hasNext()) {
    ImageReader reader = iter.next();
    try {
        ImageInputStream stream = new FileImageInputStream(new File(path));
        reader.setInput(stream);
        int width = reader.getWidth(reader.getMinIndex());
        int height = reader.getHeight(reader.getMinIndex());
        result = new Dimension(width, height);
    } catch (IOException e) {
        log(e.getMessage());
    } finally {
        reader.dispose();
    }
} else {
    log("No reader found for given format: " + suffix));
}
return result; }

ただし、それをURLオブジェクトで使用できるものに変換する方法がわかりません。

編集:ピクセル幅とピクセル高さに興味があります。

4

2 に答える 2

4

申し訳ありませんが、お見せできるコードはありませんが、一般的なアドバイスはできます。画像のサイズ (幅 * 高さのピクセル数) またはファイルのサイズ (ダウンロードする必要があるバイト数) に関心がありますか?

ファイル サイズを取得するには、リモート サーバーに対して HTTP HEAD リクエストを送信してみてください。これにより、ファイルをダウンロードせずにヘッダーが返されます - ContentLength ヘッダーにはファイルのサイズが含まれる場合があります。またはそうでない場合もありますが、オプションです。

幅と高さをピクセル単位で取得するには、少なくともファイルの一部をダウンロードする必要があります。これらの値は、ファイルの先頭近くにある JPEG ファイル形式の SOI (Start Of Image) レコードに格納されます。画像の最初の部分をダウンロードし、返されたバイトを解析して SOI マーカー (0xFFD8) を探します。

于 2012-05-15T01:08:27.540 に答える
2

必要な情報は、ダウンロードする必要のあるファイルにあります。

サーバー側で画像のサイズを教えてくれるものがなければ、これを行うことはできないと思います。そして、これはサーバーにとってかなり高価であると私は思います。サーバー側のメモリに完全に読み込まずに画像のサイズメタデータを抽出する方法が見つからない限り、画像ファイルを送信するよりもおそらく費用がかかります。

于 2012-05-15T00:58:13.783 に答える