[Python] png形式で画像を保存する方法
Pythonで画像をPNG形式で保存するには、一般的にPillowライブラリを使用します。
PillowはPython Imaging Library (PIL) の後継で、画像の操作や保存が簡単に行えます。
まず、PIL.Image
モジュールをインポートし、画像を作成または読み込んだ後、save()メソッド
を使用してPNG形式で保存します。
例えば、image.save('filename.png')
のように指定します。
Pillowはpip install Pillow
でインストール可能です。
Pillowライブラリのインストール方法
Pillowは、Pythonで画像処理を行うための強力なライブラリです。
PNG形式の画像を扱う際にも非常に便利で、画像の読み込み、加工、保存など多くの機能を提供しています。
Pillowは、Python Imaging Library(PIL)の後継として開発されており、簡単にインストールできるため、Pythonを使った画像処理を始める際には必須のライブラリです。
以下では、Pillowのインストール方法について詳しく解説します。
画像の読み込みと保存の基本
画像を扱う際の基本的な操作として、画像の読み込みと保存があります。
ここでは、Pillowライブラリを使用して、画像を読み込み、PNG形式で保存する方法について解説します。
画像を読み込む方法
Pillowを使用して画像を読み込むには、Image
モジュールのopenメソッド
を使用します。
以下は、画像を読み込むサンプルコードです。
from PIL import Image
# 画像を読み込む
image = Image.open("input_image.jpg")
このコードでは、input_image.jpg
というファイル名の画像を読み込み、image
という変数に格納しています。
画像をPNG形式で保存する方法
読み込んだ画像をPNG形式で保存するには、saveメソッド
を使用します。
以下のサンプルコードを参照してください。
from PIL import Image
# 画像を読み込む
image = Image.open("input_image.jpg")
# PNG形式で保存する
image.save("output_image.png", format="PNG")
このコードでは、output_image.png
という名前でPNG形式で画像を保存しています。
画像の保存先を指定する方法
画像を保存する際に、特定のフォルダに保存することも可能です。
以下のサンプルコードでは、images
フォルダに保存する方法を示します。
from PIL import Image
import os
# 画像を読み込む
image = Image.open("input_image.jpg")
# 保存先のフォルダを指定
save_directory = "images"
os.makedirs(save_directory, exist_ok=True) # フォルダが存在しない場合は作成
# PNG形式で保存する
image.save(os.path.join(save_directory, "output_image.png"), format="PNG")
このコードでは、images
フォルダを作成し、その中にoutput_image.png
として保存しています。
画像の保存時にファイル名を指定する方法
画像を保存する際に、ファイル名を動的に指定することもできます。
以下のサンプルコードでは、ユーザーからファイル名を入力して保存する方法を示します。
from PIL import Image
# 画像を読み込む
image = Image.open("input_image.jpg")
# ユーザーからファイル名を入力
file_name = input("保存するファイル名を入力してください(拡張子は不要): ")
# PNG形式で保存する
image.save(f"{file_name}.png", format="PNG")
このコードでは、ユーザーが入力したファイル名でPNG形式の画像を保存します。
画像の加工と保存
Pillowライブラリを使用すると、画像のリサイズ、回転、トリミング、フィルター適用など、さまざまな加工が可能です。
ここでは、これらの基本的な画像加工方法と、それに続く保存方法について解説します。
画像のリサイズと保存
画像のリサイズは、resizeメソッド
を使用して行います。
以下のサンプルコードでは、画像を指定したサイズにリサイズし、PNG形式で保存します。
from PIL import Image
# 画像を読み込む
image = Image.open("input_image.jpg")
# 画像をリサイズする
new_size = (800, 600) # 新しいサイズ(幅, 高さ)
resized_image = image.resize(new_size)
# リサイズした画像を保存する
resized_image.save("resized_image.png", format="PNG")
このコードでは、画像を800×600ピクセルにリサイズし、resized_image.png
として保存しています。
画像の回転と保存
画像の回転は、rotateメソッド
を使用して行います。
以下のサンプルコードでは、画像を90度回転させて保存します。
from PIL import Image
# 画像を読み込む
image = Image.open("input_image.jpg")
# 画像を90度回転する
rotated_image = image.rotate(90)
# 回転した画像を保存する
rotated_image.save("rotated_image.png", format="PNG")
このコードでは、画像を90度回転させ、rotated_image.png
として保存しています。
画像のトリミングと保存
画像のトリミングは、cropメソッド
を使用して行います。
以下のサンプルコードでは、指定した領域をトリミングして保存します。
from PIL import Image
# 画像を読み込む
image = Image.open("input_image.jpg")
# トリミングする領域を指定(左, 上, 右, 下)
crop_area = (100, 100, 400, 400) # (左, 上, 右, 下)
cropped_image = image.crop(crop_area)
# トリミングした画像を保存する
cropped_image.save("cropped_image.png", format="PNG")
このコードでは、指定した領域をトリミングし、cropped_image.png
として保存しています。
画像にフィルターを適用して保存
Pillowでは、さまざまなフィルターを使用して画像を加工することができます。
以下のサンプルコードでは、ぼかしフィルターを適用して保存します。
from PIL import Image, ImageFilter
# 画像を読み込む
image = Image.open("input_image.jpg")
# ぼかしフィルターを適用する
filtered_image = image.filter(ImageFilter.BLUR)
# フィルターを適用した画像を保存する
filtered_image.save("filtered_image.png", format="PNG")
このコードでは、ぼかしフィルターを適用した画像をfiltered_image.png
として保存しています。
フィルターを変更することで、さまざまな効果を得ることができます。
画像のフォーマット変換
Pillowライブラリを使用すると、さまざまな画像フォーマット間での変換が簡単に行えます。
ここでは、JPEG、BMP、GIF形式の画像をPNG形式に変換する方法について解説します。
JPEGからPNGに変換する方法
JPEG形式の画像をPNG形式に変換するには、まずJPEG画像を読み込み、その後PNG形式で保存します。
以下のサンプルコードを参照してください。
from PIL import Image
# JPEG画像を読み込む
jpeg_image = Image.open("input_image.jpg")
# PNG形式で保存する
jpeg_image.save("output_image.png", format="PNG")
このコードでは、input_image.jpg
というJPEG画像を読み込み、output_image.png
としてPNG形式で保存しています。
BMPからPNGに変換する方法
BMP形式の画像も同様に、Pillowを使用してPNG形式に変換できます。
以下のサンプルコードを見てみましょう。
from PIL import Image
# BMP画像を読み込む
bmp_image = Image.open("input_image.bmp")
# PNG形式で保存する
bmp_image.save("output_image.png", format="PNG")
このコードでは、input_image.bmp
というBMP画像を読み込み、output_image.png
としてPNG形式で保存しています。
GIFからPNGに変換する方法
GIF形式の画像をPNG形式に変換する場合も、同様の手順で行います。
以下のサンプルコードを参照してください。
from PIL import Image
# GIF画像を読み込む
gif_image = Image.open("input_image.gif")
# PNG形式で保存する
gif_image.save("output_image.png", format="PNG")
このコードでは、input_image.gif
というGIF画像を読み込み、output_image.png
としてPNG形式で保存しています。
これらの方法を使用することで、さまざまな画像フォーマットを簡単にPNG形式に変換することができます。
変換後の画像は、PNGの特性を活かして高品質な画像として保存されます。
透明なPNG画像の作成と保存
PNG形式は、透明な背景を持つ画像を扱うのに適したフォーマットです。
ここでは、透明な背景を持つ画像の作成方法、保存方法、透明度の調整方法について解説します。
透明な背景を持つ画像の作成方法
透明な背景を持つ画像を作成するには、Image.newメソッド
を使用して新しい画像を作成します。
以下のサンプルコードでは、透明な背景を持つ画像を作成します。
from PIL import Image
# 透明な背景を持つ画像を作成(幅, 高さ)
width, height = 400, 300
transparent_image = Image.new("RGBA", (width, height), (0, 0, 0, 0)) # (R, G, B, A)
# 画像に何か描画する(例:赤い四角形)
for x in range(100, 300):
for y in range(100, 200):
transparent_image.putpixel((x, y), (255, 0, 0, 255)) # 赤色のピクセルを設定
# 作成した画像を保存する
transparent_image.save("transparent_image.png", format="PNG")
このコードでは、400×300ピクセルの透明な背景を持つ画像を作成し、赤い四角形を描画しています。
透明なPNG画像を保存する方法
透明なPNG画像を保存する際は、saveメソッド
を使用します。
上記のサンプルコードでも示したように、透明な背景を持つ画像をPNG形式で保存することができます。
# 透明なPNG画像を保存する
transparent_image.save("transparent_image.png", format="PNG")
このコードでは、transparent_image.png
として透明なPNG画像を保存しています。
透明度を調整する方法
透明度を調整するには、RGBAモードを使用して、アルファチャンネルの値を変更します。
以下のサンプルコードでは、透明度を調整して新しい画像を作成します。
from PIL import Image
# 透明な背景を持つ画像を作成
width, height = 400, 300
transparent_image = Image.new("RGBA", (width, height), (0, 0, 0, 0))
# 画像に半透明の青い四角形を描画
for x in range(100, 300):
for y in range(100, 200):
transparent_image.putpixel((x, y), (0, 0, 255, 128)) # 半透明の青色
# 透明度を調整した画像を保存する
transparent_image.save("semi_transparent_image.png", format="PNG")
このコードでは、半透明の青い四角形を描画し、semi_transparent_image.png
として保存しています。
アルファ値を0から255の範囲で設定することで、透明度を調整できます。
0は完全に透明、255は完全に不透明を意味します。
画像の圧縮と保存
画像の圧縮は、ファイルサイズを小さくするために重要なプロセスです。
特にPNG形式の画像は、圧縮によってファイルサイズを削減しつつ、画質を保つことができます。
ここでは、PNG画像の圧縮方法、画像の品質を指定して保存する方法、圧縮率と画質のバランスを調整する方法について解説します。
PNG画像の圧縮方法
Pillowライブラリでは、PNG画像を圧縮する際に、saveメソッド
のoptimize
オプションを使用します。
以下のサンプルコードでは、PNG画像を圧縮して保存します。
from PIL import Image
# 画像を読み込む
image = Image.open("input_image.png")
# PNG画像を圧縮して保存する
image.save("compressed_image.png", format="PNG", optimize=True)
このコードでは、input_image.png
を圧縮してcompressed_image.png
として保存しています。
optimize=True
を指定することで、圧縮が有効になります。
画像の品質を指定して保存する方法
PNG形式では、品質を指定するオプションはありませんが、JPEG形式の場合は品質を指定して保存することができます。
以下のサンプルコードでは、JPEG画像の品質を指定して保存します。
from PIL import Image
# 画像を読み込む
image = Image.open("input_image.jpg")
# JPEG形式で品質を指定して保存する
image.save("output_image.jpg", format="JPEG", quality=85) # 1から100の範囲で指定
このコードでは、JPEG画像を85の品質で保存しています。
品質の値が高いほど、画質は良くなりますが、ファイルサイズも大きくなります。
圧縮率と画質のバランスを調整する方法
圧縮率と画質のバランスを調整するためには、PNG形式ではoptimize
オプションを使用し、JPEG形式ではquality
オプションを調整します。
以下のサンプルコードでは、JPEG画像の圧縮率と画質のバランスを調整する方法を示します。
from PIL import Image
# 画像を読み込む
image = Image.open("input_image.jpg")
# 圧縮率と画質のバランスを調整して保存する
quality_values = [100, 85, 70] # 異なる品質で保存
for quality in quality_values:
image.save(f"output_quality_{quality}.jpg", format="JPEG", quality=quality)
このコードでは、異なる品質(100、85、70)でJPEG画像を保存しています。
これにより、圧縮率と画質のバランスを比較することができます。
一般的に、品質を下げるとファイルサイズは小さくなりますが、画質も低下しますので、適切な値を選択することが重要です。
画像のメタデータと保存
画像ファイルには、画像そのもののデータに加えて、さまざまな情報を含むメタデータが付随しています。
メタデータは、画像の作成日時、カメラの設定、著作権情報などを含むことがあり、画像の管理や検索に役立ちます。
ここでは、メタデータの概要、メタデータを保持して画像を保存する方法、メタデータを削除して画像を保存する方法について解説します。
メタデータとは?
メタデータとは、データに関するデータのことを指します。
画像ファイルにおいては、以下のような情報がメタデータとして含まれることがあります。
- 作成日時: 画像が撮影または作成された日時
- カメラ情報: 使用したカメラのモデルや設定(シャッタースピード、絞り値など)
- 著作権情報: 画像の著作権に関する情報
- 位置情報: 撮影場所のGPS情報
メタデータは、画像の管理や整理に役立つ重要な情報です。
メタデータを保持して画像を保存する方法
Pillowライブラリを使用して画像を保存する際、メタデータを保持することができます。
以下のサンプルコードでは、メタデータを保持して画像を保存する方法を示します。
from PIL import Image
# 画像を読み込む
image = Image.open("input_image.jpg")
# メタデータを保持してPNG形式で保存する
image.save("output_image_with_metadata.png", format="PNG", quality=100)
このコードでは、input_image.jpg
のメタデータを保持したまま、output_image_with_metadata.png
として保存しています。
PNG形式では、メタデータを保持することが可能です。
メタデータを削除して画像を保存する方法
メタデータを削除して画像を保存する場合、Pillowではメタデータを明示的に削除する機能は提供されていませんが、画像を新たに作成することでメタデータを除去することができます。
以下のサンプルコードでは、メタデータを削除して画像を保存する方法を示します。
from PIL import Image
# 画像を読み込む
image = Image.open("input_image.jpg")
# 新しい画像を作成し、メタデータを削除して保存する
new_image = Image.new("RGB", image.size)
new_image.paste(image)
# メタデータを削除して保存する
new_image.save("output_image_without_metadata.png", format="PNG")
このコードでは、元の画像から新しい画像を作成し、メタデータを削除した状態でoutput_image_without_metadata.png
として保存しています。
この方法により、メタデータを含まない画像を得ることができます。
応用例:複数の画像を一括でPNG形式に変換
Pillowライブラリを使用すると、複数の画像を一括でPNG形式に変換することができます。
ここでは、フォルダ内の画像を一括で変換する方法、サブフォルダ内の画像も含めて変換する方法、変換後のファイル名を自動で変更する方法について解説します。
フォルダ内の画像を一括でPNGに変換する方法
特定のフォルダ内にあるすべての画像ファイルをPNG形式に変換するには、os
モジュールを使用してフォルダ内のファイルを取得し、Pillowで変換を行います。
以下のサンプルコードを参照してください。
from PIL import Image
import os
# 変換元のフォルダ
input_folder = "input_images"
# 変換先のフォルダ
output_folder = "output_images"
os.makedirs(output_folder, exist_ok=True) # 出力フォルダが存在しない場合は作成
# フォルダ内のすべての画像を一括でPNGに変換
for filename in os.listdir(input_folder):
if filename.endswith((".jpg", ".jpeg", ".bmp", ".gif")): # 対応する画像形式
image_path = os.path.join(input_folder, filename)
image = Image.open(image_path)
output_path = os.path.join(output_folder, f"{os.path.splitext(filename)[0]}.png")
image.save(output_path, format="PNG")
このコードでは、input_images
フォルダ内のすべてのJPEG、BMP、GIF形式の画像をPNG形式に変換し、output_images
フォルダに保存します。
サブフォルダ内の画像も含めて変換する方法
サブフォルダ内の画像も含めて一括で変換するには、os.walk
を使用してフォルダ内のすべてのファイルを再帰的に取得します。
以下のサンプルコードを見てみましょう。
from PIL import Image
import os
# 変換元のフォルダ
input_folder = "input_images"
# 変換先のフォルダ
output_folder = "output_images"
os.makedirs(output_folder, exist_ok=True) # 出力フォルダが存在しない場合は作成
# フォルダ内のすべての画像を一括でPNGに変換(サブフォルダも含む)
for root, dirs, files in os.walk(input_folder):
for filename in files:
if filename.endswith((".jpg", ".jpeg", ".bmp", ".gif")): # 対応する画像形式
image_path = os.path.join(root, filename)
image = Image.open(image_path)
# 出力パスを作成
relative_path = os.path.relpath(image_path, input_folder)
output_path = os.path.join(output_folder, f"{os.path.splitext(relative_path)[0]}.png")
os.makedirs(os.path.dirname(output_path), exist_ok=True) # サブフォルダを作成
image.save(output_path, format="PNG")
このコードでは、input_images
フォルダ内のすべての画像を再帰的に検索し、PNG形式に変換してoutput_images
フォルダに保存します。
サブフォルダも自動的に作成されます。
変換後のファイル名を自動で変更する方法
変換後のファイル名を自動で変更するには、ファイル名に特定のプレフィックスやサフィックスを追加することができます。
以下のサンプルコードでは、変換後のファイル名にconverted_
というプレフィックスを追加します。
from PIL import Image
import os
# 変換元のフォルダ
input_folder = "input_images"
# 変換先のフォルダ
output_folder = "output_images"
os.makedirs(output_folder, exist_ok=True) # 出力フォルダが存在しない場合は作成
# フォルダ内のすべての画像を一括でPNGに変換(ファイル名を変更)
for filename in os.listdir(input_folder):
if filename.endswith((".jpg", ".jpeg", ".bmp", ".gif")): # 対応する画像形式
image_path = os.path.join(input_folder, filename)
image = Image.open(image_path)
# 変換後のファイル名にプレフィックスを追加
output_path = os.path.join(output_folder, f"converted_{os.path.splitext(filename)[0]}.png")
image.save(output_path, format="PNG")
このコードでは、変換後のファイル名にconverted_
を追加して保存しています。
これにより、元のファイル名を保持しつつ、変換されたことがわかるようになります。
応用例:スクリーンショットをPNG形式で保存
スクリーンショットを取得してPNG形式で保存することは、デスクトップアプリケーションやウェブアプリケーションの状態を記録するのに便利です。
ここでは、スクリーンショットを取得する方法、PNG形式で保存する方法、特定のウィンドウや領域をキャプチャして保存する方法について解説します。
スクリーンショットを取得する方法
Pythonでは、pyautogui
ライブラリを使用してスクリーンショットを取得することができます。
まず、pyautogui
をインストールする必要があります。
pip install pyautogui
以下のサンプルコードでは、全画面のスクリーンショットを取得します。
import pyautogui
# スクリーンショットを取得
screenshot = pyautogui.screenshot()
このコードでは、全画面のスクリーンショットをimage
という変数に格納しています。
スクリーンショットをPNG形式で保存する方法
取得したスクリーンショットをPNG形式で保存するには、Pillowライブラリのsaveメソッド
を使用します。
以下のサンプルコードでは、スクリーンショットをPNG形式で保存します。
import pyautogui
from PIL import Image
# スクリーンショットを取得
screenshot = pyautogui.screenshot()
# PNG形式で保存する
screenshot.save("screenshot.png", format="PNG")
このコードでは、取得したスクリーンショットをscreenshot.png
として保存しています。
特定のウィンドウや領域をキャプチャして保存する方法
特定のウィンドウや領域をキャプチャするには、pyautogui
のregion
オプションを使用します。
以下のサンプルコードでは、指定した領域をキャプチャしてPNG形式で保存します。
import pyautogui
# キャプチャする領域を指定(左, 上, 幅, 高さ)
region = (100, 100, 400, 300) # (左, 上, 幅, 高さ)
# 指定した領域のスクリーンショットを取得
screenshot = pyautogui.screenshot(region=region)
# PNG形式で保存する
screenshot.save("region_screenshot.png", format="PNG")
このコードでは、左上の座標が(100, 100)で、幅が400ピクセル、高さが300ピクセルの領域をキャプチャし、region_screenshot.png
として保存しています。
これらの方法を使用することで、全画面や特定の領域のスクリーンショットを簡単に取得し、PNG形式で保存することができます。
スクリーンショットは、デバッグやドキュメンテーションに役立つ重要なツールです。
応用例:Webカメラの画像をPNG形式で保存
Webカメラを使用して画像を取得し、PNG形式で保存することは、監視カメラや顔認識アプリケーションなど、さまざまな用途に役立ちます。
ここでは、Webカメラから画像を取得する方法、取得した画像をPNG形式で保存する方法、連続キャプチャをPNG形式で保存する方法について解説します。
Webカメラから画像を取得する方法
Pythonでは、opencv-python
ライブラリを使用してWebカメラから画像を取得することができます。
まず、opencv-python
をインストールする必要があります。
pip install opencv-python
以下のサンプルコードでは、Webカメラから画像を取得します。
import cv2
# Webカメラを初期化
cap = cv2.VideoCapture(0)
# 画像を取得
ret, frame = cap.read()
# Webカメラを解放
cap.release()
このコードでは、Webカメラを初期化し、frame
に取得した画像を格納しています。
ret
は画像取得の成功を示すブール値です。
取得した画像をPNG形式で保存する方法
取得した画像をPNG形式で保存するには、cv2.imwriteメソッド
を使用します。
以下のサンプルコードでは、取得した画像をPNG形式で保存します。
import cv2
# Webカメラを初期化
cap = cv2.VideoCapture(0)
# 画像を取得
ret, frame = cap.read()
# Webカメラを解放
cap.release()
# PNG形式で保存する
cv2.imwrite("webcam_image.png", frame)
このコードでは、取得した画像をwebcam_image.png
として保存しています。
連続キャプチャをPNG形式で保存する方法
連続して画像をキャプチャし、PNG形式で保存するには、ループを使用します。
以下のサンプルコードでは、指定した回数だけ連続して画像をキャプチャし、PNG形式で保存します。
import cv2
import time
# Webカメラを初期化
cap = cv2.VideoCapture(0)
# 連続キャプチャの回数
num_captures = 5
for i in range(num_captures):
# 画像を取得
ret, frame = cap.read()
# PNG形式で保存する
cv2.imwrite(f"webcam_image_{i + 1}.png", frame)
# 1秒待機
time.sleep(1)
# Webカメラを解放
cap.release()
このコードでは、Webカメラから5回連続して画像を取得し、webcam_image_1.png
、webcam_image_2.png
、…のように保存しています。
各キャプチャの間に1秒の待機時間を設けています。
これらの方法を使用することで、Webカメラから画像を取得し、PNG形式で保存することができます。
連続キャプチャを行うことで、動的なシーンを記録することも可能です。
まとめ
この記事では、PythonのPillowライブラリを使用して画像を扱うさまざまな方法について解説しました。
具体的には、画像の読み込みや保存、加工、フォーマット変換、メタデータの管理、さらにはWebカメラやスクリーンショットの取得方法まで幅広く取り上げました。
これらの知識を活用することで、画像処理のスキルを向上させ、実際のプロジェクトに応用することが可能です。
ぜひ、実際にコードを試してみて、画像処理の技術を自分のものにしてみてください。