こんにちは!
5/17(金)は、前職場の飲み会に招待頂きました。
場所は、大田区蒲田になります。
会の開始時間よりも早くに現着したので、JR蒲田駅周辺を軽く散策しました。
昭和感満載の立ち飲みのお店が沢山あります。
さてと、今回はJPEGとPNGとの違いについて書きます。
それぞれの詳細な説明は、
と
を参照願います。
両者の違いは、
を参照願います。
見た目の顕著な差は、
PNGは、
です。ここでは、PNGからGIFのぱらぱらアニメーションを作ってみたいと思います。
以下は、そのPythonスクリプトになります。用いたPNGファイル群
# 本スクリプトと出力ファイルは、カレントフォルダ
from PIL import Image
import os
# 連番の静止画像が保存されているフォルダ
input_folder = './splitted'
# file タイプ
f_type = 'png'
# 出力するGIFアニメーションのファイル名
output_filename = "anime.gif"
# アニメーションの速度(ミリ秒単位)
duration = 1000 # 100ミリ秒 = 0.1秒
def create_gif_from_images():
# 画像、パラメータ選択
if f_type == 'png':
print('PNG')
i_type = 'RGBA'
elif f_type == 'jpg':
print('JPEG')
i_type = 'RGB'
else:
print('No matched file type.')
image_files = sorted([f for f in os.listdir(input_folder) if f.endswith('.' + f_type)],reverse= False)
if not image_files:
print("No images found in the specified folder.")
return
# 画像を読み込んでリストに追加
images = [Image.open(os.path.join(input_folder, img)).convert(i_type) for img in image_files]
# GIFアニメーションを作成
images[0].save(output_filename+'.gif', save_all=True, append_images=images[1:], duration=duration, loop=0)
print(f"GIFアニメーションを {output_filename} に保存しました。")
if __name__ == '__main__':
create_gif_from_images()
###
以上のスクリプトから、生成されたGIFファイルですが、
になります。 12種のPNGファイルを重ねていくのですが、各PNGファイルの背景が透明なために、背景部分に先の画像が残って上書きされて行きます。
で紹介したアニメーションですが、PNGファイルをJPEGに変換する際に背景の透明な部分を“白色”に変換しています。
PNG→JPEG変換のPythonのスクリプトは、
###
from PIL import Image
import os
r = 255
g = 255
b = 255
# 透明度の設定0: 100%透過, 255: 不透過
a = 255
def convert_png_to_jpg(input_folder, output_folder):
# 元のフォルダー内の全ての.pngファイルを取得
file_list = [file for file in os.listdir(input_folder) if file.endswith(".png")]
for file_name in file_list:
# 画像を開く
image = Image.open(os.path.join(input_folder, file_name))
# 透明部分を変換
image = image.convert("RGBA")
data = image.getdata()
new_data = [(r, g, b, a) if item[3] == 0 else item for item in data]
image.putdata(new_data)
# JPEG形式に変換
image = image.convert("RGB")
# 保存ファイルパスを作成
output_path = os.path.join(output_folder, file_name.replace(".png", ".jpg"))
# 画像を保存
image.save(output_path)
# 使用例
input_folder = "./" # 変換する元の画像フォルダー
output_folder = "./" # 変換した画像を保存するフォルダー
convert_png_to_jpg(input_folder, output_folder)
###
となります。
r = g = b = 255の時は、背景が白
r = g = b = 0の時は、背景が黒
ではでは