web-dev-qa-db-ja.com

HEIF(.heic)画像を開く方法は?

C++プロジェクトの場合、HEIF(.heic)イメージを開いて表示する必要があります。私が知っていることは(私が正しい場合)、HEIF画像はffmpeg標準に基づいており、H265コーデックを読み取る必要があるということです。

私はいくつかのオープンソースH265コーデックを見つけました:

H265でエンコードされたビデオファイルをそれぞれ開いて表示することはできますが、.heicイメージを単純に開いたり、表示したり、変換したりすることはできません。それらはすべてエラーを返すか、何もしません。

正直なところ、HEIF標準は十分に秘密にされているように見えるので、私は少し戸惑っています。解決策にたどり着くことができる関連情報を見つけることができません。私が見つけたものは、たとえば次のような単なるトリックと回避策です。デバイス(ここではApple iPhoneは新しいiOS11を使用)について話している)に、heicの代わりにjpg画像を生成させるか、dr.foneなどのサードパーティアプリケーションを使用します。もちろんこれらの解決策は私には関係ありません。

したがって、誰かが.heifイメージで使用するコーデックと、それを使用して開く方法を教えてくれますか?または、このタイプの画像ファイルを操作できるオープンソースライブラリまたは例はありますか?誰かが私に良い方向を示すことができますか?

5

NokiaのHEIFに固有のビューアの例が利用可能です ここ 。また、FFmpegで直接テストしたところ、提供された 適合ファイル を開く(再生/解凍)ことができます。

3

libheif はかなりアクティブなようです [〜#〜] lgpl [〜#〜] CAPIを備えたHEIF用のライブラリ。 READMEから:

ライブラリには、簡単な統合と幅広い言語サポートのためのCAPIがあります。 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ファイルをロードして表示できます。

3
mwfearnley