mieki256's diary



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
"""
画像ファイルを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) で、画像の明度を上げている。

元画像は以下。

input.png

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

output.png

たしかに、base64文字列を Pillow で画像として読み込んで、画像処理ができている。

base64への変換 :

png画像をbase64に変換する方法で少し悩んだ。最初は Python スクリプトで書いたけど…。

_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

以上です。

過去ログ表示

Prev - 2025/12 -
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project