HEICファイルをJPEGへ変換したい!

ノウハウ
スポンサーリンク

iPhoneをOne DriveでPCと同期したところ、画像ファイルがHEIC形式で保存されていました。
でも、HEIC形式の画像ファイルはWindows PCではうまく開けない等、トラブルが多そう。。。

そんなわけで、HEIC形式の画像ファイルをJPEG形式に変換するプログラムをPythonで作成しました。サンプルコードを載せておきますので、ご参考にどうぞ。
(なお、HEIC形式の画像ファイルを以下ではHEICファイルと記載します)

環境は下記です。

  • Windows10
  • Python 3.7.4
  • ImageMagick-7.0.10-53-portable-Q16-x64

 

目次

 


 

HEICファイルとは

HEIC(ヘイク)ファイルとは、JPEGよりも容量が抑えられた高効率な画像ファイル形式「HEIF(ヒーフ; High Efficiency Image File Format)」を用いた画像ファイルのこと。
iPhoneで「高効率」フォーマットで写真を撮ると、HEICファイルとして保存されるとのこと。

 

HEICファイルをJPEG形式に変換する方法

HEICファイルをJPEG形式に変換する方法は幾つかあるようですが、Windows10かつPythonの環境で動作させる方法としては、フリーソフトの「ImageMagick」を使用するのが良さそうだということが分かりました。
そのため、本記事のサンプルコードは「ImageMagick」を使っています。

# その他の方法は「HEIC形式の画像ファイルをJPEG形式に変換する方法」でまとめましたので、よろしければご覧ください。

ImageMagick
Create, Edit, Compose, or Convert Digital Images

 

HEIC形式の画像ファイルをJPEG形式に変換するサンプルコード

HEIC形式の画像ファイルをJPEG形式に変換するサンプルコードを以下に張っておきます。
 

事前準備 「ImageMagick」のダウンロード

「ImageMagick」のインストール方法はググればすぐに出てくるので割愛します。
自分は以下のサイトを参考にインストールしました。

Imagemagickの使い方日本語マニュアル
日本語のマニュアルが少ない画像加工ツールImageMagickの使い方を、初心者の方にも解りやすいよう詳しく丁寧に解説しています。

※インストーラにいくつかの種類がありますが、「ImageMagick-x.x.xx-xx-portable-Q16-x64」のものが使い勝手がよさそうです。

 

サンプルコード

HEIC形式の画像ファイルをJPEG形式に変換するサンプルコードを以下に張っておきます。
(MITライセンスとします。)

# 間違っていたらご指摘くださると助かります。

import glob, os, shutil, subprocess, re

##### パラメータ指定
# ImageMagick convert.exeの格納先を指定
IMAGEMAGICK_CONVERT_EXE_DIR = 'C:/work/ImageMagick/convert.exe'

# 画像ファイルを検索するフォルダを指定
TARGET_DIRS = {
    'C:/work/sample',
}

##### 関数
def ConvertHeic2Jpeg(targetFilePath):
    ret = False
    message = ''
    # HEICファイルチェック
    try:
        if not os.path.isfile(targetFilePath):
            message = 'ConvertHeic2Jpeg()にディレクトリは指定できません。'
            return (ret, message)
        root, ext = os.path.splitext(targetFilePath)
        if(not (ext == '.heic' or ext == '.HEIC') ):
            message = 'ConvertHeic2Jpeg()にHEIC形式以外のファイルは指定できません。'
            return (ret, message)
    except Exception as e:
        print(e)
        message = 'HEICファイルチェックで予期せぬエラーが発生しました。'
        return (ret, message)
    
    # フォルダ名とファイル名(拡張子なし)を取得する
    heic_dir = os.path.dirname(targetFilePath)
    heic_filename, ext = os.path.splitext(os.path.basename(targetFilePath))

    # HEICファイルをheic_dir/HEICフォルダに移動させる
    try:
        if(not os.path.exists(heic_dir+'/HEIC')):
            os.mkdir(heic_dir+'/HEIC')
        shutil.move(targetFilePath, heic_dir+'/HEIC/'+heic_filename+ext)
    except Exception as e:
        print(e)
        message = 'HEICファイルを移動中に予期せぬエラーが発生しました。'
        return (ret, message)
    
    # HEIC→JPEGに変換
    try:
        subprocess.call('{0} {1} {2}'.format(IMAGEMAGICK_CONVERT_EXE_DIR,\
             heic_dir+'/HEIC/'+heic_filename+ext, heic_dir+'/'+heic_filename+'.jpg'))
    except Exception as e:
        print(e)
        message = 'HEIC→JPEGに変換中に予期せぬエラーが発生しました。'
        return (ret, message)

    ret = True
    message = 'HEIC→JPEGに変換成功しました。'
    return (ret, message)

##### メイン処理
if __name__ == '__main__':
    # HEICファイルを一つずつ、HEIC→JPEGに変換
    for targetDir in TARGET_DIRS:
        for targetFilePath in glob.glob(targetDir+'/**', recursive=True):
            # ファイル以外は飛ばす
            if not os.path.isfile(targetFilePath): continue
            # HEICファイル以外は飛ばす
            if not re.findall('\.heic$|\.HEIC$', targetFilePath): continue
            print('##### {0}の変換開始...'.format(targetFilePath))
            # HEIC→JPEGに変換
            ret, message = ConvertHeic2Jpeg(targetFilePath)
            if( ret ):
                print('結果: 成功')
            else:
                print('結果: 失敗')
            print('詳細: {0}'.format(message))
  • IMAGEMAGICK_CONVERT_EXE_DIRにインストールした「ImageMagick」の「convert.exe」を指定してください。
  • TARGET_DIRSで画像ファイルが格納されたフォルダを指定してください。配下のフォルダは再帰的に検索します。

 

  

サンプルコードを試してみる

簡単なテスト環境でサンプルコードを実行してみました。

 

テスト環境

テスト環境は以下を想定します。

 

【ディレクトリ構成】

Cドライブ配下にworkフォルダを作成し、その配下のsampleに画像ファイルを格納しています。
「heic2jpegConverter.py」には上記サンプルコードが記載されています。

C:\WORK
│  heic2jpegConverter.py
│
├─ImageMagick
│      convert.exe
│      その他割愛
│
└─sample
        heic_sample1.heic
        heic_sample2.heic
        jpg_sample.jpg
        png_sample.png

 

サンプルコードの実行

コマンドプロンプトで以下のコマンドを実行します。

> cd C:\work
> python heic2jpegConverter.py

 

サンプルコード実行結果

HEIC⇒JPEGに変換が成功すると以下のようなログがコマンドプロンプト上に表示されます。

C:\work>python heic2jpegConverter.py
##### C:/work/sample\heic_sample1.heicの変換開始...
結果: 成功
詳細: HEIC→JPEGに変換成功しました。
##### C:/work/sample\heic_sample2.heicの変換開始...
結果: 成功
詳細: HEIC→JPEGに変換成功しました。

 

実行後のフォルダ構成を確認すると、
以下のようにHEIC⇒JPEGに変換されていました!

C:\WORK
│  heic2jpegConverter.py
│
├─ImageMagick
│      convert.exe
│      その他割愛
│
└─sample
    │  heic_sample1.jpg  <= HEICからJPEGに変換された画像ファイル
    │  heic_sample2.jpg  <= HEICからJPEGに変換された画像ファイル
    │  jpg_sample.jpg
    │  png_sample.png
    │
    └─HEIC
            heic_sample1.heic  <= 変換前のHEICファイルは同フォルダ内のHEICフォルダに移動
            heic_sample2.heic  <= 変換前のHEICファイルは同フォルダ内のHEICフォルダに移動

 

補足 Pythonをインストールするのに参考になりそうなサイト

日本のPythonコミュニティ「python.jp」さんのサイトが、画像で説明されており分かりやすいです。

Windows版Pythonのインストール - python.jp
以下の手順で、Pythonのインストールを行います。 Python公式サイトから、Pythonパッケージをダウンロードします ダウンロードしたパッケージをインストールします。 PowerShellでPythonを実行するときに必要となる、ス...

 

広告

Pythonを勉強するなら、Udemyの「現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル」がオススメです!
※Udemyは技術的な講座を動画で受けられるサービスです。

 

以上!

コメント

タイトルとURLをコピーしました