【问题标题】:Convert image and audio files to binary in Java在 Java 中将图像和音频文件转换为二进制文件
【发布时间】:2011-10-05 20:32:45
【问题描述】:

我想将图像和音频文件转换为二进制流,对其进行处理,然后从 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"));

【问题讨论】:

    标签: image image-processing binary


    【解决方案1】:

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

    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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 2020-06-05
      • 2018-03-20
      • 2016-05-15
      相关资源
      最近更新 更多