見出し画像

ImageMagickを利用してHEIC形式の画像をjpg形式に変換する

はじめに

この記事ではHEIC形式で保存された画像をjpg形式に変換する方法についてまとめます。

iPhoneでの画像撮影のフォーマットで、高効率が選択されている場合、HEIC形式でカメラで撮影した画像が保存されます。

HEIC形式で保存されると、ファイルサイズが半分ほどになり、メモリの消費を抑えることができますが、対応しているアプリをインストールしないと、PCで閲覧ができない、といったデメリットもあります。少数のファイルであれば、以下のようなオンライン型のプラットフォームにて簡単に変換することができます。しかし、

  • 大量のファイルを変換したい場合、たくさんアップロードしたりダウンロードしたりする手間が生じる

  • サーバーに画像をアップロードすることに不安がある

といった課題があります。オンラインでHEICをjpgなどに変換するアプリケーションとしては以下のようなものがあります。

処理内容

準備: ImageMagickのインストール

以下のページからImageMagickをインストールしてください。

私は、以下の赤枠で囲まれているバージョンをダウンロードしました。

I accept the agreementを選択します。Nextを押すと、インストールを完了することができます。

Program Files内に以下のフォルダが作成されていることがわかります。もし他の場所にある場合は、次の章のMATLABのコードを一部変更する必要があります。


ImageMagickとMATLABを利用した変換

magick convert というコマンドで、HEIC形式をjpg形式に変換することができます。コマンドプロンプトからでも利用可能ですが、複数のファイルに対して自動的に行うためにMATLABを利用します。以下のMATLABのコマンドの3行目で、HEICファイルが格納されているパスを指定して下さい。今回利用したコードやサンプル画像は以下のページにアップロードされています。ぜひお使いください。

今回の例では、以下のsampleというフォルダにHEIC形式の画像が3つ保存されています。

clear;clc;close all
% Specify the path where target HEIC images are stored
heicInfo = dir(fullfile(pwd, 'sample\*.HEIC'));
heicName = {heicInfo.name};
heicFolder = {heicInfo.folder};
% Access to magick tool
curPath = pwd;
if exist("C:\Program Files\ImageMagick-7.1.1-Q16-HDRI") == 7
    cd("C:\Program Files\ImageMagick-7.1.1-Q16-HDRI")
else
    cdMagick()
end

% Execute magic convert command 
space = " ";
for i =1:numel(heicInfo)

    magicCommand = strcat('magick convert',space, fullfile(heicFolder{i},heicName{i}),space,fullfile(heicFolder{i},strcat(extractBefore(heicName{i},'.HEIC'),'.jpg')));
    system(magicCommand)
end
ans = 0
ans = 0
ans = 0
cd(curPath)

ImageMagickのバージョンが異なる場合、以下のfunctionにて、インストールされたファイルを検索します。

function cdMagick()
    magickInfo = dir('C:\Program Files\ImageMagick*');
    magickName = magickInfo.name;
    magickPath = fullfile("C:\Program Files",magickName);
    cd(magickPath)
end

上のコマンドを実行すると、以下の図のように、HEICファイルから変換されたjpgファイルが保存されていることがわかります。


補足: Pythonを利用した場合

簡単にPythonでも同様の処理を書いてみました。jupyter notebook形式でgithubにアップロードしています。

import glob,os,subprocess
heicImg = glob.glob(r"C:\LocusBlue\Convert-HEIC-into-jpg-using-ImageMagick-main\sample\*.HEIC")
imageMagickPath = "C:\Program Files\ImageMagick-7.1.1-Q16-HDRI"
print(heicImg)

print('=====start heic2jpg=====')
for heicName in heicImg:
    # print(heicName)
    input = heicName
    dirname = os.path.dirname(input)
    basename_without_ext = os.path.splitext(os.path.basename(input))[0]
    output = os.path.join(dirname,basename_without_ext+".jpg")
    print('=====')
    print("input: "+input)
    print("output: "+output)
    print('=====Run ImageMagick=====')
    print('Command')
    print(os.path.join(imageMagickPath,"magick convert")+input+ " " + output)
    subprocess.run(os.path.join(imageMagickPath,"magick convert")+input+ " " + output)

print('=====finished=====')

まとめ

この記事では、ImageMagickを利用して、HEIC形式で保存された画像をjpg形式に変換しました。また、本記事のためのスクリプトはMATLABのライブスクリプトで作成され、以下のコマンドにてマークダウン形式に変換しました。この変換は MATLAB 2023bプレスリリースを利用しています。

export("README.mlx","README.md","EmbedImage",false)

この記事が気に入ったらサポートをしてみませんか?