【问题标题】:Extract image's width, height, color and type from byte array从字节数组中提取图像的宽度、高度、颜色和类型
【发布时间】:2013-06-19 10:41:33
【问题描述】:

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

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

【问题讨论】:

  • 仅使用字节数组上的按位运算来提取此类信息是一项艰巨的任务。我会为此使用一些库。
  • 创建某种图像(可能使用ImageIO)并提取图像属性
  • @Simon 我在使用库时没有任何问题。

标签: java image


【解决方案1】:

使用 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();

    }

}

【讨论】:

  • 你能给我一个代码sn-p吗?我真的很感激。
  • 尤其是颜色部分。
  • 感谢您的编辑。颜色信息呢? BufferedImage 可以吗?谢谢。
  • 查看编辑。 ColorModel 拥有所有与颜色相关的信息。 Api 文档是docs.oracle.com/javase/6/docs/api/java/awt/image/…
  • 谢谢。如果可能的话,请告诉我应该如何获得type,例如 png、jpeg 等。
【解决方案2】:

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

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

灵感来自:

Convert Byte Array to image in Java - without knowing the type

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 2015-09-04
    • 1970-01-01
    • 2013-05-31
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多