如何在不下载 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 端点下载图像或位图?