Pythonを使用してPNGをJPGに変換してみます。
今回、PNGファイルをJPGファイルに変換するために、PIL(Python Imaging Library)モジュールから分岐して開発されたライブラリである「Pillow」を使います(Pillow 7.2.0を使用しています。)
PIL(Python Imaging Library)モジュールは、多くのファイル形式をサポートし、画像処理機能とグラフィックス機能を提供しているもので、現在では開発は行われていませんが、このモジュールから分岐して開発された画像処理ライブラリが「Pillow」です。
■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ファイルに変換されていることを確認できました。
コメント