从二进制获取图像尺寸和图像大小

Posted

技术标签:

【中文标题】从二进制获取图像尺寸和图像大小【英文标题】:Get Image Dimension and Image Size from Binary 【发布时间】:2013-08-29 09:32:28 【问题描述】:

我正在做一个需要一些图像处理的项目。

网页客户端将提交jpg、png、gif tif格式的图片。服务器端需要找出图片的维度和大小。

我可以看到一些 Java 类通过处理图像文件来实现这一点。有什么方法/库可以用来避免将二进制文件保存到文件中并仍然获得维度?

非常感谢

【问题讨论】:

当你说你确定尺寸时,它是宽度和高度还是以 kb 为单位的大小? @GGrec 好吧,让我们现在等待答案;) How to get image height and width using java?的可能重复 不看图,见***.com/a/2911772/1428606 【参考方案1】:

如果您需要知道图像的大小(以字节为单位),您可以简单地进行如下操作:

byte[] imgBytes = // get you image as byte array
int imgSize = imgBytes.length;

如果您还想知道图像的宽度和高度,可以这样做,例如:

BufferedImage img = ImageIO.read(new ByteArrayInputStream(imgBytes));

而不是使用getWidth()getHeight() 方法。

【讨论】:

【参考方案2】:
File imageFile = new File("Pic.jpg");

double bytes = imageFile.length();

System.out.println("File Size: " + String.format("%.2f", bytes/1024) + "kb");

try

    BufferedImage image = ImageIO.read(imageFile);
    System.out.println("Width: " + image.getWidth());
    System.out.println("Height: " + image.getHeight());

 catch (Exception ex)
    ex.printStackTrace();

【讨论】:

感谢您的回答。我没有要处理的文件。图像以二进制形式出现。 @Kevin 您必须读取所有字节。这可能会有所帮助:java2s.com/Tutorial/Java/0180__File/GetbytesfromInputStream.htm【参考方案3】:

如果您不再对图像进行任何操作,您可以尝试使用com.drewnoakes.metadata-extractor 库。

此外,ImageIO.read() 可以知道有一些性能问题。

【讨论】:

【参考方案4】:

您可以基于InputStream 创建图像,然后您知道它的尺寸(@Marc,@GGrec 我假设“大小”是指“尺寸”):

    BufferedImage image = ImageIO.read(in);
    int width = image.getWidth();
    int height = image.getHeight();

【讨论】:

以上是关于从二进制获取图像尺寸和图像大小的主要内容,如果未能解决你的问题,请参考以下文章

使用python从二进制图像中裁剪感兴趣区域

从二值图像中提取白色区域

从二进制数据流中构造GDAL能够读取的图像数据

从二进制图像OpenCV C++中裁剪文本

使用和不使用 NI Vision 从二进制缓冲区/文件创建 LabVIEW IMAQ 图像

当形状未闭合时从二进制图像中检测圆形和椭圆