Поврежденная плитка HEIC при конвертации в JPEG

У меня проблемы с преобразованием изображения.HEIC в формат JPEG. Файл.HEIC - это изображение, снятое на iphone с последней публичной бета-версией ios. Я использую библиотеку nokia, предоставленную для синтаксического анализа файла и извлечения фрагментов изображения из файла.HEIC, преобразования их в формат jpeg и склеивания их вместе с помощью ffmpeg/montage.

Слишком много кода, чтобы вставить все это в этот вопрос, поэтому я поместил все это в репозиторий github. Это довольно понятно и должно быть работоспособным с несколькими зависимостями. Они объяснены в README репо. Это все было сделано на OSX кстати.

Файлы.HEIC содержат сетку 8x6 изображений (плиток), и если вы соберете их вместе, вы получите полное изображение. Просто поместите любое изображение, которое я ввел, 7-й фрагмент поврежден, как показано ниже, и я действительно не понимаю, почему. Я подал проблему с nokia, но репозиторий кажется довольно мертвым, и я не ожидаю ответа там.

1 ответ

Решение

В наборе параметров VPS/SPS/PPS в 7-м тайле есть ошибка. Я не отслеживал, лежит ли проблема в самом файле или в синтаксическом анализаторе HEIF, но тем временем существует простой обходной путь.

Обратитесь к HevcImageFileReader::getItemDataWithDecoderParameters и посмотрите, как он добавляет наборы параметров к фактическим данным элемента для каждой плитки.

Все, что вам нужно сделать, это прочитать наборы параметров для первого тайла и повторно использовать их для последующих тайлов, а не перечитывать их. Это будет работать вокруг поврежденных параметров, идущих от 7-го тайла. Это кажется безопасным, поскольку это формат сетки, и требование состоит в том, чтобы каждая плитка была идентичной.

Другие вопросы по тегам