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

问题描述 投票:3回答:2

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

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

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

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

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

image ffmpeg codec heif
2个回答
3
投票

可以从here获得特定于来自诺基亚的HEIF的示例查看器。我还直接用FFmpeg测试,它能够打开(播放/解压缩)提供的conformance files


1
投票

libheif似乎是一个非常活跃的用于HEIF的LGPL库,带有C API。来自README:

该库具有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文件。

© www.soinside.com 2019 - 2024. All rights reserved.