2017-08-03 8 views
4

Je rencontre des problèmes pour convertir une image .HEIC en jpeg. Le fichier .HEIC est une image prise avec un iphone exécutant la dernière beta publique d'ios. J'utilise le library nokia provided pour analyser le fichier et extraire les carreaux d'image du fichier .HEIC, les convertir en jpeg et les coller ensemble en utilisant ffmpeg/montage.tuile corrompue HEIC lors de la conversion en JPEG

Il ya un peu trop de code pour coller tout cela dans cette question, donc je mets tout dans ce github repo. C'est assez explicite et devrait être exécutable avec seulement quelques dépendances. Ils sont expliqués dans README du repo. Tout a été fait sur osx btw. Les fichiers .HEIC contiennent une grille d'images 8x6 (tuiles) et si vous les combinez, vous obtenez l'image complète. Il suffit de mettre n'importe quelle image que j'ai entré la 7ème tuile est corrompue comme indiqué ci-dessous et je ne comprends vraiment pas pourquoi. J'ai déposé un problème avec nokia, mais le repo semble assez mort et je ne m'attends pas vraiment à une réponse.

+0

compilé votre projet en exécutable C++ unique. aussi enquêter. problème est évidemment lecteur heif ou décodeur hefc ffmpeg – baci

Répondre

7

Il y a un bug dans le paramètre VPS/SPS/PPS jeux dans la tuile 7. Je n'ai pas retrouvé si le problème réside dans le fichier réel ou dans l'analyseur HEIF, mais il existe une solution de contournement simple dans l'intervalle. Reportez-vous à HevcImageFileReader :: getItemDataWithDecoderParameters et observez comment les ensembles de paramètres sont ajoutés aux données d'élément réelles pour chaque mosaïque.

Tout ce que vous avez à faire est de lire les jeux de paramètres pour la première case et de les réutiliser pour les prochaines cases au lieu de les relire. Cela va contourner les paramètres corrompus provenant de la 7ème tuile. Il semble sûr de le faire puisque c'est un format de grille et l'exigence est que chaque tuile soit identique.

+0

Cela a fonctionné réellement. Changé pour getDecoderParameterSets (contextId, 1, parameterSet); et la 7ème tuile n'est plus corrompue. –