用Java获取图像宽度和高度

时间:2013-08-13 13:03:37

标签: java image image-processing

我只是想问一下如何获取图像的宽度和高度,因为这会为宽度和高度返回-1:

private void resizeImage(Image image){
    JLabel imageLabel = new JLabel();

    int imageWidth = image.getWidth(null);
    int imageHeight = image.getHeight(null);
    System.out.println("Width:" + imageWidth);
    System.out.println("Height:" + imageHeight);
}

4 个答案:

答案 0 :(得分:3)

你应该这样做:

BufferedImage bimg = ImageIO.read(new File(filename));
int width          = bimg.getWidth();
int height         = bimg.getHeight(); 

正如post所说

答案 1 :(得分:0)

究竟为什么在您的情况下发生这种情况尚不清楚,您没有明确指出image实际上是什么。

无论如何,答案可以在JavaDoc

中找到
public abstract int getWidth(ImageObserver observer)
  

确定图像的宽度。如果宽度尚不知道,则此方法返回-1,稍后会通知指定的ImageObserver对象。

无法立即确定所讨论图像的宽度和高度。您需要传递一个ImageObserver实例,该实例将在可以解析高度和宽度时调用this方法。

答案 2 :(得分:0)

    public static BufferedImage resize(final Image image, final int width, final int height){
    assert image != null;
    final BufferedImage bi = new BufferedImage(width, height, image instanceof BufferedImage ? ((BufferedImage)image).getType() : BufferedImage.TYPE_INT_ARGB);
    final Graphics2D g = bi.createGraphics();
    g.drawImage(image, 0, 0, width, height, null);
    g.dispose();
    return bi;
}

上面发布的代码是调整图像大小的一种方法。通常,为了获得图像的宽度和高度,您可以这样做:

image.getWidth(null);
image.getHeight(null);

这一切都假设图像不为空。

答案 3 :(得分:0)

使用{{3}},您可以获得更好的图像宽度和高度,而无需将整个图像读取到内存中。

下面的示例代码使用的是Sanselan 0.97-incubator(当我写这篇文章时,Commons Imaging仍然是SNAPSHOT):

final ImageInfo imageInfo = Sanselan.getImageInfo(imageData);
int imgWidth = imageInfo.getWidth();
int imgHeight = imageInfo.getHeight();