3

我正在寻找一些代码来获取Java网站上图像的尺寸,而无需先下载它。这个想法是,如果图像太大,我不会下载文件并返回错误消息,因此用户不会输入导致文件太大的 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(图像开始)记录中,该记录应位于文件开头附近。您可以下载图像的第一部分并解析返回的字节以查找 SOI 标记 (0xFFD8)。

于 2012-05-15T01:08:27.540 回答
2

您需要的信息在您需要下载的文件中。

如果没有服务器端的东西告诉你图像的尺寸,我认为你不能这样做。这让我觉得服务器相当昂贵。可能比仅发送图像文件更昂贵......除非您可以找到某种方法来提取图像的大小元数据,而无需将其完全读入服务器端的内存中。

于 2012-05-15T00:58:13.783 回答