如何通过在Java中读取URL来了解图像是否存在?

时间:2013-03-08 11:49:57

标签: java image

http://nichehire.com/Nichehire/upload/img_job_photo_burhan393@gmail.com.jpg

我需要知道给定的URL是否存在图像。 为此,我使用下面的代码。在下面的代码中,如果没有错误发生,我返回true,如果URL不包含图像,则返回false。 但是上面给出的URL即使返回true也不包含图像。 我的代码有问题吗?

public static boolean exists(String URLName) {
    boolean result = false;
    try {
        InputStream input = (new URL(URLName)).openStream();
        result = true;
    } catch (IOException ex) {
        System.out.println("Image doesnot exits :");
    }   
    return result;
} 

4 个答案:

答案 0 :(得分:3)

  

..图像是否存在..

ImageIO.read(URL)

这确实是 唯一 方式,以确保:

  1. 网址指向某些内容(不返回HTTP 404)
  2. 服务器允许访问资源(例如,不返回HTTP 500)
  3. URL末尾的数据实际上代表一个图像(如Java所理解的),而不是重命名为some.gif的文本文件。

答案 1 :(得分:1)

try
    boolean isImage(String image_path){
    Image image = new ImageIcon(image_path).getImage();
    if(image.getWidth(null) == -1){
         return false;
    }
    else{
         return true;
    }
}

Image Magick project具有识别图像的功能,并且Image Magick的Java包装器名为JMagick,我认为您可能需要考虑而不是重新发明轮子:

我一直在使用Image Magick,包括命令行中的“识别”功能,它一旦识别图片就永远不会失败。回到我绝对需要该功能并且JMagick不存在的日子我已经习惯了Runtime.exec()来自Java的ImageMagick的识别命令,它完美地工作了。现在JMagick存在,这可能不再是必要的了(但我还没有尝试过JMagick)。

请注意,它提供的不仅仅是格式,例如:

$  identify tmp3.jpg 
tmp3.jpg JPEG 1680x1050 1680x1050+0+0 DirectClass 8-bit 293.582kb 

$  identify tmp.png
tmp.png PNG 1012x900 1012x900+0+0 DirectClass 8-bit 475.119kb 

答案 2 :(得分:1)

[求助]此源代码工作正常!

String url1 = "https://fbcdn-dragon-a.akamaihd.net/hphotos-ak-xft1/t39.1997-6/p200x200/851575_126362190881911_254357215_n.png";

Image image = ImageIO.read(new URL(url1));
if(image != null){
    System.out.println("IMAGE"); 
}else{
    System.out.println("NOT IMAGE"); 
}

答案 3 :(得分:0)

那是因为您假设任何返回的响应都是图像,尽管您的URL可以返回任何内容,HTML,JSON ......任何内容。