用 PhotoCraft 打开 GIMP 的 XCF 文件,把 XCF 转成 PSD
不装 GIMP 也能打开 .xcf:免费的 PhotoCraft 能读出图层、图层组、蒙版和混合模式,并把 XCF 转成 PSD、PNG 或 OpenRaster,单个文件和整个文件夹都行。
一句话回答:不装 GIMP 也能打开 .xcf。从 v0.13.0 起,PhotoCraft 能打开 GIMP 1.x 到 3.2 保存的 XCF 文件(包括 gzip 压缩的 .xcf.gz),图层、嵌套图层组、图层蒙版、混合模式、额外通道和存储的选区都能带过来(#2945)。不过只能读、不能写,PhotoCraft 存不了 XCF。要把 XCF 转成 PSD,打开后用 文件 › 另存为…(Save As…)即可,对 XCF 文档它默认就建议存成 PSD。文字图层、矢量图层和链接图层会变成普通像素,GIMP 3 的非破坏性滤镜和路径不会导入,打开时弹出的警告会逐项说明。本文以 v0.16.0(2026 年 10 月 25 日)为准,这个版本还修好了一个问题:带链接图层的 XCF 在 v0.13.0 到 v0.15.1 里打不开(#8865)。
Photoshop 本身打不开 .xcf,所以 PhotoCraft 也是把 GIMP 作品交给 Photoshop 用户的一个免费中转站。可以在下载页下载,也可以直接用浏览器打开在线编辑器试试。
能打开什么
这个读取器是 PhotoCraft 自己写的,依据 GIMP 公开的 XCF 规范,并用 GIMP 3.2.6 保存的文件做过对照,参照物是 GIMP 自己合并渲染出的结果。代码里没有用到 GIMP 的代码。
版本、位深和压缩
| GIMP 文件 | 在 PhotoCraft 里 |
|---|---|
| XCF 版本 0 到 26(GIMP 1.x 到 3.2) | 能打开。更新的版本也能打开,但会提示,读取器不认识的部分会跳过 |
| GIMP 2.10 和 3.x 的文件 | 能打开。真实文件测试用的是 GIMP 3.2.6;更早的版本靠按规范构造的测试文件覆盖 |
| 8 位整数 | 8 位/通道 |
| 16 位整数 | 16 位/通道 |
| 32 位整数 | 16 位/通道,有提示 |
| 16 位(半精度)、32 位、64 位浮点 | 32 位/通道浮点,超过 1.0 的值保留 |
| 线性光精度 | 指定线性 sRGB(或线性灰度)配置文件,文件自带的配置文件会被替换,有提示 |
| RGB、灰度 | 保持 RGB 或灰度 |
| 索引颜色 | 按颜色表转成 RGB 打开,有提示 |
| 不压缩、RLE、zlib 的图块 | 都能打开 |
.xcf.gz(或 .xcfgz) | 能打开。.xcf.bz2 和 .xcf.xz 不行,要先解压 |
PhotoCraft 按文件开头的签名识别 XCF,所以改了扩展名的 XCF 照样能当 XCF 打开。
图层
| GIMP 里 | PhotoCraft 里 |
|---|---|
| 任意大小和位置的像素图层(包括超出画布的) | 位置不变的像素图层 |
| 嵌套的图层组;Pass through 图层组 | 图层组;穿透(Pass Through)图层组 |
| 名称、可见性、不透明度 | 保留 |
| 图层蒙版(应用或停用) | 图层蒙版,启用或停用状态不变 |
| 锁定 Alpha、锁定像素、锁定位置 | 锁定透明像素(Lock transparent pixels)、锁定图像像素(Lock image pixels)、锁定位置(Lock position) |
| 没有 Alpha 通道的图层 | 打开 锁定透明像素 的图层 |
| 颜色标签 | 图层颜色。GIMP 的棕色标签没有对应颜色,会被丢掉 |
| 文字图层 | 像素,有提示,文字不能再编辑 |
| 矢量图层和链接图层(GIMP 3.2) | 像素,有提示 |
| 图层上的非破坏性滤镜(GIMP 3) | 不应用:图层以未加滤镜的样子打开,有提示 |
| 浮动选区 | 不导入,提示你先在 GIMP 里锚定 |
| GIMPhoto 保存的剪贴图层 | 剪贴蒙版 |
混合模式
GIMP 现行的模式和旧版(legacy)模式都会映射到 Photoshop 的模式,也就是 PhotoCraft 用的那一套。GIMP 一栏保留英文名。
| GIMP 模式 | PhotoCraft 模式 |
|---|---|
| Normal、Dissolve、Multiply、Screen、Overlay、Difference、Darken only、Lighten only、Divide、Hard light、Vivid light、Pin light、Linear light、Hard mix、Exclusion、Linear burn、Subtract | 对应的同名模式:正常、溶解、正片叠底、滤色、叠加、差值、变暗、变亮、划分、强光、亮光、点光、线性光、实色混合、排除、线性加深、减去 |
| Addition | 线性减淡(添加)(Linear Dodge (Add)) |
| Dodge、Burn | 颜色减淡(Color Dodge)、颜色加深(Color Burn) |
| Pass through(图层组) | 穿透 |
| Soft light,以及 GIMP 本来就按柔光绘制的旧版 Overlay | 柔光(Soft Light),有提示(GIMP 的公式略有不同) |
| HSV Hue、HSV Saturation、HSL Color、HSV Value、LCH Hue、LCH Chroma、LCH Color、LCH Lightness、Luminance | 色相、饱和度、颜色 或 明度(Hue、Saturation、Color、Luminosity),有提示(Photoshop 的这几个模式基于 HSL,结果会不一样) |
| Luma darken only、Luma lighten only | 深色(Darker Color)、浅色(Lighter Color),有提示 |
| Behind、Grain extract、Grain merge、Color erase、Erase、Merge、Split | 正常(Normal),提示里会写出图层名 |
通道、选区和图像设置
| XCF 里 | PhotoCraft 里 |
|---|---|
| 额外通道 | 通道(Channels)面板里的 Alpha 通道 |
| 存储的选区 | 当前选区 |
| 参考线 | 参考线 |
| ICC 配置文件 | 文档的颜色配置文件(线性光文件除外,见上) |
| 分辨率 | 保留。垂直分辨率不同时,两个方向都用水平值,有提示 |
| 图像注释 | 文档文字元数据里的一条“Comment” |
| 路径 | 不导入,提示里写明数量 |
| 其他 parasite(GIMP 用它保存 Exif、XMP 元数据)、取样点、网格 | 直接跳过,没有提示 |
哪些带不过来,PhotoCraft 怎么告诉你
有内容被近似处理或者没导入时,文件照样会打开。状态栏会显示有几条警告,弹出的通知会逐条列出,并写明涉及哪些图层。命令行下,photocraft-cli convert 会把每条警告打印成一行 warning:,photocraft-cli info 则放在输出的 JSON 里。不管界面是什么语言,这些消息都是英文:
| 消息 | 意思 |
|---|---|
is a text layer and opens as pixels(矢量图层、链接图层同理) | 看起来没变,但不能再当文字或路径编辑 |
has N layer effect(s) (non-destructive filters) that are not applied | 这个图层上的 GIMP 3 滤镜没有生效。需要的话,先在 GIMP 里把滤镜合并到图层 |
is a floating selection and was not imported (anchor it in GIMP first) | 在 GIMP 里锚定浮动选区,或者把它转成图层,再保存一次 |
uses GIMP's Grain merge mode, which opens as Normal | 这个模式在 Photoshop 里没有对应 |
N path(s) were not imported | 暂时不读路径。上游文档说路径以后可能会支持 |
GIMP composites this image in linear light; PhotoCraft composites in gamma-encoded RGB, so blends and soft edges differ slightly | 见为什么看起来和 GIMP 略有不同 |
N layer(s) use a mode GIMP clips to the layers beneath; … | GIMP 的“Clip to backdrop”会让这些图层在下方透明的地方不显示,PhotoCraft 会显示 |
composites with Clip to layer, which is not reproduced(或 Intersection) | 这种 GIMP 合成模式没有还原 |
the indexed image opens as RGB | 需要的话,用 图像 › 模式 › 索引颜色(Image › Mode › Indexed Color)改回去 |
32-bit integer samples open as 16-bit | 多出来的精度丢了 |
XCF version N is newer than this reader … | 来自更新的 GIMP,打开后仔细检查一遍 |
为什么看起来和 GIMP 略有不同
上游文档列出了 GIMP 的三个默认行为,Photoshop 没有,PhotoCraft 也就没有:
- 线性光。 从 2.10 起,GIMP 默认在线性光下混合大多数模式、合成各个图层。PhotoCraft 和 Photoshop 一样,在文档本身的编码下合成。上游测试中,不透明度 60% 的正片叠底图层在某个通道上最多差 38/255,抗锯齿文字的边缘像素最多差 73/255。如果在 GIMP 里把图层的混合空间和合成空间设成 RGB (perceptual),差别在 2.5/255 以内。
- Clip to backdrop。 在 GIMP 里,除 Normal 以外的模式在下方图层透明的地方什么都不显示,PhotoCraft 会把图层显示出来。只有图像里有透明区域时才看得出差别。
- 截断的先后顺序。 对 Addition、Subtract、Divide、Dodge、Burn 和 Linear light,GIMP 先乘上像素的透明度再截断,Photoshop 先截断。100% 不透明度下的不透明像素完全一致,半透明像素可能有差别。
混合模式表里标了“有提示”的近似模式,渲染结果也会不同。
怎么打开 XCF
-
文件 › 打开…(Open…,
Ctrl+O,macOS 上是⌘O)。文件类型菜单里有一项 GIMP,对应.xcf和.xcf.gz。 -
拖放。 拖到标签栏上,或者在没有打开文档时拖进窗口任意位置,会在新标签里打开。拖到已打开文档的画布上,则会像 Photoshop 一样置入那个文档。
-
打开最近文件(Open Recent)和其他文件一样能用。
-
命令行。
photocraft-cli convert和photocraft-cli info都接受.xcf和.xcf.gz:photocraft-cli info poster.xcf photocraft-cli convert poster.xcf poster.psdinfo以 JSON 输出尺寸、模式、位深、图层树和警告。自动化服务器的doc.open和 MCP 工具用的也是同一个读取器,详见 MCP 与命令行。 -
在线编辑器。 它运行的是 v0.16.0,文件 › 打开… 里列出了
.xcf和.xcf.gz,拖放也行。文件不会上传,而是在浏览器里读取。
打开的 XCF 没有可以写回的文件,所以 文件 › 保存(Save)也会像 另存为… 一样让你起个新名字。
把 XCF 转成 PSD
- 用 文件 › 打开… 打开
.xcf,或者把它拖进窗口。 - 看一下警告。如果文字、滤镜或浮动选区对你很重要,先回 GIMP 处理好(见常见问题)。
- 如果混合模式或柔和边缘很重要,和 GIMP 里的效果对比一下。细微差别的原因见上文。
- 想保留存储的选区,就用 选择 › 保存选区…(Select › Save Selection…)把它存成 Alpha 通道。PSD 里没有存放当前选区的地方。
- 选 文件 › 另存为…(
Ctrl+Shift+S,⌘⇧S)。对 XCF 文档,对话框默认给出同名的.psd,类型是 PSD Document。保存即可。 - 在 Photoshop 或要用它的软件里打开这个 PSD,确认没问题再删别的文件。
Photoshop 打开这个 PSD 后,能看到像素图层(包括原来的文字图层)、图层组、穿透图层组、图层蒙版(停用的仍是停用)、混合模式、不透明度、可见性、锁定、图层颜色、Alpha 通道、参考线、分辨率和颜色配置文件,位深为 8、16 或 32 位。GIMP 里没有 Alpha 通道的图层会显示 锁定透明像素。GIMP 的图像注释不会保存,PhotoCraft 会提示 free-form text metadata is not supported by PSD/PSB; it will be dropped。如果还要在 PhotoCraft 里继续编辑,另存一份 .pcraft:PhotoCraft 能保存的东西它都能完整保留。
整个文件夹的 XCF
桌面版最省事的是 文件 › 脚本 › 图像处理器…(File › Scripts › Image Processor…)。选好文件夹,格式设为 psd,宽度和高度保持 0 表示不改尺寸,确认输出文件夹(默认是一个 processed 文件夹),然后运行。也可以包含子文件夹。其中转换为 sRGB 的选项默认勾选,会把灰度文件转成 RGB,想保留灰度就取消勾选。
文件 › 自动化 › 批处理…(File › Automate › Batch…)也会处理 .xcf 和 .xcf.gz,但必须先在 动作(Actions)面板里选中一个动作,而且格式选 Same(相同)时每个 XCF 都会失败,因为 PhotoCraft 写不了 XCF。改选 psd 就行。
在终端里,可以用 photocraft-cli convert 逐个转换。convert 不会自动创建输出文件夹,要先建好:
# macOS、Linux
mkdir -p psd
for f in *.xcf; do photocraft-cli convert "$f" "psd/${f%.xcf}.psd"; done
# Windows PowerShell
New-Item -ItemType Directory -Force psd | Out-Null
Get-ChildItem *.xcf | ForEach-Object { photocraft-cli convert $_.FullName "psd\$($_.BaseName).psd" }
convert 不加 --in-place 就不会覆盖输入文件本身,这里每个输出都是另一个文件夹里的新 .psd,所以不受影响。不过目标位置已有的 .psd 会被直接替换、不会询问,想保留之前的结果,就输出到一个空文件夹。
别用 photocraft-cli batch 做这件事。v0.16.0 里它扫描文件夹时会漏掉 .xcf 文件,尽管上游的 XCF 文档把它列为支持的入口;而且它还需要一个动作文件。
XCF 转 PNG、JPEG、TIFF 或 OpenRaster
用 另存为… 选别的类型,或者 文件 › 导出 › 导出为…(File › Export › Export As…),也可以 photocraft-cli convert poster.xcf poster.png。各格式要注意:
- PNG、JPEG、WebP: 合并成一张图,由 PhotoCraft 渲染,所以前面说的合成差异同样存在。JPEG 和 WebP 是 8 位,PNG 能保留 16 位。如果必须和 GIMP 逐像素一致,就在 GIMP 里导出 PNG。
- TIFF: 默认是单层。要保留图层,在软件里询问时选择保留图层,命令行则加
--tiff-layers。 - OpenRaster(
.ora): 保留像素图层、图层组、名称、不透明度、可见性、锁定和混合模式。蒙版会应用到像素上,Alpha 通道、元数据以及 sRGB 以外的配置文件会被舍弃,灰度会变成 RGB,32 位浮点会变成 16 位。保存时 PhotoCraft 会逐项列出。
所有格式的对比见文件格式。
存回 GIMP
PhotoCraft 写不了 XCF,另存为… 里也没有这个选项。在命令行里存成 .xcf 会失败,提示 XCF is GIMP's own format and PhotoCraft only opens it; save as .pcraft to keep the layers, or export a flat image。要在 GIMP 和 PhotoCraft 之间来回编辑,就存一份 GIMP 能导入的分层文件:
| 格式 | 适合什么情况 | GIMP 能得到什么 |
|---|---|---|
| PSD | 需要图层蒙版、Alpha 通道、参考线或 16 位 | 图层、图层组、蒙版和大部分混合模式。Photoshop 独有的东西(调整图层、图层样式、智能对象、可编辑文字)到了 GIMP 里留不住,重要的话先在 PhotoCraft 里栅格化 |
OpenRaster(.ora) | 只是一叠普通的像素图层和图层组 | 图层、图层组、不透明度、可见性和混合模式,蒙版已经应用到像素上 |
| PNG 或 TIFF | 只要最终成品 | 一张合并后的图 |
上游用 Krita 测过 PhotoCraft 导出的 OpenRaster,但说明 GIMP 的文件“还没有验证过”,所以在 GIMP 里打开后检查一下图层。原来的 .xcf 留作 GIMP 的母版,PhotoCraft 永远不会改动它。
从 GIMP 转过来
PhotoCraft 学的是 Photoshop,不是 GIMP,有几个习惯要改:
- 保存。 GIMP 只把 XCF 叫“保存”,其他格式都叫“导出”。PhotoCraft 的 另存为… 可以直接写 PSD、PNG、JPEG 等,文件 › 导出 里还有 导出为… 和 快速导出为 PNG(Quick Export as PNG)。在 PhotoCraft 里扮演 XCF 角色的无损原生格式是
.pcraft。 - 工具。 工具按 Photoshop 的方式分组,快捷键也一样:
V移动工具、M矩形选框工具、L套索工具、W魔棒工具、B画笔工具、E橡皮擦工具、T横排文字工具、C裁剪工具,Ctrl+T(⌘T)是 自由变换(Free Transform)。详见全部工具和快捷键速查,快捷键可以在 编辑 › 键盘快捷键…(Edit › Keyboard Shortcuts…)里改。 - 图层的 Alpha 通道。 GIMP 的“添加 Alpha 通道”在这里没有对应命令。在 GIMP 里不透明的图层,打开后 锁定透明像素 是开着的。要擦成透明,先在 图层(Layers)面板里关掉这个锁定。
- 模式名称。 Addition 叫 线性减淡(添加),Dodge 和 Burn 叫 颜色减淡 和 颜色加深,Darken only 和 Lighten only 叫 变暗 和 变亮。
- 颜色转为 Alpha。 在 滤镜 › 其他 › 颜色转为 Alpha…(Filter › Other › Color to Alpha…),这是 PhotoCraft 少数几个 Photoshop 没有的滤镜之一。
更全面的比较,包括什么时候 GIMP 仍然是更好的选择,见 PhotoCraft 与 Photoshop、GIMP、Photopea 对比。
常见问题
提示“XCF: the file ends early (wanted 4 bytes at …)”。 如果后面的偏移量大得离谱,而且文件来自 GIMP 3.2,多半是因为文件里有链接图层:GIMP 写这个属性的长度时可能少写 4 个字节。v0.13.0 到 v0.15.1 遇到这种文件会失败,v0.16.0 能正常打开(#8857、#8865),请升级 PhotoCraft。升级后仍然失败的话,文件可能真的不完整,试试能不能在 GIMP 里打开。
提示“the canvas exceeds the 1 GiB pixel limit”或“the layers exceed the 1 GiB pixel limit”。 读取器会把所有图层、蒙版和通道解码成 32 位浮点,总量上限 1 GiB。带透明度的图层每像素 16 字节,不带的 12 字节,蒙版和通道 4 字节。所以画布最多约 6700 万像素(8192 × 8192),一张 4000 × 3000 的图大约只能放 5 个和画布一样大的透明图层。比画布小的图层占用更少。可以在 GIMP 里把图层裁到内容大小、删掉不用的图层或者合并一些,再保存。其他上限:每边 300,000 像素、8192 个图层、1024 个通道,图层组最多嵌套 64 层(更深的图层会移到顶层,并有提示)。
提示“unknown precision”“unknown compression”或“unknown layer type”。 文件用到了读取器所依据的规范之外的东西,或者已经损坏。在 GIMP 里打开再保存一次;还不行的话,带上样本文件向上游报告。
.xcf.bz2 或 .xcf.xz 打不开。 只认 gzip 压缩。先解压,或者在 GIMP 里存成 .xcf 或 .xcf.gz。
看起来和 GIMP 有点不一样。 通常是线性光、Clip to backdrop 或近似模式造成的,见上文的解释。想完全一致,就在保存前在 GIMP 里把相关图层的混合空间和合成空间设成 RGB (perceptual),或者把这些图层合并。
某个图层像是没加滤镜。 GIMP 3 的非破坏性滤镜不会应用。在 GIMP 里把滤镜合并到图层,再保存一次。
少了一个图层。 多半是浮动选区,它不会导入。在 GIMP 里锚定它,或者把它转成新图层。
文字不能编辑。 GIMP 的文字图层导入后是像素。需要改字的话,用 横排文字工具(Horizontal Type Tool,T)重新输入。
橡皮擦或颜色转为 Alpha 没法把像素变透明。 这个图层在 GIMP 里没有 Alpha 通道,所以打开后 锁定透明像素 是开着的。在图层面板里关掉锁定即可。颜色转为 Alpha 会直接拒绝处理锁定了透明度的图层。
批处理跳过了所有 XCF,或者全部失败。 photocraft-cli batch 扫描文件夹时不收 .xcf 文件,请改用 convert 循环。在 文件 › 自动化 › 批处理… 里,格式别选 Same。