如何将图像转换为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
,特别是ImageReader
和ImageWriter
作为读取和写入图像文件的抽象。
BufferedImage.getRGB(int x, int y)
比您可以获得给定像素上的RGB值,该像素可以被分块为字节。
注意:我认为你不想读取原始字节,因为那样你就必须处理所有的压缩/解压缩。
这里是完成这个代码的完整版本。 我已经testing过了。 BufferedImage
和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); 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();