从字节数组中提取图像的宽度、高度、颜色和类型

15

我在Java代码中有一个byte[]数组格式的图像,我想从这个数组中提取以下信息。如何尽快完成呢?

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

1
使用位运算符从字节数组中提取这种信息是一项艰巨的任务。我会使用一些库来完成这个任务。 - Simon
创建某种类型的图像(可能使用 ImageIO),并提取图像属性。 - MadProgrammer
@Simon 我使用库没有任何问题。 - Alireza Noori
2个回答

18

使用ImageIO以缓冲图像的方式读取所需内容。请参阅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();

    }

}

你能给我一个代码片段吗?我会非常感激。 - Alireza Noori
特别是颜色部分。 - Alireza Noori
谢谢您的编辑。颜色信息怎么样?BufferedImage可以实现吗?谢谢。 - Alireza Noori
请查看编辑。ColorModel 包含所有与颜色相关的信息。API 文档链接为 http://docs.oracle.com/javase/6/docs/api/java/awt/image/ColorModel.html。 - abhinav
谢谢。如果可能的话,请告诉我如何获取实例的“类型”,例如png、jpeg等。 - Alireza Noori
看一下这个API。我从来没有做过这个。 - abhinav

7

要从字节数组中获取图像类型,你可以这样做:

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中将字节数组转换为图像 - 不需要知道类型


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接