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形式に変換する方法」でまとめましたので、よろしければご覧ください。
HEIC形式の画像ファイルをJPEG形式に変換するサンプルコード
HEIC形式の画像ファイルをJPEG形式に変換するサンプルコードを以下に張っておきます。
事前準備 「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」さんのサイトが、画像で説明されており分かりやすいです。
広告
Pythonを勉強するなら、Udemyの「現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル」がオススメです!
※Udemyは技術的な講座を動画で受けられるサービスです。
以上!
コメント