2025/12/26(金) [n年前の日記]
#1 [python] Pythonスクリプト内に画像を含めたい
Pythonスクリプト内にpng画像を含めておいて、Pillowで読み込んで画像処理をしたい。そんなことできるのかな…?
png画像をbase64に変換してしまえば可能。と、Microsoft Copilot が言っている。Windows11 x64 25H2 + Python 3.10.10 で試してみた。
_01_embed_image_file.py
im.convert("RGBA").point(lambda p: p * 2.0) で、画像の明度を上げている。
元画像は以下。

スクリプト実行後の出力画像は以下。

たしかに、base64文字列を Pillow で画像として読み込んで、画像処理ができている。
png画像をbase64に変換してしまえば可能。と、Microsoft Copilot が言っている。Windows11 x64 25H2 + Python 3.10.10 で試してみた。
_01_embed_image_file.py
"""
画像ファイルをPythonスクリプト内にbase64の形で含めておいて、
Pillow で読み込んで処理をするスクリプト。
"""
import base64
from io import BytesIO
from PIL import Image
# --- PNG画像(64x64, RGB)を base64 で埋め込む ---
EMBEDDED_PNG_BASE64 = (
"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"
"RU5ErkJggg=="
)
def main():
binary = base64.b64decode(EMBEDDED_PNG_BASE64)
im = Image.open(BytesIO(binary))
print(f"Loaded image: size={im.size} mode={im.mode}")
newim = im.convert("RGBA").point(lambda p: p * 2.0)
newim.save("output.png")
print("Saved processed image as output.png")
if __name__ == "__main__":
main()
im.convert("RGBA").point(lambda p: p * 2.0) で、画像の明度を上げている。
元画像は以下。

スクリプト実行後の出力画像は以下。

たしかに、base64文字列を Pillow で画像として読み込んで、画像処理ができている。
◎ base64への変換 :
png画像をbase64に変換する方法で少し悩んだ。最初は Python スクリプトで書いたけど…。
_png2base64.py
ググってみたら、Windows環境の場合、certutil というプログラムで base64 に変換できるらしい。
_WindowsでBase64エンコード/デコードする方法 コマンドプロンプト - Qiita
DevToys でも base64 に変換できることに気づいた…。DevToys もインストール済みだった…。
_DevToys - A Swiss Army knife for developers
_エンジニアのための十徳ナイフ「DevToys」がバージョン2になってクロスプラットフォームやCLI対応しさらに便利すぎる ツール - Qiita
CLI版の devtoys.cli.exe なら、以下で base64 にできた。
ヘルプは以下で表示できる。
_png2base64.py
"""
Convert png to base64
Usage : python png2base64.py
Windows11 x64 25H2 + Python 3.10.10 64bit
"""
import base64
FILENAME = "input.png"
def image_to_base64(file_path):
try:
with open(file_path, "rb") as image_file:
encoded_string = base64.b64encode(image_file.read()).decode("utf-8")
return encoded_string
except FileNotFoundError:
return f"Error: Not found {file_path}"
if __name__ == "__main__":
result = image_to_base64(FILENAME)
print(result)
ググってみたら、Windows環境の場合、certutil というプログラムで base64 に変換できるらしい。
certutil -f -encode input.png base64.txt
_WindowsでBase64エンコード/デコードする方法 コマンドプロンプト - Qiita
DevToys でも base64 に変換できることに気づいた…。DevToys もインストール済みだった…。
_DevToys - A Swiss Army knife for developers
_エンジニアのための十徳ナイフ「DevToys」がバージョン2になってクロスプラットフォームやCLI対応しさらに便利すぎる ツール - Qiita
CLI版の devtoys.cli.exe なら、以下で base64 にできた。
devtoys.cli.exe base64img -i input.png
ヘルプは以下で表示できる。
devtoys.cli --help devtoys.cli base64img --help
[ ツッコむ ]
以上です。