纯 Go · PSD / PSB · WebAssembly

让 PSD,
成为可编程的画布

psdkit 用纯 Go 读取、编辑并重新渲染 Photoshop 文档:按需解码图层与通道,改完保存为仍可继续编辑的 PSD/PSB,再输出 PNG / JPEG。同一份实现编译为 WebAssembly,在浏览器里本机处理文件。

go get github.com/gopkg-dev/psdkit
  • 0 第三方依赖核心库仅用标准库
  • 200+ 个 Go 入口浏览器能力目录
  • MIT 开源许可Go 1.27.3+
// 选择图层或拖动滑块,查看对应的 Go 调用

01 · 图层结构

从分解的图层,
到一张完整的画面

PSD 不是一张图片,而是一棵图层树。psdkit 读取每一层的像素、蒙版、混合方式与参数,再按 Photoshop 的规则把它们合成回来。

  1. 1
    透明画布Header 描述尺寸、位深与色彩模式
  2. 2
    背景 · 渐变填充DecodeGradientFill 读取参数
  3. 3
    主体 · 智能对象 + 蒙版像素蒙版裁出圆形主体
  4. 4
    光晕 · 滤色混合26 种确定性混合模式之一
  5. 5
    远山 · 形状与文字矢量形状与文字图层
  6. ✓
    合成完成Composite / RenderSource 输出整图

透明画布

02 · 处理流程

读取、编辑、渲染、导出

每一步都是独立、有预算、可取消的 Go 调用。不支持的特性返回结构化错误,而不是一张“看起来差不多”的图。

  1. 读取

    只索引结构,不预先解码像素;按图层、通道、区域和原位深按需读取。

    OpenDocument · DecodeChannel
  2. 编辑

    稳定 LayerID 定位,改名、显隐、不透明度、像素替换、增删图层与智能对象内容。

    OpenEditor · SetOpacity · ReplaceContents
  3. 渲染

    在支持范围内实时重绘整图、区域、分块与画板;保存预览与实时结果分开报告。

    RenderSource · Composite
  4. 导出

    写回可继续编辑的 PSD/PSB,未改动的数据尽量保持原字节;或编码 PNG / JPEG。

    SavePSD · Encode

03 · 接入方式

写几行代码,
画面真的会变

Go WebAssembly 在浏览器中打开模板PSD。点选印花或上传自己的图片,自动替换共享智能图层并重绘成衣效果,也可下载 PNG 或编辑后的 PSD。

main.js
import { PsdkitClient } from './demo/sdk/client.js';

const engine = new PsdkitClient({ workerURL: './demo/wasm/worker.js' });
await engine.ready();
const file = await engine.call('asset.put', { bytes: psdBytes, kind: 'document' });
const doc = await engine.call('document.open', { args: [{ $asset: file.data.asset }] });
// ↓ 启动引擎后,这里会追加你实际执行的调用
引擎未启动

在浏览器中运行真实的 Go 引擎

将下载约 14 MB 的 WebAssembly(启用压缩时约 4 MB)。文件只在本机处理。

04 · 支持范围

清楚标出,
能做什么、做到哪一步

每项能力按五个维度分别报告。“已完成”只适用于声明范围;近似算法默认关闭,必须显式开启。与能力矩阵同步更新于 2026-10-24。

Warp 预设整图与区域来源重绘已接通:已有横向 Arc Lower、4×2、仿射、零透视且无折叠的几何,可从实际来源输出整图、ROI、Tile、分块访问和单实例。逐次显式开启 ApproximateCustomWarp,零 bend 也一样;外链逐次映射。已验证编辑、PSD/PSB 四压缩保存、重开重绘和续编,以及 JSON、真实 Wasm与失败边界。任务进度59/141(42%),Warp6/9(67%);来源替换和其他预设继续拒绝。 查看完整矩阵

33个能力维度已完成
17个能力维度部分支持
0个能力维度未支持
10类显式近似
能力读取编辑保存保存预览实时重绘近似
PSD/PSB 格式与原始块读取:已完成编辑保存:已完成保存预览:已完成实时重绘:不涉及近似:不涉及
通道与位深读取:已完成编辑保存:已完成保存预览:已完成实时重绘:部分支持近似:不近似
图层树与基础属性读取:已完成编辑保存:已完成保存预览:已完成实时重绘:已完成近似:不近似
混合、剪贴、蒙版与 Blend If读取:已完成编辑保存:已完成保存预览:已完成实时重绘:已完成近似:可选近似
智能对象与外链读取:已完成编辑保存:已完成保存预览:已完成实时重绘:部分支持近似:可选近似
Warp 与变换读取:已完成编辑保存:部分支持保存预览:已完成实时重绘:部分支持近似:可选近似
文字与字体读取:已完成编辑保存:部分支持保存预览:已完成实时重绘:部分支持近似:可选近似
图层效果读取:已完成编辑保存:部分支持保存预览:已完成实时重绘:部分支持近似:可选近似
调整图层读取:已完成编辑保存:部分支持保存预览:已完成实时重绘:部分支持近似:可选近似
智能滤镜读取:已完成编辑保存:部分支持保存预览:已完成实时重绘:部分支持近似:可选近似
矢量与填充读取:已完成编辑保存:部分支持保存预览:已完成实时重绘:部分支持近似:可选近似
ICC 与色彩管理读取:已完成编辑保存:不涉及保存预览:已完成实时重绘:部分支持近似:可选近似
画板读取:已完成编辑保存:部分支持保存预览:已完成实时重绘:部分支持近似:可选近似
查看完整矩阵与说明

明确限制

  • 不承诺任意 PSD 与 Photoshop 逐像素一致;浏览器与原生 Go 一致不等于与 Photoshop 一致。
  • 保存预览可能是旧缓存或占位图,不能当作实时重绘结果。
  • 蒙版编辑后的自动保存预览限于支持范围内的 RGB8;16/32 位及部分 Knockout / 高级组合须提供准确的显式合成图,否则返回 unsupported。
  • 不读取系统字体,不自动替换缺失字体;字体需显式提供。
  • 外链只通过调用方显式映射解析,不读取 PSD 中的系统路径或任意 URL。
  • 近似策略默认关闭,只在调用方显式开启时生效,不会为取得画面静默启用。
  • 操控变形、任意 Warp 预设与未开放的几何 / 效果组合明确返回 unsupported。