Ccmmutty logo
Commutty IT
2 min read

heic2jpg

https://picsum.photos/seed/82778ffef48e4256a58348296b7f2a9b/600/800

HEIF形式の画像データをjpgやpngに変換する

iOSやMacで使用されている画像形式であるが、Windowsのフォトで開けないなどあまりサポートされている形式とは言えない。そのため、一般的に使われるjpegやpng形式に変換することは一定の価値があると評価できる。

材料

  • pyheif
  • 正規表現(ファイル名変換に使っているが、必須ではない)
python
!pip install pyheif
Requirement already satisfied: pyheif in /usr/local/lib/python3.7/dist-packages (0.5.1) Requirement already satisfied: cffi>=1.0.0 in /usr/local/lib/python3.7/dist-packages (from pyheif) (1.14.6) Requirement already satisfied: pycparser in /usr/local/lib/python3.7/dist-packages (from cffi>=1.0.0->pyheif) (2.20)
python
from PIL import Image
import os
import pyheif
import re
python
from google.colab import drive
drive.mount('/gdrive')
python
%cd /gdrive/My Drive/path/to/the/file

一つのファイルを変換するcode

python
file = 'IMG_0642.HEIC'
# 拡張子とそれ以外でファイル名を分ける
*filename_list, ext = re.split("\.", file)
filename = ".".join(filename_list)
heif_file = pyheif.read(file)
image = Image.frombytes(
    heif_file.mode, 
    heif_file.size,
    heif_file.data,
    "raw",
    heif_file.mode,
    heif_file.stride,
)
# 拡張子から自動的に判断されるため、第2引数は必要はないが、明示的に変換先のファイル形式を示している。
image.save(f"./jpg/{filename}.jpg", "JPEG")
image.save(f"./png/{filename}.png", "PNG")

フォルダ内すべてのファイルを変換するcode

python
os.listdir("./heif")

for file in ls:
    # 拡張子とその他の部分を分ける。
    *filename_list, ext = re.split("\.", file)
    filename = ".".join(filename_list)
    #拡張子がHEICのものだけに処理を行なう。
    if (ext == "HEIC"):
        heif_file = pyheif.read(file)
        image = Image.frombytes(
            heif_file.mode, 
            heif_file.size, 
            heif_file.data,
            "raw",
            heif_file.mode,
            heif_file.stride,
            )
        image.save(f"./jpg/{filename}.jpg", "JPEG")

Discussion

コメントにはログインが必要です。