【问题标题】:How does ImageIO determine the dimension of images?ImageIO 如何确定图片的尺寸?
【发布时间】:2013-11-30 21:00:59
【问题描述】:

我下载了一段包含这一行的代码:

BufferedImage imag=ImageIO.read(new ByteArrayInputStream(bytearray))

其中 bytearray 的类型为 byte[]。

ImageIO.read 如何从 1 个暗字节数组中知道图像的尺寸? 例如如果 bytearray 的长度为 30,它如何知道它是 3x10 或 5x6 还是 1x30 的图像?

整个源码是here,看“方法二”。

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;


public class SimpleConvertImage {
    public static void main(String[] args) throws IOException{
        String dirName="C:\\";
        ByteArrayOutputStream baos=new ByteArrayOutputStream(1000);
        BufferedImage img=ImageIO.read(new File(dirName,"rose.jpg"));
        ImageIO.write(img, "jpg", baos);
        baos.flush();

        String base64String=Base64.encode(baos.toByteArray());
        baos.close();

        byte[] bytearray = Base64.decode(base64String);
            // *The following line*
        BufferedImage imag=ImageIO.read(new ByteArrayInputStream(bytearray));
        ImageIO.write(imag, "jpg", new File(dirName,"snap.jpg"));
    }
}

【问题讨论】:

  • “ImageIO.read如何知道维度”通过解析流中包含的数据。
  • 字节数组是否将该信息存储在其标头中?

标签: java image-processing bytearray javax.imageio


【解决方案1】:

每种图像文件格式都有自己的标题。通常,图像的宽度和高度在文件的标题中定义。 ImageIO 为您处理数据,因此您无需担心。如果您想了解更多详细信息,请查看每种图像格式的规范。

PNG >> Header Specification


现在,如果你想访问 BufferedImage 的宽度和高度,那么试试这个

    ... //after getting a BufferedImage from ImageIO.read() and storing it into image
    int imageWidth = image.getWidth();
    int imageHeight = image.getHeight();

java.awt.image.BufferedImage#getWidth()

java.awt.image.BufferedImage#getHeight()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多