Photo Gallery 2026 できた。
年ごとのギャラリーはPhotoshopでちまちまとその年の写真を平均化してサムネイルを作成していたのですが、昨年(2025年)は Pythonで加算平均合成 させてからPhotoshopで文字入れの流れで作成していました。
今年はPHPでそれらを自動化!完全自動にしてもいいのですが、生成タイミングを考えて半自動に。ただ、アップしたURLを踏むだけでいいのでほぼ自動化なのですが、一気に楽になりました。
その2026年版サムネイル…まだ3枚(+2枚追加)しかないので輪郭が残っています。これもそのうち見えなくなるので、せっかくだから最初のサムネを残しておこう。
PHPで“雰囲気平均”サムネを自動生成する仕組み(仕様)
thumbnail.php は、指定フォルダ内のJPEG画像をまとめて読み込み、平均化した雰囲気のサムネイル画像を生成してPNGとして保存するスクリプト。
できること
指定フォルダ内の JPEG(.jpg / .jpeg) を対象にする
画像を 250×166px にリサイズ(アスペクト比は維持せず、縦横を合わせて変形OK)
複数画像を 加重平均合成(現在の合成結果 × (n-1)/n + 新しい画像 × 1/n)で合成
2枚目は50%、3枚目は33%、…のように少しずつ混ぜていき、フォルダ全体の“空気感”に寄せる
仕上げに中央へ 文字(デフォルトはフォルダ名) を描画
フォント:指定フォルダに保存したCantataOne-Regular.ttf を使用(thumbnail.php から相対参照)
最後に PNGで保存(デフォルト thumb.png)
出力
保存先:対象フォルダ内
デフォルト出力名:thumb.png
画像サイズ:250×166px(PNG)
呼び出し方法
Web(例)
.../thumbnail.php?dir=2025
.../thumbnail.php?dir=2025&out=thumb.png(出力名変更)
.../thumbnail.php?dir=2025&text=2025(文字を指定)
安全面の仕様
dir は gallery配下のみ解決できるよう制限(パストラバーサル対策)
対象拡張子はJPEGのみ(.jpg/.jpeg)
メモ(実装上の工夫)
合成前に全画像を 最終サイズへ縮小してから処理するので、枚数が多くても比較的軽い
PHP新しめ環境で出る imagedestroy の警告回避のため、破棄は unset() で処理
大量画像向けに gc_collect_cycles() を適度に挟んでメモリ安定化