2011-07-15 39 views
2

我想将图像和音频文件转换为二进制流,然后对其进行处理,然后使用Java重构来自同一二进制流的图像。我怎样才能做到这一点?有人有过这方面的工作吗?请尽快帮助我。任何提示或伪代码将高度赞赏。 这是我试图做到这一点,但它只是在重建图像时创建一个空文件。 对于图像二值: -在Java中将图像和音频文件转换为二进制

 File file = new File("E:\\image.jpg"); 
     BufferedImage img = ImageIO.read(file); 

     // write image to byte array in-memory (jpg format) 
     ByteArrayOutputStream b = new ByteArrayOutputStream(); 
     ImageIO.write(img, "jpg", b); 

     byte[] jpgByteArray = b.toByteArray(); 

     // convert it to a String with 0s and 1s 
     StringBuilder sb = new StringBuilder(); 
     for (byte by : jpgByteArray) { 
      sb.append(Integer.toBinaryString(by & 0xFF)); 

对于二进制图像: -

 byte[] original = obj.orig_seq.getBytes(); 

     InputStream in = new ByteArrayInputStream(original); 
     BufferedImage img = ImageIO.read(in); 

     ImageIO.write(img, "jpg", 
       new File("E:\\mypic_new.jpg")); 

回答

2

要使用二进制字符串,你可以使用这个

StringBuilder sb = new StringBuilder(); 
try (BufferedInputStream is = new BufferedInputStream(new FileInputStream("YourImage.jpg"))) { 
    for (int i; (i = is.read()) != -1;) { 
     String temp = "0000000" + Integer.toBinaryString(i).toUpperCase(); 
     if (temp.length() == 1) { 
      sb.append('0'); 
     } 
     temp = temp.substring(temp.length() - 8); 
     sb.append(temp).append(' '); 
    } 
} 
System.out.print(sb); 

,这里是你想要的输出

0000000 11111111 00000111 00011111 00101111 01111111

你也可以用十六进制,你的文件转换成一个简单的字符串是这样的(建议)

StringBuilder sb = new StringBuilder(); 
try (BufferedInputStream is = new BufferedInputStream(new FileInputStream("YourFile.txt"))) { 
    for (int i; (i = is.read()) != -1;) { 
     String temp = Integer.toHexString(i).toUpperCase(); 
     if (temp.length() == 1) { 
      sb.append('0'); 
     } 
     sb.append(temp).append(' '); 
    } 
} 
System.out.print(sb); 

,输出会是这样的

00 FF 07 1F 2F 7F 
相关问题