首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何用java获取图片的高度和宽度?

如何用java获取图片的高度和宽度?
EN

Stack Overflow用户
提问于 2009-03-23 10:48:34
回答 11查看 227.1K关注 0票数 118

除了使用ImageIO.read获取图像的高度和宽度之外,还有其他方法吗?

因为我遇到了一个锁定线程的问题。

代码语言:javascript
复制
at com.sun.medialib.codec.jpeg.Decoder.njpeg_decode(Native Method)      
at com.sun.medialib.codec.jpeg.Decoder.decode(Decoder.java:87)      
at com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader.decode(CLibJPEGImageReader.java:73)     
 - locked <0xd96fb668> (a com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader)      
at com.sun.media.imageioimpl.plugins.clib.CLibImageReader.getImage(CLibImageReader.java:320)    
 - locked <0xd96fb668> (a com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader)     
 at com.sun.media.imageioimpl.plugins.clib.CLibImageReader.read(CLibImageReader.java:384)   
 - locked <0xd96fb668> (a com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader)      
at javax.imageio.ImageIO.read(ImageIO.java:1400)      
at javax.imageio.ImageIO.read(ImageIO.java:1322)

此错误仅发生在Sun应用程序服务器上,因此我怀疑这是一个Sun bug。

EN

回答 11

Stack Overflow用户

发布于 2012-02-01 01:17:39

这里有一些非常简单和方便的东西。

代码语言:javascript
复制
BufferedImage bimg = ImageIO.read(new File(filename));
int width          = bimg.getWidth();
int height         = bimg.getHeight();
票数 314
EN

Stack Overflow用户

发布于 2012-08-29 00:57:34

这是@Kay对这篇很棒的文章的重写,它抛出了IOException,并提供了一个提前退出:

代码语言:javascript
复制
/**
 * Gets image dimensions for given file 
 * @param imgFile image file
 * @return dimensions of image
 * @throws IOException if the file is not a known image
 */
public static Dimension getImageDimension(File imgFile) throws IOException {
  int pos = imgFile.getName().lastIndexOf(".");
  if (pos == -1)
    throw new IOException("No extension for file: " + imgFile.getAbsolutePath());
  String suffix = imgFile.getName().substring(pos + 1);
  Iterator<ImageReader> iter = ImageIO.getImageReadersBySuffix(suffix);
  while(iter.hasNext()) {
    ImageReader reader = iter.next();
    try {
      ImageInputStream stream = new FileImageInputStream(imgFile);
      reader.setInput(stream);
      int width = reader.getWidth(reader.getMinIndex());
      int height = reader.getHeight(reader.getMinIndex());
      return new Dimension(width, height);
    } catch (IOException e) {
      log.warn("Error reading: " + imgFile.getAbsolutePath(), e);
    } finally {
      reader.dispose();
    }
  }

  throw new IOException("Not a known image file: " + imgFile.getAbsolutePath());
}

我猜我的名气还不够高,不足以让我的意见被认为值得作为回复。

票数 79
EN

Stack Overflow用户

发布于 2013-02-15 12:08:38

我尝试使用列出的一些不同的方法来测试性能。由于影响结果的因素很多,很难进行严格的测试。我准备了两个文件夹,一个包含330个jpg文件,另一个包含330个png文件。两种情况下的平均文件大小都是4Mb。然后,我为每个文件调用getDimension。getDimension方法和每种图像类型的每个实现都分别进行了测试(单独运行)。下面是我得到的执行时间(第一个数字是jpg,第二个数字是png):

代码语言:javascript
复制
1(Apurv) - 101454ms, 84611ms
2(joinJpegs) - 471ms, N/A
3(Andrew Taylor) - 707ms, 68ms
4(Karussell, ImageIcon) - 106655ms, 100898ms
5(user350756) - 2649ms, 68ms

很明显,一些方法加载整个文件是为了获取尺寸,而另一些方法只是从图像中读取一些头信息。我认为当应用程序性能非常关键时,这些数字可能会很有用。

感谢大家对这个帖子的贡献--非常有用。

票数 54
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/672916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档