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

时间:2010-07-09 08:51:01

标签: java image bytearray

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

9 个答案:

答案 0 :(得分:63)

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

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

答案 1 :(得分:60)

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

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

File fi = new File("myfile.jpg");
byte[] fileContent = Files.readAllBytes(fi.toPath())

答案 2 :(得分:27)

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

答案 3 :(得分:6)

试试此代码段

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

// Process image

ImageIO.write(image, "jpg", new File("output.jpg"));

答案 4 :(得分: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"));
    }
}

Reference link

答案 5 :(得分:3)

查看javax.imageio,尤其是ImageReaderImageWriter,作为阅读和编写图像文件的抽象。

BufferedImage.getRGB(int x, int y)允许您在给定像素上获取RGB值,这些值可以分块为字节。

注意:我认为您不想读取原始字节,因为那时您必须处理所有压缩/解压缩。

答案 6 :(得分:2)

java.io.FileInputStream正在寻找: - )

答案 7 :(得分:0)

我认为最好的方法是首先将文件读入字节数组,然后使用ImageIO.read()将数组转换为图像

答案 8 :(得分:0)

使用RandomAccessFile会很简单方便。

RandomAccessFile f = new RandomAccessFile(filepath, "r");
byte[] bytes = new byte[(int) f.length()];
f.read(bytes);
f.close();