吉里吉里Z (KirikiriZ) 用の PSD (Photoshop) ファイル読み込みプラグイン psdfile.dll。
PSD ファイルの構造解析・レイヤ単位の画像取得・合成画像 (merged image) 取得を行い、
さらに psd:// 仮想ストレージとして個別レイヤを画像ファイルのように扱えるようにする。
PSD パース/書き出しのコア部分は別リポジトリ wamsoft/psdparse に分離されており、本リポジトリは submodule として取り込んで吉里吉里バインドだけを行う。
submodule を含むので必ず --recursive で clone するか、後から git submodule update --init する:
git clone --recursive https://github.com/wamsoft/psdfile.git
# or
git clone https://github.com/wamsoft/psdfile.git
cd psdfile
git submodule update --init --recursive要件:
- Windows + MSVC (Visual Studio 2022 で動作確認)
- CMake 3.16 以上
- vcpkg (環境変数
VCPKG_ROOTを設定) - tp_stub と ncbind を隣接ディレクトリに配置
(規定では
..\tp_stub/..\ncbindを見る。CMake オプションTPSTUB_DIRで上書き可)
$env:VCPKG_ROOT = 'd:\vcpkg'
# Makefile 経由 (推奨)
make PRESET=x64-windows BUILD_TYPE=Debug build
make PRESET=x64-windows BUILD_TYPE=Release build
# 直接 cmake で叩く場合
cmake --preset x64-windows
cmake --build --preset x64-windows --config Release成果物: build/x64-windows/Release/psdfile.dll
依存パッケージは vcpkg manifest (vcpkg.json) で zlib のみ。
詳細は manual.tjs を参照 (これが API 正本)。
var psd = new PSD();
psd.load("foo.psd");
// 基本プロパティ
psd.width, psd.height, psd.channels, psd.color_mode, psd.layer_count;
// レイヤ情報
var info = psd.getLayerInfo(0);
// info.name, info.top/left/bottom/right, info.blend_mode, info.visible, ...
// レイヤ画像をレイヤオブジェクトに展開
var lay = new Layer(window, null);
psd.getLayerData(lay, 0); // マスク繰り込み済み
psd.getLayerDataRaw(lay, 0); // マスク無視
psd.getLayerDataMask(lay, 0); // マスクのみ
// 合成済み画像
psd.getBlend(lay);ロード済み PSD はそのまま吉里吉里のストレージとしても見える。レイヤ画像を 通常のファイルアクセスと同じ書き方で読み込める:
psd://<PSDファイル名>/root/<フォルダ名>/.../<レイヤ名>.bmp
psd://<PSDファイル名>/id/<レイヤID>.bmp
- PSD ファイル名はベース名のみで小文字に正規化される
- フォルダ名・レイヤ名も小文字化され、含まれる
/は_に置換される - 名前が重複する場合は後にあるものが優先
var lay = new Layer(win, null);
lay.loadImages("psd://foo.psd/root/face/eye.bmp");| 形式 | 状態 |
|---|---|
| RGB 8/16/32bpp | ○ (16/32bpp は ICC プロファイル非対応、Photoshop と色が異なる場合あり) |
| CMYK 8/16/32bpp | ○ (16/32bpp は同上) |
| Grayscale | ○ |
| Bitmap (2値) | △ レイヤが存在しないので getBlend() で取得 |
| Indexed | △ 同上 |
| Lab | × 未対応 |
| Multichannel | × 未対応 |
| DuoTone | × 未対応 |
レイヤマスクは画像読み込み時にアルファチャネルへ繰り込まれる。クリッピングマスクは未対応。
PSD コア:
external/psdparse/ ← submodule (https://github.com/wamsoft/psdparse, MIT)
psdparse/ — C++17 ライブラリ
python/ — pybind11 バインディング (psdfile からは使わない)
tests/ — pytest (psdfile からは実行しない)
docs/ — 仕様・ロードマップ
吉里吉里ラッパ:
psdclass.h, psdclass.cpp PSD クラス本体 (Layer 取得・ストレージ I/F)
psdclass_loadstream.cpp iTJSBinaryStream を psd::StreamReader::Source で
ラップして lazy I/O のまま psdparse に流す
main.cpp PSDStorage (psd:// ストレージ) + NCB 登録
PSD ファイルは parse 段階では構造メタデータだけ読み込まれ、レイヤピクセルは要求された時点で ストリーム越しに展開される (大型 PSD でもメモリを食わない設計)。
- psdparse 側 (パーサ/エンコーダ等) を直したい場合: wamsoft/psdparse で commit/push してから本リポジトリで
git submodule update --remote external/psdparse→ コミット。 - 吉里吉里バインドだけ変更したい場合: 本リポジトリの
psdclass*.cpp/main.cppを直接編集 +manual.tjsを同期更新。
- 本プラグイン (
psdfile.dll部分): 吉里吉里本体に準拠 - 同梱の zlib 部分: zlib license
- submodule の psdparse: MIT License (
external/psdparse/LICENSE)
- わたなべごう
- ゆーき