如何打开HEIF(.heic)图像?

时间:2017-09-12 23:42:43

标签: image ffmpeg codec heif

对于c ++项目,我需要打开并显示HEIF(.heic)图像。我所知道的(如果我是对的)是HEIF图像基于ffmpeg标准,并且需要读取H265编解码器。

我找到了几个开源的H265编解码器:

我可以打开并显示每个H265编码的视频文件,但我无法简单地打开,显示或转换.heic图像。所有这些都会返回错误,或者什么都不做。

老实说,我有点疑惑,因为HEIF标准似乎是一个保密的秘密。我无法找到可以让我走到解决方案的相关信息。我找到的只是技巧和解决方法,例如强迫设备(我在这里讲的是关于使用新iOS11的Apple iPhone)生成jpg图像而不是heic,或使用像dr.fone这样的第三方应用程序。当然,这些解决方案对我来说无关紧要。

那么,有人可以告诉我应该使用哪个编解码器和.heif图像,以及如何使用它来打开它?或者是否有开源库或允许操作此类图像文件的示例?有人能指出我的好方向吗?

2 个答案:

答案 0 :(得分:3)

诺基亚针对HEIF的示例查看器可用here。我还直接使用FFmpeg测试,它能够打开(播放/解压缩)提供的conformance files

答案 1 :(得分:1)

libheif对于HEIF来说似乎是非常活跃的LGPL库,带有C API。从自述文件:

  

该库具有一个C API,可轻松集成并支持多种语言。请注意,API仍在开发中,并且可能仍会更改。

     

将主图像加载到HEIF文件中很容易:

heif_context* ctx = heif_context_alloc();
heif_context_read_from_file(ctx, input_filename, nullptr);

// get a handle to the primary image
heif_image_handle* handle;
heif_context_get_primary_image_handle(ctx, &handle);

// decode the image and convert colorspace to RGB, saved as 24bit interleaved
heif_image* img;
heif_decode_image(handle, &img, heif_colorspace_RGB, heif_chroma_interleaved_24bit, nullptr);

int stride;
const uint8_t* data = heif_pixel_image_get_plane_readonly(img, heif_channel_interleaved, &stride);

一个由Emscripten驱动的不错的demo可用,它实际上使您可以直接在浏览器中加载和查看HEIF文件。