【问题标题】:Failure to read JPEG file from byte[]无法从 byte[] 读取 JPEG 文件
【发布时间】:2012-08-06 19:44:18
【问题描述】:

有没有人遇到过在 java 中加载 JPEG 文件的问题?我们的一位客户正在发送无法解析的文件,但这些相同的文件可以在 Windows 中打开。 (我们收到的其他 99% 的 jpeg 文件,处理没有任何问题)

我尝试了几个库来阅读这些:

itextpdf : com.itextpdf.text.Jpeg (getInstance(imageData) - gives  "java.io.IOException: Premature EOF while reading JPG."
sanselan : org.apache.sanselan.ImageInfo ( Sanselan.getImageInfo(imageData) gives "java.io.IOException: Invalid Segment: insufficient data")
where imageData is a byte[]

这里的错误表明 jpeg 已损坏,但这并不能解释为什么它们仍然可见。

如果有人有任何建议,我将不胜感激

谢谢

【问题讨论】:

  • 您是否尝试使用绘画来减小图片大小?
  • 检查编码问题。可能在两端。您或您的客户可能会使用某个类(可能是Reader)来根据语言环境/编码转换字节,从而破坏数据。
  • “这并不能解释为什么它们仍然可见。” 什么应用程序在什么操作系统上?请注意,大多数图像查看器会竭尽全力从损坏的图像文件中猜测图像数据。
  • 我会尝试使用一些强大的图像处理工具来转换图像,例如GraphicsMagickImageMagick。只需将有问题的 JPG 文件转换为新的 JPG 文件并尝试处理它。有问题的 JPG 可能是非标准的或损坏的,但一些强大的解码器可能能够处理这个问题(可能这就是它们可见的原因)。这只是一种解决方法,但它可能会有所帮助。
  • 您对@Petr 和我自己的最新cmets 正在形成自己的答案。也许你应该输入一个答案,现在你知道更多了。

标签: java image bytearray itext jpeg


【解决方案1】:

我所寻求的“解决方案”是运行我们通过当前进程接收到的字节数组来识别类型。如果这无法识别类型,那么我将字节数组强制保存为 JPEG。然后可以通过当前进程重新读取并推回它。

有点老套,但这只是几个月的工作。

在这里感谢大家的帮助!

【讨论】:

  • 我也遇到了同样的问题。你是如何解决这个问题的?任何帮助将不胜感激。谢谢,
  • @ashishjmeshram - 恐怕很久以前我实际上“修复”了这个问题。但如果我没记错的话,我只是把进来的字节流输出到服务器上的一个临时文件,然后重新读取那个文件。几乎不是我所说的解决方案......但它可以达到目的。
猜你喜欢
  • 2013-10-14
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多