12

byte[]我的Java 代码中有一个数组格式的图像。我想要从该数组中提取以下信息。我怎样才能尽可能快地做到这一点。

  • 宽度
  • 高度
  • 颜色(黑白,彩色还是透明?如果是彩色,主要颜色是什么?)
  • 类型(图像是 PNG、GIF、JPEG 等)
4

2 回答 2

16

使用 ImageIO 读取缓冲图像,然后获取您想要的相关内容。请参阅http://docs.oracle.com/javase/6/docs/api/javax/imageio/ImageIO.html上的 java 文档。

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;


public class Test {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        // assuming that picture is your byte array
        byte[] picture = new byte[30];

        InputStream in = new ByteArrayInputStream(picture);

        BufferedImage buf = ImageIO.read(in);
        ColorModel model = buf.getColorModel();
        int height = buf.getHeight();

    }

}
于 2013-06-19T10:45:43.143 回答
6

要从字节数组中获取图像类型,您可以执行以下操作:

byte[] picture = new byte[30];
ImageInputStream iis = ImageIO.createImageInputStream(new ByteArrayInputStream(picture));

Iterator<ImageReader> readers = ImageIO.getImageReaders(iis);
while (readers.hasNext()) {
    ImageReader read = readers.next();
    System.out.println("format name = " + read.getFormatName());
}

这是我对不同文件的输出:

format name = png
format name = JPEG
format name = gif

它的灵感来自:

在 Java 中将字节数组转换为图像 - 不知道类型

于 2014-09-30T14:03:32.587 回答