Pythonを使用してPNGをJPGに変換する

Pythonを使用してPNGをJPGに変換してみます。

今回、PNGファイルをJPGファイルに変換するために、PIL(Python Imaging Library)モジュールから分岐して開発されたライブラリである「Pillow」を使います(Pillow 7.2.0を使用しています。)

PIL(Python Imaging Library)モジュールは、多くのファイル形式をサポートし、画像処理機能とグラフィックス機能を提供しているもので、現在では開発は行われていませんが、このモジュールから分岐して開発された画像処理ライブラリが「Pillow」です。

■Python

Pythonバージョン

今回のPythonのバージョンは、「3.8.2」を使用しています。(Windows10)

■テストでPNGファイルを用意する

まず、PNGファイルをJPGファイルに変換を行いますので、PNGファイルを用意します。

今回は「test01.png」というpng形式のファイルを用意しました。ファイルの保存場所は「C:\Users\user\test」になります。

■PILモジュールを使い、JPGファイルに変換する

PNGファイルが用意できましたので、次にPILモジュールを使いJPGファイルに変換するスクリプトを書いていきます。

■コード

from PIL import Image

image01 = Image.open(r"C:\Users\user\test\test01.png")
image01.save(r"C:\Users\user\test\test01.jpg")

インポートでPILモジュールを呼び出して、Image.open()で変換を行うPNGファイルを指定し読み込みます。

そしてsave()で読み込んだPNGファイルをJPGファイルに変換して保存される仕組みです。

■実行

今回のスクリプトを「png-jpg-test.py」という名前で保存し、コマンドプロンプトから実行してみます。

Traceback (most recent call last):
File “C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\PIL\JpegImagePlugin.py”, line 614, in _save
rawmode = RAWMODE[im.mode]
KeyError: ‘RGBA’

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “C:\Users\user\png-jpg-test.py”, line 4, in <module>
image01.save(r”C:\Users\user\test\test01.jpg”)
File “C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\PIL\Image.py”, line 2158, in save
save_handler(self, fp, filename)
File “C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\PIL\JpegImagePlugin.py”, line 616, in _save
raise OSError(“cannot write mode %s as JPEG” % im.mode) from e
OSError: cannot write mode RGBA as JPEG

実行してみると、「OSError」というエラーが発生。「モードRGBAをJPEGとして書き込めません(cannot write mode RGBA as JPEG)」という内容のエラーです。RGBAとは、ディスプレイ画面で色を表現するために用いられる、赤色、緑色、青色の3色に、アルファと呼ばれる透過度の情報を加えたもののことで、このモード(形式)だとJPGファイルに変換ができない。

改善:RGBAからRGBに変換する

RGBAモード(形式)だとJPGファイルに変換ができないため、今回書いたスクリプトに変更を加えてみます。

■コード

from PIL import Image

image01 = Image.open(r"C:\Users\user\test\test01.png").convert("RGB")
image01.save(r"C:\Users\user\test\test01.jpg")

Image.open()で変換を行うPNGファイル(RGBAモード)を指定し読み込みます。読み込む際にconvert()で「RGBモード」への変換を行ってみます。

■実行

今回変更したスクリプトを保存し、コマンドプロンプトから実行してみると、エラーは発生しませんでした。JPGファイルに変換できているのかを確認するために、ファイルの保存先を確認します。

確認してみると、PNGファイルがJPGファイルに変換されていることを確認できました。

コメント

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