从bytearray获取bufferedImage

时间:2016-01-15 10:58:35

标签: java image bytearray bufferedimage

我正在尝试从bufferedImage取回array of bytes,但我收到错误bufferedimage is null。我实际上尝试过几种方式,一切都以同样的方式结束。这是我的代码:

1)

 byte[] arr = Base64.decode(base64String);
 BufferedImage bImageFromConvert =ImageIO.read(new  ByteArrayInputStream(arr));

2)

 InputStream in = new ByteArrayInputStream(arr);
 BufferedImage bImageFromConvert = ImageIO.read(in);

我很确定我的字节数组包含数据,我认为ImageIO.read()是我的代码出错的地方。

2 个答案:

答案 0 :(得分:0)

试试这个代码。也许它有效。它对我有用。

byte[] aByteArray = {};
    int width = ;
    int height = ;

    DataBuffer buffer = new DataBufferByte(aByteArray, aByteArray.length);

    WritableRaster raster = Raster.createInterleavedRaster(buffer, width, height, 3 * width, 3, new int[] {0, 1, 2}, (Point)null);
    ColorModel cm = new ComponentColorModel(ColorModel.getRGBdefault().getColorSpace(), false, true, Transparency.OPAQUE, DataBuffer.TYPE_BYTE); 
    BufferedImage image = new BufferedImage(cm, raster, true, null);

只需将字节,宽度和高度添加到代码中并进行自定义。

答案 1 :(得分:0)

错误在您的BufferedImageBase64编码方法中,就像您在评论中发布的一样。

您永远不会将BufferedImage写入ByteArrayOutputStream。因此,Base64字符串为空,读取空字符串会产生null BufferedImage

您应该使用此代码对图像进行编码:

 BufferedImage originalImage = ImageIO.read(new File("G:\\a.jpg"));
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 ImageIO.write( originalImage, "jpg", baos );
 String base64String=Base64.encode(baos.toByteArray());

要解码图像,请使用以下代码:

 byte[] arr = Base64.decode(base64String);
 BufferedImage bImageFromConvert =ImageIO.read(new ByteArrayInputStream(arr));
 System.out.println(bImageFromConvert.getWidth());