ちょっと仕事で楽をしたい時、「こんなプログラムやアプリがあればなあ」という時がある。
プログラムを作る能力がある人しかそれをできなかった時代はとうの昔に終わり、今は自分の母語で「やってほしいこと」を記述できればちょっとしたツールやアプリを作ってくれる時代になった。
例えばわたしは8×8ドットのPNG形式の画像で次のようなアルファベットフォントを作った。
![](https://torisky.com/wp-content/uploads/2024/07/8x8dot_fonts._blackjpg.jpg)
フォント色を黒にしてしまったため、使い勝手が悪いと思いフォント色を白にしようと考えた。
画像処理ソフトで1つ1つの画像の色をちまちまと変えるのは忍びない。ここは一つフォルダにあるPNG画像を全て読み込んで指定の色を別の色に置き換えるアプリを作れないだろうか?と考えた。
でも自分ではさっと作れない。
こういう時は最近流行りの生成AIだろう。
プログラミングが得意と言われているClaudeを使ってみた。
次のような日本語で指示した。
PythonでPNG画像を読み込むプログラム
・フォルダ内のPNG画像を全て読み込む
・PNG画像の特定の色を別の色に置き換える機能を持つ
・引数として次の3つを指定する「読み込むフォルダ名」、「変更したい色名」、「変更後の色名」
・上記「変更したい色名」、「変更後の色名」は16進カラーで指定するものとする
ものの10秒で以下のPythonプログラムが出力された。
import os
import sys
from PIL import Image
def replace_color(input_folder, color_to_replace, new_color):
# 16進カラーコードをRGBタプルに変換
color_to_replace = tuple(int(color_to_replace[i:i+2], 16) for i in (0, 2, 4))
new_color = tuple(int(new_color[i:i+2], 16) for i in (0, 2, 4))
# 入力フォルダ内のすべてのPNGファイルを処理
for filename in os.listdir(input_folder):
if filename.lower().endswith('.png'):
file_path = os.path.join(input_folder, filename)
# 画像を開く
with Image.open(file_path) as img:
# RGBAモードに変換
img = img.convert('RGBA')
# ピクセルデータを取得
data = img.getdata()
# 新しいピクセルデータを作成
new_data = []
for item in data:
# アルファチャンネルを保持しつつ、指定された色を置換
if item[:3] == color_to_replace:
new_data.append(new_color + (item[3],))
else:
new_data.append(item)
# 新しいピクセルデータを画像に適用
img.putdata(new_data)
# 処理後の画像を保存
output_filename = f"processed_{filename}"
output_path = os.path.join(input_folder, output_filename)
img.save(output_path)
print(f"Processed: {filename} -> {output_filename}")
if __name__ == "__main__":
if len(sys.argv) != 4:
print("Usage: python script.py <input_folder> <color_to_replace> <new_color>")
sys.exit(1)
input_folder = sys.argv[1]
color_to_replace = sys.argv[2]
new_color = sys.argv[3]
replace_color(input_folder, color_to_replace, new_color)
しかも使い方や解説も丁寧である。(以下引用)
このプログラムの使用方法は以下の通りです:
- コマンドラインから次のように実行します: Copy
python script.py <input_folder> <color_to_replace> <new_color>
例: Copypython script.py ./images FF0000 00FF00
これは、./images
フォルダ内のすべてのPNG画像で、赤色(FF0000)を緑色(00FF00)に置き換えます。 - プログラムは指定されたフォルダ内のすべてのPNG画像を処理し、元のファイル名の前に “processed_” を付けて新しいファイルとして保存します。
- 処理が完了すると、各ファイルの処理状況がコンソールに表示されます。
注意点:
- このプログラムは、PILライブラリを使用しています。事前に
pip install pillow
でインストールしてください。 - 色は16進カラーコード(例:FF0000)で指定します。
- アルファチャンネル(透明度)は保持されます。
- 大きな画像や多数の画像を処理する場合、処理に時間がかかる可能性があります。
このプログラムをベースに、必要に応じて機能を追加したり、エラー処理を強化したりすることができます。
おかげですぐに同じPNG形式で白いフォント色の画像が出力できた。
![](https://torisky.com/wp-content/uploads/2024/07/8x8dot_fonts.jpg)
ただ、一つ気になったのは、わたしが先ほど生成AIに指示した日本語は、すでにプログラムに近いのではないかという点だ。
PythonでPNG画像を読み込むプログラム
・フォルダ内のPNG画像を全て読み込む
・PNG画像の特定の色を別の色に置き換える機能を持つ
・引数として次の3つを指定する「読み込むフォルダ名」、「変更したい色名」、「変更後の色名」
・上記「変更したい色名」、「変更後の色名」は16進カラーで指定するものとする
プログラマなら知っているような用語(例えば16進カラーとか)を当たり前のように使って指示してる。
なんとなく順序も書いてあるし、「引数として~」などというくだりはプログラムそのもので一般の人がみたら「なんじゃこりゃ?」となるはずだ。
プログラミングの知識があれば生成AIにプログラミングをさせて道具として使いこなせるかもしれないが、あまり知識がない状態で答えを得てもプログラムの実行方法も含めて戸惑うことが多いのではないだろうか。
一から十まで生成AIに聞いてしまうようだとGoogle検索と同じでいつまでたっても身につかないで調べるだけの人生になりそうだ。
コメント