PR

【9/26】島画像のバイナリデータ保存をやめる #4281

kouho opened this at 2025-09-24T18:51:49; closed

Description

opened by kouho at 2025-09-24T18:51:49; updated 2025-11-17T11:43:12

概要

user_island_imageのバイナリデータ保存をやめた

base_layout_json longtext COMMENT '島レイアウト情報(JSON)',
lv_layout_json longtext COMMENT '島レイアウト情報(レベル付きJSON)',

ALTER TABLE user_island_image
  ADD COLUMN `base_layout_json` longtext NOT NULL COMMENT '島レイアウト情報(JSON)' AFTER `lv_image_blob`,
  ADD COLUMN `lv_layout_json` longtext NOT NULL COMMENT '島レイアウト情報(レベル付きJSON)' AFTER `base_layout_json`;

備考

  • [x] キャッシュが効かなくなることで毎回描画する必要がありCPU負荷が上がる恐れがある
  • [x] 現状は形式のみの変更ユーザー側でレンダリングする場合、環境により動作が怪しくなることが懸念

  • [x] フロント側で描画するように修正を反映
  • [x] canvasは既存で使っているものであるので問題がないと判断
  • [x] サーバー側でレンダリングするかはdefine_y,define_gesoten ENABLE_SERVER_ISLAND_IMAGE_GENERATIONでフラグ切り替え
  • [x] 島画像の参照をpublic_httml/img/island_img以下に

対応詳細

概要

user_island_image テーブルに base_layout_json / lv_layout_json の 2 カラムを追加し、島レイアウトをバイナリ画像ではなく JSON で保存する方式へ移行しました。
これに伴い、サーバー側での JPEG 合成はフラグで制御しつつ、基本はフロントエンドの Canvas 描画へ切り替えています。
バックエンド側の対応

S_GetUserIslandLayoutDataEnsured() を新設し、JSON が無ければサーバーで再生成→再取得する安全網を作成。
各種 lib/public/* や lib/ajax/* の島関連レスポンスに island_layout(base / lv 両方)と updated_at を必ず含めるよう統一。
define_y.inc / define_gesoten.inc に ENABLE_SERVER_ISLAND_IMAGE_GENERATION を追加し、環境ごとにサーバー描画を ON/OFF 切り替え可能に。
画像参照パスを public_html/img/island_img/ 配下へ集約し、レガシー JPEG はフォールバック用途のみに整理。
フロントエンド側の対応

Main.tpl / Build.tpl / Friend.tpl など島を表示するテンプレートに <canvas> と island_layout JSON の埋め込み <script> を追加。初期ロード時点で Canvas 描画が走るように変更。
public_html/js/JOLLYROGER.js と jr_main.js に JRIslandLayout を利用した描画処理を実装。recordBundleSize → registerBundle → renderFromStore → renderToImage の流れで Canvas と静的画像を同期し、失敗時は showFallback で JPEG に退避。
フォールバック画像は data-legacy-src と JRIslandLayout.updateFallbackSource で管理し、AJAX 更新後も常に最新状態を維持。renderToImage で生成した data URL は従来の <img> 要素へ流し込み、ブラウザバック時も崩れないよう Promise 失敗ハンドリングを追加。
Canvas コンテナには aspect-ratio: 640 / 803 を付与し、旧 JPEG と同じアスペクト比でスケーリングするよう CSS を調整。
kouho change_title at 2025-09-25T11:14:29: [WIP]島画像のバイナリデータ保存をやめる 【9/26】島画像のバイナリデータ保存をやめる

Comment

#42869 by kouho at 2025-10-21T14:54:04; updated 2025-10-21T14:54:04

@wada
レビューお願いいたします

kouho close at 2025-11-17T11:43:12: Close

Commit range

baseef1809127f26626db5c74270447b13599bdb46aa
headef1809127f26626db5c74270447b13599bdb46aa
base branchjolly/jr-web:master
head branchjolly/jr-web:island_img_db

View commits

Commit details are loaded from Git when a dynamic archive server is running, or can be embedded with --include-commits.
Files changeddiff unavailable from SQL export only
The SQL dump stores PR commit IDs, but not the actual file patch. Regenerate with --repositories-root /path/to/gitbucket/repositories after mirroring repositories to include unified diff output.