如何在不下载的情况下获取Java中网站图像的尺寸?

时间:2012-05-15 00:50:31

标签: java image height width dimension

我正在寻找一些代码来在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对象上使用的内容。

编辑:我对像素宽度和像素高度很感兴趣。

2 个答案:

答案 0 :(得分:4)

抱歉,我没有代码向您展示,但我可以提供一般性建议。您是否对图像的大小(宽*高像素)或文件大小(需要下载的字节)感兴趣?

要获取文件大小,您可以尝试向远程服务器发出HTTP HEAD请求。这将返回标头而不下载文件 - ContentLength标头可能包含文件的大小。或者它可能不是,它是可选的。

获取宽度和高度(以像素为单位)需要至少下载部分文件。这些值以JPEG文件格式存储在SOI(图像开始)记录中,该格式应该靠近文件的开头。您可以下载图像的第一部分并解析返回的字节,寻找SOI标记(0xFFD8)。

答案 1 :(得分:2)

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

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