PythonでHEICの写真をJPGに変換する方法(pillow_heif.register_heif_opener)

概要

今回はiPhoneで撮影した写真をブログに挙げるために、写真を加工するためのツールをPythonで作成したので紹介していきます。

iPhoneで撮影した画像はheicという形式で保存されるので、windowsやLinuxだと少し扱いずらい形式になってしまうんですよね。。。
やはりwindowsで扱うならJPGを使用したいところ

しかも自分の保存用写真としても撮るので、高画質で容量が大きくブログには不向きとなります。

今まではこれをオンラインツールを使い頑張って変換してたのですが、この度pythonでツールを作ることに成功したので、紹介していきます。

めちゃくちゃ簡単にできますので、是非皆さんも試してみてください!

目次

やること

このツールで処理する内容としては下記の通り

  • 形式の変更
    • heicからjpgに形式を変更
  • 画像サイズの圧縮
    • 画像サイズを横1200pxまで下げる
    • この時画像の縮小ではなく解像度を下げる方式で実装

処理対象は引数で指定したフォルダ内にあるheicファイルとしています。

実装

ライブラリインストール

今回使用するpythonのライブラリ「pillow」をインストールします。

コマンド

1
pip install pillow pillow-heif

ソースコード

pythonのソースは下記となります。
convert_heic.pyなど任意のファイル名で保存してください

convert_heic.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import argparse
from pathlib import Path
from PIL import Image
import pillow_heif
import sys

# HEIC対応
pillow_heif.register_heif_opener()

def main():
parser = argparse.ArgumentParser(
description="HEICをJPEGに変換し、拡大せずに縮小・圧縮する"
)
parser.add_argument(
"input_dir",
help="入力ディレクトリ(HEICファイルを含む)"
)
parser.add_argument(
"output_dir",
help="出力ディレクトリ"
)
parser.add_argument(
"--max-size",
type=int,
default=1200,
help="最大サイズ(縦横の長辺。デフォルト: 1200)"
)
parser.add_argument(
"--quality",
type=int,
default=85,
help="JPEG品質(デフォルト: 85)"
)

args = parser.parse_args()

input_dir = Path(args.input_dir)
output_dir = Path(args.output_dir)
output_dir.mkdir(parents=True, exist_ok=True)

if not input_dir.exists():
print("入力ディレクトリが存在しません")
sys.exit(1)

heic_files = list(input_dir.glob("*.heic"))
if not heic_files:
print("HEICファイルが見つかりません")
return

for img_path in heic_files:
try:
with Image.open(img_path) as img:
img = img.convert("RGB")

# 拡大しない縮小
img.thumbnail(
(args.max_size, args.max_size),
Image.LANCZOS
)

out_path = output_dir / f"{img_path.stem}.jpg"
img.save(
out_path,
format="JPEG",
quality=args.quality,
optimize=True
)

print(f"変換完了: {img_path.name}{out_path.name}")

except Exception as e:
print(f"失敗: {img_path.name} ({e})")

if __name__ == "__main__":
main()

実行方法

実行方法は
任意のフォルダに変換したいheicファイルを配置し、
下記のコマンドを実行すれば実行できます。

コマンド

1
python convert_heic.py input output --max-size 1200 
  • input
    • 変換ファイルの配置フォルダ
  • output
    • 変換後ファイルの出力先フォルダ
  • –max-size
    • 縮小後画像の横幅(縦幅は自動調整される)
  • –quality
    • 画像の品質を指定(さらに画像サイズを小さくしたいときに使用)
上記のコマンドの場合、
inputフォルダにあるheicファイルを横幅1200pxに変換し、
outputフォルダにjpgファイルを出力する。

締め

結構簡単に実装できますよね!

オンラインサイトを使うとセキュリティ的にも良くないし、なによりめんどいので
だいぶ手間を省けます!

サーバ費用を抑えて安く運営している人にとって画像のサイズが大きいと
検索順位に影響が出たりするので注意しないとですよね。。。

このツールとても便利なので是非皆さんも使ってみてください!

当サイトではこんな感じに便利なツールを作成したりしてます。
是非他のも見ていってください!

以上!
旅行が好きなので、写真は共有したいです!
それではお疲れさまでした。