PythonでPNG画像をJPG画像に変換したいです。
画像処理ライブラリのOpenCVを使えば変換できるぞ。
✔️ 本記事のテーマ
PythonでPNG画像をJPG画像に変換する
✔️ 読者さんへの前置きメッセージ
本記事は「PythonでPNG画像をJPG画像に変換する方法」について書いています。
どれだけ通信環境が整った現代でも、画像容量の大きな画像の扱いに困ることは多いでしょう。
容量の大きなPNG画像をJPG画像に変換するだけで容量を削減することができます。
インターネット上には、PNG画像をJPG画像に変換するサービスも存在しますが、
- 「インターネットに画像をアップロードしたくない」
- 「大量の画像を変換したい」
といったケースもあるかと思います。
PyhtonではプログラムでPNG画像をJPG画像に変換することができます。
この記事ではPythonによる画像変換をサンプルコードとともに解説します。
それでは、解説していきましょう。
PythonでPNG画像をJPG画像に変換するための前準備
PNG画像をJPG画像に変換するには、OpenCVというPythonライブラリを使用します。
OpenCVはサードパーティ製のPythonライブラリなので pip install する必要があります。
以下のコマンドをターミナルで実行して、OpenCVをインストールしましょう。
pip install opencv-python
PythonでPNG画像をJPG画像に変換するコード
以下のコードでPNG画像をJPG画像に変換することができます。
import glob
import cv2
input_dir = './target_input/'
output_dir = './target_output/'
files = glob.glob(input_dir + '*')
for file in files:
file_name = file.split('/')[-1]
rm_ext_file_name = file_name.split('.')[0]
img = cv2.imread(input_dir + rm_ext_file_name + '.png')
cv2.imwrite(output_dir + rm_ext_file_name + '.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 95])
このサンプルコードが何をしているかについて、順に解説していきましょう。
ファイルパスの取得
files = glob.glob(input_dir + '*')
この部分で input_dir で指定したディレクトリにある全てのファイルパスを取得しています。
files は ファイルパスの数だけ要素のある list になっています。
各ファイルごとに処理をかける
for file in files:
ループを回して、各ファイルごとに処理をかけていきます。
ファイル名を取り出す
file_name = file.split('/')[-1]
ループの中の file は /Users/testuser/Desktop/input_file.png といった形式になっているので、
上記のようにすることでファイル名(= input_file.png )だけを取り出しています。
さらに、split() をかけることで 拡張子を除いたファイル名(= input_file )を取り出しています。
rm_ext_file_name = file_name.split('.')[0]
対象のPNG画像ファイルを読み込む
img = cv2.imread(input_dir + rm_ext_file_name + '.png')
処理対象のPNG画像をOpenCVライブラリを使って読み込みます。
画像の読み込みには OpenCVの imread関数 を使います。
OpenCVの imread関数についての詳しい解説は
「OpenCVで画像を読み込む方法【Python】」
の記事で書いてます。
これにより、画像データをOpenCVライブラリで扱うことができます。
JPG画像ファイルとして変換して保存する
cv2.imwrite(output_dir + rm_ext_file_name + '.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 95])
先ほど読み込んだ画像データをJPG画像ファイルに変換して保存します。
JPG画像への変換と保存は OpenCV の imwrite関数を使います。
OpenCVの imwrite関数についての詳しい解説は
「OpenCVで画像を保存する方法【Python】」
の記事で書いてます。
なお、今回は cv2.imwrite() の第3引数 [cv2.IMWRITE_JPEG_QUALITY, 95] の数値で
変換先のJPG画像の精密度を調整します。
この値が大きいほど、画像は精密に、容量は大きくなります。
逆に、この値が小さくすると、画像は粗く、容量は小さくなります。
画像処理プログラミングを独学で身に付けるための1冊
PNG画像をJPG画像へと変換する方法について解説しました。
画像処理プログラミングでは画像変換の他にも様々なことができます。
もし、画像処理プログラミングについて、
独学でスキルをつけるなら以下の書籍がオススメです。
この書籍は画像処理ライブラリのOpenCVの基礎から応用までを
丁寧にかつ詳細に解説しています。
OpenCVのほぼ全てを網羅しているとも言えるほどの徹底ぶりなので、
関数のリファレンスとしても使用することができます。
本記事で解説したimwrite関数についても掲載されています。
エンジニアとしての自身の価値をチェックする(完全無料)
エンジニアとして、
自分の価値がどれくらいのものかご存知でしょうか?
エンジニアとしてIT業界に身を置いていると
今の会社でずっと働くのか、フリーランスとして独立するのか …
と様々な選択肢があります。
どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも
自身の価値を知っておくことはとても重要です。
TechClips ME では、
職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。
▼▼▼▼▼
▲▲▲▲▲
しかもTechClips MEでは想定年収を企業から提示してくれるので、
自身の価値を数字で分かりやすくたしかめることができます。
登録はもちろん完全無料なので、一度登録してみると良いかもしれません。
コメント