PNG PngImagePlugin にはメタデータを保存するチャンクがある。Python からも簡単に読み書き可能なので、ここに prompt を保存しておくと、あとから参照したいときに便利になる
img が PIL の Image だとして、save を呼びだしているとこに pnginfo というのを足してあげる。
書き込むコード
from PIL.PngImagePlugin import PngInfo # ... metadata = PngInfo() metadata.add_text("prompt", "foo bar baz") img.save("./outputs/0.png", pnginfo=metadata)
このコードは、Pillowライブラリを使用して、PNG画像のメタデータにテキスト情報を追加するために使用されます。具体的には、PngInfo()関数は、新しいPNG情報オブジェクトを作成します。このPNG情報オブジェクトは、PNG画像のメタデータを格納するために使用されます。
次に、metadata.add_text()関数は、PNG情報オブジェクトにテキスト情報を追加します。第1引数の”prompt”は、テキスト情報のキーであり、第2引数の”foo bar baz”は、実際のテキスト情報の値です。この例では、”prompt”というキーで、”foo bar baz”というテキスト情報がPNG情報オブジェクトに追加されます。
最後に、img.save()関数は、PNG画像を保存するために使用されます。第1引数の”./outputs/0.png”は、保存するファイルのパスです。第2引数のpnginfoには、PNG情報オブジェクトを指定することができます。この例では、先に作成されたPNG情報オブジェクトをpnginfo引数に渡して、PNG画像のメタデータにテキスト情報が含まれるようにしています。
つまり、このコードは、PNG画像のメタデータにテキスト情報を追加して、PNG画像を保存するために使用されます。これは、PNG画像に追加の情報を格納するために使用されることがあります。例えば、画像の撮影日時や場所など、重要な情報をPNG画像に含めることができます。
読み出しコード
#!/usr/bin/env python import sys from PIL import Image from PIL.PngImagePlugin import PngInfo img = Image.open(sys.argv[1]) print(img.text['prompt'])
このコードは、Pillowライブラリを使用して、PNG画像から”prompt”というキーで格納されたテキスト情報を取得しています。
具体的には、Image.open()関数を使用して、sys.argv[1]で指定されたPNG画像を開き、imgという名前のImageオブジェクトを作成しています。次に、img.text属性にアクセスすることで、PNG画像のメタデータに含まれるテキスト情報を取得しています。’prompt’をキーとする辞書の値を出力しています。
つまり、このコードは、指定されたPNG画像のメタデータに含まれる”prompt”というキーで格納されたテキスト情報を取得して、標準出力に出力するために使用されます。
JPG画像の場合
PNG画像と同様にPillowライブラリを使用してメタデータを追加することができます。しかし、JPG画像とPNG画像では、メタデータの格納方法が異なります。JPG画像では、Exifと呼ばれるフォーマットが一般的に使用されており、Exifフォーマットに従ってメタデータを保存する必要があります。
具体的には、PillowライブラリにはExif情報を扱うためのpiexifというモジュールがあります。piexifを使用すると、JPG画像のExif情報にテキスト情報を追加することができます。以下は、JPG画像にExif情報を追加する例です。
python
Copy code
from PIL import Image from io import BytesIO import piexif # 画像の読み込み img = Image.open("./input.jpg") # Exif情報の取得 exif_dict = piexif.load(img.info["exif"]) # Exif情報にテキスト情報を追加 exif_dict["0th"][piexif.ImageIFD.XPTitle] = "foo bar baz" # Exif情報をJPG画像に保存 exif_bytes = piexif.dump(exif_dict) img.save("./output.jpg", "jpeg", exif=exif_bytes)
この例では、piexif.load()関数を使用して、JPG画像のExif情報を取得し、exif_dictという辞書に格納しています。次に、Exif情報にテキスト情報を追加するために、exif_dictに新しいキーと値を追加しています。例では、piexif.ImageIFD.XPTitleというキーに”foo bar baz”という値を設定しています。
最後に、piexif.dump()関数を使用して、更新されたExif情報をバイト列に変換し、JPG画像に保存します。img.save()関数の第3引数にexifを指定することで、JPG画像にExif情報を追加しています。