从 bytearray 获取 bufferedImage

getting a bufferedImage from a bytearray

我正在尝试从 array of bytes 取回 bufferedImage,但我收到一条错误消息 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() 是我的代码出错的地方。

试试这个 code.Maybe 它有效。它对我有用。

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);

只需将字节、宽度和高度添加到代码中并自定义即可。

错误出在您在评论中发布的 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());