将图像转换为二进制字符串

时间:2015-11-06 16:34:35

标签: java loops bufferedimage

我正在尝试将图像的每个像素连接在一起以形成二进制字符串。 但是,以下代码不会产生任何结果。 如果我将System.out.println放在//位置,它会打印出一些东西,但我确定这是不正确的。

我认为这是关于循环的......

这是什么问题? 我该如何修改我的代码?

public static void main(String[] argv){

    BufferedImage img1 = null;

    try {
        img1 = ImageIO.read(new File("/Users/Sam/Desktop/Image2/00001.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }

    int width1 = img1.getWidth();
    int height1 = img1.getHeight();

    String con = "";

    for (int i = 0; i < height1; i++) {
        for (int j = 0; j < width1; j++) {
            int rgb1 = img1.getRGB(j, i);

            con += Integer.toBinaryString(rgb1);          

        }
         //System.out.println(con);

    }
     System.out.println(con);

}

2 个答案:

答案 0 :(得分:1)

这是我们用来将图像文件序列化为字符串的类,因此我们可以将图像嵌入到html文件中。

import org.apache.commons.codec.binary.BinaryCodec;

import java.io.IOException;
import java.io.InputStream;

public class ImageUtil {

    public static String getEmbeddedImage(String resourcePath)  {
        InputStream is = null;
        try {
            is = ImageUtil.class.getClassLoader().getResourceAsStream(resourcePath);
            if (is != null) {
                byte buffer[] = new byte[is.available()];
                String fileExtension = getImageTypeFromFileName(resourcePath);
                String encodedImage = BinaryCodec.toAsciiString(buffer);
                encodedImage = "data:image/".concat(fileExtension).concat(encodedImage);
                return encodedImage;
            }
        } catch(IOException e) {
        } finally {
            if(is != null) {
                try { is.close(); } catch(IOException e) {}
            }
        }
        return  null;
    }

    public static String getImageTypeFromFileName(String imagePath) {
        String parts[] = imagePath.split("\\.");
        return parts[parts.length-1].toLowerCase();
    }
}

答案 1 :(得分:0)

ImageIO并不保证您的图片会在返回时加载。

您应该使用ImageObserverMediaTracker来检查文件是否已加载。 你可能需要等待!

在循环执行时,您是否检查过width1height1是否为合理值?