如何将图像转换为Java中的字节数组?

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

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中隐藏文本来处理这些字节,或者按照你想要的方式处理。

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

 import java.nio.file.Files; import java.io.File; File fi = new File("myfile.jpg"); byte[] fileContent = Files.readAllBytes(fi.toPath()) 
 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(); 

试试这个代码片段

 BufferedImage image = ImageIO.read(new File("filename.jpg")); // Process image ImageIO.write(image, "jpg", new File("output.jpg")); 

查看javax.imageio ,特别是ImageReaderImageWriter作为读取和写入图像文件的抽象。

BufferedImage.getRGB(int x, int y)比您可以获得给定像素上的RGB值,该像素可以被分块为字节。

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

这里是完成这个代码的完整版本。 我已经testing过了。 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")); } } 

参考链接

试试这个代码:

 public class ImageTest { public static void main(String[] args) { try { byte[] imageInByte; BufferedImage originalImage = ImageIO.read(new File( "c:/darksouls.jpg")); // convert BufferedImage to byte array ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(originalImage, "jpg", baos); baos.flush(); imageInByte = baos.toByteArray(); baos.close(); // convert byte array back to BufferedImage InputStream in = new ByteArrayInputStream(imageInByte); BufferedImage bImageFromConvert = ImageIO.read(in); ImageIO.write(bImageFromConvert, "jpg", new File( "c:/new-darksouls.jpg")); } catch (IOException e) { System.out.println(e.getMessage()); } } } 

java.io.FileInputStream是你在找什么:-)

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

使用RandomAccessFile将是简单和方便的。

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