首页 / 资讯中心 / 文章详情

实测踩坑:把复杂 PSD 拖进 Compositor,文本图层和智能对象直接翻车?

实测踩坑:把复杂 PSD 拖进 Compositor,文本图层和智能对象直接翻车? ★ FEATURED ARTICLE
实测踩坑把复杂 PSD 拖进 Compositor文本图层和智能对象直接翻车【免费下载链接】CompositorThe Photoshop alternative for Mac项目地址: https://gitcode.com/gh_mirrors/compos/CompositorCompositor 是 2026 年社区讨论度最高的 macOS 开源 Photoshop 替代品之一MIT 协议、SwiftUI Metal/C 混合架构、对标 PS 核心工作流连快捷键都照搬。社区文章一边夸它图层、蒙版、混合模式全面保真一边也有人吐槽复杂 PSD 打不开、是毛坯房。这两种说法其实都对——差别只在于你拖进去的是什么样的 PSD。本文不站在宣传口径上复述功能列表而是直接打开仓库源码把PSDReader→PSDDocumentBuilder→PSDConversionSheet这条导入管线逐层拆开看转换报告是怎么在执行前出现的看文件夹、蒙版、混合模式凭什么活下来看文本图层和智能对象又是怎样一步步变成死像素的最后给出一份可直接执行的转换前检查清单。导入安全流程先显示转换报告再执行导入先说结论Compositor 的 PSD 导入是先报告、后执行的两段式流程任何栅格化、降级或裁剪都会在落盘前摆到你面前你点了确认才会写进文档。整条链路的入口在 Compositor/Document/EditorSession.swift 的drainImports()检测到8BPS魔数Compositor/IO/PSD/PSDReader.swift 中的PSDReader.matches后先调用beginPSDReading把报告面板挂起来再异步解析文件beginPSDReading(title: Open “\(url.lastPathComponent)”?, confirmTitle: Import) let parsed try await ImageImporter.shared.loadPhotoshop(url, remainingPixels: ...) let assets try await ImageImporter.shared.photoshopAssets(parsed) imported try PSDDocumentBuilder.makeImport(parsed, assets: assets) if !(await finishPSDReading(imported.conversions)) { continue } try insertPhotoshop(imported, named: ...)关键在beginPSDReading的实现它在文件还没读完时就把面板以isReading: true状态挂上去文案是 Reading the file to see what needs converting.。这是刻意的设计——注释写得很直白Puts the sheet up before the file is read, so a big PSD doesnt leave the click unanswered. 大 PSD 解析可能要好几秒先把点击接住读完之后才把转换清单填进去Compositor/Document/EditorSession.swift。真正承载这份清单的是 Compositor/UI/PSDConversionSheet.swift 里的PSDConversionSheet每一条转换记录都带图层名和说明Text(request.isReading ? Reading the file to see what needs converting. : Compositor will convert these Photoshop features. Nothing is applied until you continue.)Nothing is applied until you continue——这句不是营销话术是字面意义上的真finishPSDReading返回false取消时直接continueinsertPhotoshop根本不会执行而每次导入整体包在beginEdit(Import Photoshop File)/endEdit()里是一笔可撤销的历史事务。换句话说点 Cancel 是零副作用的。还有一个细节值得注意如果解析出的转换清单为空conversions.isEmpty面板会直接消失、正常导入只有纯背景、无图层记录的 PSDPS 里只合并过图像的文档走flattenedPhotoshop路径作为单图层整图读入。文件夹、蒙版、混合模式保住了文本与智能对象被栅格化先看活下来的部分因为这才衬得出后面翻车的分量。文件夹图层组完整重建。PSDReader解析lsct/lsdk附加信息得到 section 标记assemble里按 PS 的存储顺序type 3 分隔符、子图层、type 1/2 文件夹重建父子树文件夹本身没有图像bounds等于整个画布文件夹自己的 opacity 会乘进内部每个图层PSDDocumentBuilder 注释just as Photoshops group opacity does非 pass-through 的组混合模式会降级并明确报告。图层蒙版保真。PSD 的-2通道解出蒙版灰阶maskOnLayerGrid把 PS 只存的非默认值补丁按文档坐标放回图层像素网格蒙版的 enabled / linked / default 值全部保留。蒙版解析失败才追加 couldnt be converted to 8-bit grayscale and was skipped 的转换记录。混合模式按 PS 顺序全套映射。Compositor/IO/PSD/PSDTypes.swift 的LayerBlendMode.fromPSD覆盖 24 种模式注释里特别说明了三个刻意缺席的名字——Dissolve、Darker Color、Lighter Color——Compositor has no equivalent, so they fall through to Normal and say so in the conversion report不支持的混合模式会以 will be applied as Normal 的形式出现在报告里绝不静默处理。调整图层参数级解析。PSDAdjustments能从levlLevels、curvCurves、hue2Hue/Saturation块里还原出四通道色阶、曲线点表和色带参数导入后仍是可编辑调整层17 种调整键之外的类型则直接跳过并报告。作为对照下面这张面板就是你导入一个含 Hue/Saturation 调整层的 PSD 后能拿到的编辑能力简单形状与简单文本也可编辑。矩形/椭圆 纯色填充vmsk/vogk/SoCo映射为活的形状图层TySh块能解析出字体、字号、颜色、对齐、字距、行距的文本图层导入后还可以继续输入。而文本图层和智能对象就是这场导入里最典型的翻车位。翻车现场复盘哪些 PSD 千万别直接拖进来文本图层能看、不能改栅格化而不自知PSD 文本层永远自带一份栅格像素所以翻车不是视觉上消失而是可编辑性消失PSDText.parse成功 → 可编辑文本层解析失败 → 落入PSDText.rasterizedNoteEditable Photoshop text becomes pixels and cant be retyped.翻车条件全在 Compositor/IO/PSD/PSDText.swift 的源码注释里任何一条命中就直接退回像素垂直文字Ornt Vrtc直接返回 nilshear / 非均匀缩放变换矩阵校验要求横纵比例差 ≤2%否则退回栅格多字体多字号混合排版只保留第一个 style run且报告 Only the first text style was kept文字变形 warp非 none 的 warpStyle 追加 The Photoshop text warp was omitted假粗体/假斜体FauxBold/FauxItalic 被丢弃并提示两端对齐降级为左对齐并提示段落框无法表示注释写明 importing as point text would lose the wrap without saying so宁可整层退回栅格也不静默降级字体缺失不是栅格化而是用系统字体重绘并提示——这算温柔的一种。最阴险的是最后一条兜底即使TySh存在但渲染失败图层像素依然来自 PSD 通道数据画面完全正常。不点开图层、不尝试改字你根本不知道它已经死了——这就是直接翻车的现场。智能对象链接内容永远进不来kind()里命中SoLd/SoLE即判定为智能对象PSDDocumentBuilder无条件追加The smart object was rasterized. Linked contents cant be edited.智能对象在 PSD 里存的是复合后的栅格 一个指向外部内容的标记Compositor 只读标记、不追链接。所以图层位置、像素、透明度都正常但你在 PS 里对智能对象做的所有非破坏性操作替换内容、缩放滤镜、变换在这里是一张死图。设计稿里那一堆我塞进智能对象的源文件图层不会跟着进来。隐性翻车位图层效果、位深与尺寸预算还有几类不常被写进踩坑贴但同样致命的图层效果整体丢弃命中lfx2/lrFX/lmfx即kind .effects报告 Layer effects were discarded, so the appearance may differ。投影、描边、发光全没了画面观感直接变化非 8-bit / 非 RGBPSDError.unsupportedDepth/ColorMode统一报 Only 8-bit RGB Photoshop files can be imported。拖一个 16 位或 CMYK 的 PSD连报告都见不到直接导入失败超像素预算DocumentLimits规定单边 ≤30000px、单 surface ≤2 亿像素、整文档预算随内存缩放。超预算时先尝试把所有图层裁剪到画布内报告 Cropped to the canvas so the file fits in memory还放不下就整文件拒绝。画布外的像素丢起来悄无声息。绕坑三招转换前检查清单结合上面源码里的判定条件拖 PSD 之前花 30 秒做这三件事能把翻车率压到最低。第一招永远先读报告再点 Import。这不是形式主义——报告里每一行都对应一段真实判定代码栅格化、混合模式降级、效果丢弃、裁剪、跳过的调整层。看到 becomes pixels、was rasterized、was discarded 这类词先想清楚这层你是否还需要编辑。不需要直接进反正有撤销需要Cancel 掉回 PS 处理。第二招回 PS 里做降级预处理。对照源码里的判定条件逐项排查文本层改成水平单行、单一字体字号删掉 warp 和假粗/假斜体确认字体已装在 Mac 上否则被系统字体替换智能对象接受它进来就是一张图——如果还要编辑先在 PS 里栅格化图层或导出 PNG 再拖图层效果先在 PS 里图层 图层样式 创建图层或直接简化把投影/描边烧进像素Dissolve 等缺失混合模式改成 Normal 或先栅格化16 位 / CMYK / Lab在 PS 里转成 8 位 RGB 再存大图估算一下各图层像素总和超过 2 亿像素级预算的文档会被裁剪到画布画布外内容先自己裁掉。第三招把翻车测试变成回归测试。这个仓库本身就是这么做事的——CompositorTests/ 下有PSDRoundTripTests、PSDAdjustmentTests、PSBImportTests、PSDFixture一整组导入测试EditorSession里甚至留了confirmConversions注入点让测试可以跳过确认面板直接断言转换清单内容。如果你在自己的工作流里被某个 PSD 反复坑最稳的解法是把它固化成测试夹具把这次导入产生了哪些转换记录变成可断言的契约——这比任何经验清单都可靠。最后给个总判断Compositor 的 PSD 导入不是毛坯房而是分级交付——文件夹、蒙版、混合模式、调整层是精装形状和简单文本是可编辑的软装复杂文本、智能对象、图层效果是明确标注此处为像素的毛坯区。而它给这套分级交付配上了全文最值钱的那句话Nothing is applied until you continue.翻车不可怕可怕的是不知道要翻车——这套先报告后执行的机制恰恰把不知道这件事从根上堵住了。【免费下载链接】CompositorThe Photoshop alternative for Mac项目地址: https://gitcode.com/gh_mirrors/compos/Compositor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站