PythonでPNG, JPEG, BMP, GIF, TIFFなどの画像を相互変換

Python
Sponsored

概要

この記事では、Pythonを用いてPNG, JPEG, BMP, GIF, TIFFなどの画像形式を相互に変換するコードを紹介する。

方法

基本

PILライブラリを使用する。

以下はGIFをPNGに変換する例である。

from PIL import Image

img = Image.open("example.GIF")
img.save("example.PNG")

応用

以下は「PNG」という名前のフォルダの中にある、すべてのPNGファイルをJPEGに変換し、「JPEG」フォルダに保存するコードである。

from PIL import Image
import os

os.makedirs("JPG", exist_ok=True) # ①
for file in os.listdir("PNG"): # ②
    name, extension = file.split(".") # ③
    if extension == "png": # ④
        img = Image.open("PNG/" + file) # ⑤
        if img.mode != "RGB": # ☆
            img = img.convert("RGB")
        img.save("JPG/" + name + ".jpg") # ⑥

このコードでは

  1. 「JPG」フォルダを作成し
  2. 「PNG」フォルダの中身を1つずつ検証し
  3. ファイル名を拡張子(extension)とその前(name)に分け
  4. 拡張子がpngである場合のみ
  5. 画像ファイルを開き
  6. 拡張子をjpgとして保存している。

JPEGに変換する際の注意点として、カラーモードがRGBではない画像をJPEGで保存しようとすると

OSError: cannot write mode P as JPEG

のようなエラーを吐くため、カラーモードがRGBとなるように変換する必要がある(☆)。

変換可能な画像形式

PILライブラリが対応しているファイル形式は以下のサイトに記載されている。

Image file formats
The Python Imaging Library supports a wide variety of raster file formats. Over 30 different file formats can be identified and read by the library. Write suppo...

ファイル形式によっては、「読み込みのみ可(PSDなど)」や「保存のみ可(PDFのみ可)」のものもあるので注意する。

Comments