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

Posted

技术标签:

【中文标题】如何在不下载 Java 的情况下获取网站图像的尺寸?【英文标题】:How do I get the dimensions of a website image in Java without downloading it? 【发布时间】:2012-05-22 11:59:49 【问题描述】:

我正在寻找一些代码来获取 Java 网站上图像的尺寸,而无需先下载它。这个想法是,如果图像太大,我不会下载文件并返回错误消息,因此用户不会输入导致文件太大的 URL。它会占用图像的高度和宽度。

我从 *** 上的另一个用户那里知道这段代码,当您在系统上有文件时会这样做:

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 对象的内容。

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

【问题讨论】:

请注意,您的代码正在读取本地文件。 【参考方案1】:

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

为了获取文件大小,您可以尝试向远程服务器发出 HTTP HEAD 请求。这将在不下载文件的情况下返回标题 - ContentLength 标题可能包含文件的大小。也可能不是,它是可选的。

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于如何在不下载 Java 的情况下获取网站图像的尺寸?的主要内容,如果未能解决你的问题,请参考以下文章

在不读取整个文件的情况下获取图像尺寸

在不知道尺寸的情况下垂直居中图像

如何在不使用 ImageView 的情况下从 API 端点下载图像或位图?

MailCore2 - 在不下载图像或附件的情况下获取邮件内容?

添加价格和库存后如何在不复制产品的情况下获取数据

如何在不重新保存的情况下从 iCloud 下载图像?