【问题标题】:getting a bufferedImage from a bytearray从 bytearray 获取 bufferedImage
【发布时间】:2016-01-15 10:58:35
【问题描述】:

我正在尝试从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() 是我的代码出错的地方。

【问题讨论】:

  • pretty sure 是什么意思?你试过记录数组的长度吗?
  • 我尝试打印字节数组
  • 你能发布如何将图像转换为 Base64String 的代码吗?
  • ' BufferedImage originalImage = ImageIO.read(new File("G:\\a.jpg")); ByteArrayOutputStream baos = new ByteArrayOutputStream();字符串 base64String=Base64.encode(baos.toByteArray()); '
  • 你使用的Base64库的包名是什么?

标签: java image bytearray bufferedimage


【解决方案1】:

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

【讨论】:

  • 其实,直接将a.jpg的内容用Base64编码(读入内容到byte 数组),而不是使用 ImageIO 将 JPEG 重新编码为字节数组。 :-)
【解决方案2】:

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

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

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

【讨论】:

  • 我太笨了,如何获取宽度和高度
  • 你不应该得到它。你应该添加你想成为的人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 2014-08-05
  • 1970-01-01
  • 2021-04-05
  • 2012-07-11
  • 2013-11-06
相关资源
最近更新 更多