如何在java中将图像转换为字节数组?

use*_*erv 62 java image bytearray

我想将图像转换为字节数组,反之亦然.在这里,用户将输入图像的名称(.jpg),程序将从文件中读取它并将其转换为字节数组.

Waj*_*sam 65

BufferedImage包含两个主要类:Raster和ColorModel.光栅本身由两个类组成,DataBufferByte用于图像内容,而另一个用于像素颜色.

如果您想要DataBufferByte中的数据,请使用:

public byte[] extractBytes (String ImageName) throws IOException {
 // open image
 File imgPath = new File(ImageName);
 BufferedImage bufferedImage = ImageIO.read(imgPath);

 // get DataBufferBytes from Raster
 WritableRaster raster = bufferedImage .getRaster();
 DataBufferByte data   = (DataBufferByte) raster.getDataBuffer();

 return ( data.getData() );
}
Run Code Online (Sandbox Code Playgroud)

现在你可以通过隐藏lsb中的文本来处理这些字节,或者按照你想要的方式处理它.

  • 对不起,但这个答案是无稽之谈.从图像文件获取字节与从任意文件获取字节没有什么不同.您根本不需要Java 2D API.这种方法很笨拙,只有当你真正感兴趣**以某种方式操纵图像(调整大小,裁剪,着色等)时才有必要.只需使用`Files#readAllBytes()`或任何其他通常用于任意文件的理智方式. (5认同)
  • 图像处理的上下文. (2认同)

Dar*_*ard 65

如果您使用的是JDK 7,则可以使用以下代码.

import java.nio.file.Files;
import java.io.File;

File fi = new File("myfile.jpg");
byte[] fileContent = Files.readAllBytes(fi.toPath())
Run Code Online (Sandbox Code Playgroud)

  • 你真了不起,你救了我的命 (2认同)

小智 29

File fnew=new File("/tmp/rose.jpg");
BufferedImage originalImage=ImageIO.read(fnew);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
ImageIO.write(originalImage, "jpg", baos );
byte[] imageInByte=baos.toByteArray();
Run Code Online (Sandbox Code Playgroud)


McK*_*McK 6

试试这段代码

BufferedImage image = ImageIO.read(new File("filename.jpg"));

// Process image

ImageIO.write(image, "jpg", new File("output.jpg"));
Run Code Online (Sandbox Code Playgroud)


Rya*_*yan 6

以下是执行此操作的完整代码版本.我测试了它.在BufferedImageBase64类主要做的伎俩.还需要正确设置一些参数.

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);

        BufferedImage imag=ImageIO.read(new ByteArrayInputStream(bytearray));
        ImageIO.write(imag, "jpg", new File(dirName,"snap.jpg"));
    }
}
Run Code Online (Sandbox Code Playgroud)

参考链接