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

如何在不下载的情况下获得Java中网站图像的尺寸?,java,image,height,width,dimension,Java,Image,Height,Width,Dimension,我正在寻找一些代码来获取Java网站上图像的尺寸,而无需先下载。这个想法是,如果图像太大,我不会下载文件并返回错误消息,因此用户不会输入导致文件太大的URL。它需要图像的高度和宽度 我从StackOverflow上的另一个用户那里了解到,当系统上有文件时,会执行以下操作: private Dimension getImageDim(final String path) { Dimension result = null; String suffix = this.getFileSuffix(pa

我正在寻找一些代码来获取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; }
专用维度getImageDim(最终字符串路径){
维度结果=空;
字符串后缀=this.getFileSuffix(路径);
迭代器iter=ImageIO.getImageReadersBySuffix(后缀);
if(iter.hasNext()){
ImageReader=iter.next();
试一试{
ImageInputStream=新文件ImageInputStream(新文件(路径));
reader.setInput(流);
int-width=reader.getWidth(reader.getMinIndex());
int height=reader.getHeight(reader.getMinIndex());
结果=新尺寸(宽度、高度);
}捕获(IOE异常){
日志(如getMessage());
}最后{
reader.dispose();
}
}否则{
日志(“未找到给定格式的读取器:“+后缀”);
}
返回结果;}
但是,我不知道如何将其转换为可以在URL对象上使用的内容


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

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


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

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

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


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

注意,您的代码正在读取本地文件。