转换为 JPEG 时损坏的 HEIC 图块

corrupted HEIC tile when converting to JPEG

我在将 .HEIC 图像转换为 jpeg 时遇到问题。 .HEIC 文件是使用 iphone 运行 最新 ios public 测试版拍摄的图像。我正在使用 library nokia provided 解析文件并从 .HEIC 文件中提取图像块,将它们转换为 jpeg 并使用 ffmpeg/montage.

将它们粘合在一起

代码太多,无法将其全部粘贴到这个问题中,所以我将所有代码都放在这个 github repo 中。它非常不言自明,只需几个依赖项就可以运行。它们在 repo 的 README 中有解释。这一切都在 osx 顺便说一句。

.HEIC 文件包含一个 8x6 的图像网格(图块),如果将它们放在一起,您将获得完整的图像。简单地说,我输入的第 7 个图块的任何图像都已损坏,如下所示,我真的不明白为什么。我已经向诺基亚提交了一个问题,但是 repo 似乎已经死了,我真的不希望那里有答案。

第 7 个图块的 VPS/SPS/PPS 参数集中存在错误。我没有查明问题出在实际文件中还是出在 HEIF 解析器中,但同时有一个简单的解决方法。

参考 HevcImageFileReader::getItemDataWithDecoderParameters 并观察它如何将参数集添加到每个图块的实际项目数据中。

您需要做的就是读取第一个图块的参数集并将它们重新用于后续图块,而不是重新读取它们。这将解决来自第 7 个图块的损坏参数。这样做似乎是安全的,因为这是一种网格格式,要求每个图块都相同。