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`)処理に拡張しています。
# これで文字サイズもくっきり大きくなり、ちょうどいい透かし加減に調整できるようになります!
# ==============================