python 画像処理 | 60歳を迎えて、思うこと。

60歳を迎えて、思うこと。

いつの間にか、「60」という年月が経ちました。
残り少ないか多いか?わかりませんが。
じじぃ~の「ひとりごと」を細々と続けられれば。。。

python 画像処理

# python

にゃあにゃあ

ぶろぐ用
記録用
いろいろ用

写真加工 面倒だぜ

【Gemini】様


丸投げ!

# ==== 【Gemini】様

# ### フォントサイズ変更&半透明対応コード
 

import os
from PIL import Image, ImageDraw, ImageFont

# --- 設定項目 ---
INPUT_DIR = r"D:\_スマホ\Blog\2026-08-29"      # 手動トリミング後の画像を入れるフォルダ
OUTPUT_DIR = r"D:\_スマホ\Blog\2026-08-29-resize"    # 処理後の保存先フォルダ
TARGET_WIDTH = 900              # 横幅のピクセル数(縦は自動計算)
FILE_PREFIX = "Blog-"       # リネームのプレフィックス(例: blog_img_01.jpg)
# WATERMARK_TEXT = "Nothing Phone(4a)Pro"     # ウォーターマークの文字

# INPUT_DIR = "./trim_images"      # 手動トリミング後の画像を入れるフォルダ
# OUTPUT_DIR = "./blog_images"    # 処理後の保存先フォルダ
# TARGET_WIDTH = 800              # 横幅のピクセル数(縦は自動計算)
# FILE_PREFIX = "Nothing Phone(4a)Prog_img_"       # リネームのプレフィックス

# --- ウォーターマークの設定 ---
WATERMARK_TEXT = "Nothing Phone(4a)Pro"     # 表示する文字
FONT_SIZE = 36                  # ★フォントサイズ(お好みの大きさに変更可能)
# OPACITY = 128                   # ★透明度(0: 完全透明 〜 255: くっきり不透明)
OPACITY = 255                   # ★透明度(0: 完全透明 〜 255: くっきり不透明)


# OSごとの標準フォントファイルのパスを指定
# Windowsの場合(メイリオ)
FONT_PATH = "C:/Windows/Fonts/meiryo.ttc"
# Macの場合は以下を使う(コメントアウトを切り替えてください)
# FONT_PATH = "/System/Library/Fonts/Helvetica.ttc"

os.makedirs(OUTPUT_DIR, exist_ok=True)

# フォントの読み込み(見つからない場合は標準フォントで代用)
try:
    font = ImageFont.truetype(FONT_PATH, FONT_SIZE)
except IOError:
    print("指定されたフォントが見つからないため、デフォルトフォントを使用します。")
    font = ImageFont.load_default()

# フォルダ内のJPG画像を処理
files = [f for f in os.listdir(INPUT_DIR) if f.lower().endswith(('.jpg', '.jpeg', '.png'))]
files.sort()

for idx, filename in enumerate(files, start=1):
    input_path = os.path.join(INPUT_DIR, filename)
    
    with Image.open(input_path) as img:
        img = img.convert("RGB")
        
        # 1. リサイズ(横幅指定・縦横比維持)
        w_percent = TARGET_WIDTH / float(img.size[0])
        h_size = int(float(img.size[1]) * float(w_percent))
        img_resized = img.resize((TARGET_WIDTH, h_size), Image.Resampling.LANCZOS)
        
        # 2. 半透明描画用の「透明レイヤー(RGBA)」を作成
        watermark_layer = Image.new("RGBA", img_resized.size, (255, 255, 255, 0))
        draw = ImageDraw.Draw(watermark_layer)
        
        # 3. 文字の描画サイズを取得して、右下の位置を自動計算
        # (文字の大きさが変わっても自動で右下ぴったりに配置されます)
        bbox = draw.textbbox((0, 0), WATERMARK_TEXT, font=font)
        text_width = bbox[2] - bbox[0]
        text_height = bbox[3] - bbox[1]
        
        # 右端・下端から20ピクセル余白をとった位置に配置
        margin = 20
        text_position = (TARGET_WIDTH - text_width - margin, h_size - text_height - margin)
        
        # 4. 透明レイヤーに半透明の白文字を描画 (RGB + Alpha)
        draw.text(text_position, WATERMARK_TEXT, font=font, fill=(255, 255, 255, OPACITY))
        
        # 5. 元画像と透明レイヤーを合成
        img_resized = img_resized.convert("RGBA")
        combined = Image.alpha_composite(img_resized, watermark_layer)
        final_img = combined.convert("RGB")
        
        # 6. 保存(Exif削除・連番リネーム)
        output_filename = f"{FILE_PREFIX}{idx:02d}.jpg"
        output_path = os.path.join(OUTPUT_DIR, output_filename)
        final_img.save(output_path, "JPEG", quality=85)
        
        print(f"完了: {output_filename}")

print("すべての処理が完了しました!")



### 追加・変更したポイント
# 1. **`FONT_SIZE` と `OPACITY` の設定追加**
# * `FONT_SIZE = 36` で文字の大きさを指定できます。
# * `OPACITY = 128`(半透明)に設定しています。数値(0〜255)を小さくすると薄くなり、大きくすると濃くなります。
# 2. **位置(座標)の自動計算**
# * 文字サイズや文字数を変えても、自動的に「右下から20ピクセル内側」の位置に納まるよう計算(`draw.textbbox`)するようにしました。手動で位置を微調整する手間がなくなります!
# 3. **透明レイヤーの合成**
# * 文字を薄く(透かし)するために、一度透明なシート(`RGBA`)に文字を書いてから、写真の上に重ね合わせる(`alpha_composite`)処理に拡張しています。
# これで文字サイズもくっきり大きくなり、ちょうどいい透かし加減に調整できるようになります!
# ==============================