【问题标题】:byte[] to jpg image?字节 [] 到 jpg 图像?
【发布时间】:2020-07-13 22:04:37
【问题描述】:

我有以下代码,将图像转换为字节[]:

BufferedImage image = ImageIO.read(new File("Path/To/Custom/image.jpg"));
ByteArrayOutputStream baos=new ByteArrayOutputStream(1000);
ImageIO.write(image, "jpg", baos);
byte[] imageBytes = baos.toByteArray();

这段代码工作得很好,至少我得到了一个包含不同值的字节数组。但是现在困难的部分来了:必须再次将 byte[] 重建为 am 图像。以下代码不起作用,ImageIO.read(...) 返回 null。我阅读了文档,但仍然找不到要更改的内容以使代码按我想要的方式运行。

ByteArrayInputStream ba = new ByteArrayInputStream(imageBytes);
BufferedImage image = ImageIO.read(ba);
//image is always null, no matter what the stream or the byte values are.

【问题讨论】:

  • 能否尝试将 ImageIO.read() 放入 try-catch-block 中并告诉我们是否发生错误,如果发生错误,是哪一个?
  • 抱歉,不够具体。我已经在 try catch 中测试过了,但也不例外。 ImageIO.read(...) 只是返回 null,但原始图像不为 null。这里的代码很短,可以简化事情。

标签: java image byte


【解决方案1】:
import java.io.ByteArrayOutputStream;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class ByteArrayToImage {
   public static void main(String args[]) throws Exception {
      BufferedImage bImage = ImageIO.read(new File("sample.jpg"));
      ByteArrayOutputStream bos = new ByteArrayOutputStream();
      ImageIO.write(bImage, "jpg", bos );
      byte [] data = bos.toByteArray();
      ByteArrayInputStream bis = new ByteArrayInputStream(data);
      BufferedImage bImage2 = ImageIO.read(bis);
      ImageIO.write(bImage2, "jpg", new File("output.jpg") );
      System.out.println("image created");
   }
}

根据您的需要修改它。

【讨论】:

  • 您的代码有效,我的无效。但我看不出有什么区别?
  • 老实说,我不知道有什么区别。我只是从记忆中输入了我通常做的事情
  • 好的,这也是我认为它必须工作的方式。我用了你的代码(实际上和我的一样^^)并测试了它。有效。之后,我将 byte[] 包含到动态字节数组中,然后重新读取它。之后它没有工作。也许流必须引用相同的字节[]?
  • 这个“动态字节数组”是什么?您能否在问题中包含您使用的代码@F_Schmidt
  • 好吧,这是我的错误。我的代码的不同部分有错误。这段代码 sn-p 就像一个魅力。只是一个可能有用的提示:我正在使用它来创建二进制网络协议,但为此我使用 ImageIO.write(bImage, "png", bos ); 而不是 jpg,因为 png 是一种广泛传播的格式。也许它可以帮助某人;)
【解决方案2】:

尝试在ImageIO.read() 上读取ByteArrayInputStream 而不是ByteArrayOutputstream

【讨论】:

  • 你的眼光不错!但这不是错误,它只是在 stackoverflow 中的复制粘贴失败;)
  • 你需要 BufferedImage 做什么?
  • 我想逐字节写入图像并将它们发送到服务器。我知道我可以只使用 DataOutputStream,但我不喜欢那个解决方案。我真的很想创建这个图像 -> 字节和字节 -> 图像转换。
  • 但是你确定文件真的存在并且被找到了吗?
  • 阅读这篇文章,也许对你有帮助:(但我不确定)stackoverflow.com/a/9944029/13189807
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多