2016-06-09 77 views
0

Is there any way in Java to take image width and height without transfer or download?如何在不下载完整图像的情况下从网址获取图片宽度和高度?

提及使用ImageIO的一种方式,但ImageIO的是不是可以在Android。

Android有BitmapFactory,它可以对图像进行解码以获得宽度和高度,而不需要将整个图像加载到内存中,但它只适用于文件。

所以这个问题是在Android上,有没有一种方法可以从网址获取图像的宽度和高度,而无需下载整个图像?

+0

看看这个答案:http://stackoverflow.com/questions/16440863/can-i-get-image-file-width-and-height-from-uri-in-android/16440953#16440953 –

+0

我找到了选项。 inJustDecodeBounds = true仅适用于文件,如果InputStream来自URL,则无效。 – jiawen

回答

0

这是不可能的,没有下载图像。 BitmapFactory只有在下载完图像之后才能应用。

+0

如果我确定图像是JPEG格式,怎么办?宽度和高度编码在jpeg数据的头部,对不对?我可以只读头文件吗? – jiawen

0

有可能在Java中,使用ImageReader.getHeight(int)和ImageReader.getWidth(INT)通常只读取图像标题所以图像不完全下载,不知道它会在Android中运行:

public static Dimension getImageDimensionFromUrl(final URL url) 
      throws IOException { 

     try (ImageInputStream in = ImageIO.createImageInputStream(url.openStream())) { 
      final Iterator<ImageReader> readers = ImageIO.getImageReaders(in); 
      if (readers.hasNext()) { 
       final ImageReader reader = readers.next(); 
       try { 
        reader.setInput(in); 
        return new Dimension(reader.getWidth(0), reader.getHeight(0)); 
       } finally { 
        reader.dispose(); 
       } 
      } 
     } 

     return null; 
    } 
相关问题