FEATURED · 精选文章

PSD转DXF全流程解析:从Photoshop到激光切割的加工链路

发布时间 / 2026/9/19 0:56:58
来源 / 创域科博编辑部
栏目 / 资讯中心
PSD转DXF全流程解析:从Photoshop到激光切割的加工链路 做广告字、激光切割、亚克力雕刻的朋友应该没少碰到这种单子客户发来一个PSD图里是他公司logo或设计稿丢下一句“照着做一块”就走了。设计上PS很顺手但真正到了数控设备那儿不管是常见的光纤切割机、雕刻机还是CAD制图员手里能直接吃的格式只有一个——DXF。你总不可能拿PSD往机器里喂。于是就有了这个“ps2022 - ps to dxf”的工作流在我这里它既是脚本名也是一整套从Photoshop 2022设计稿转到DXF标准文件的生产流程。这套流程解决的核心问题有三个批量导出的效率、坐标不跑偏的精度、以及不同电脑上重复操作的可复现性。如果你手头的工作也是设计稿频繁转加工文件或者你是个经常要跟CAD、数控设备打交道的独立设计师、创客甚至是加工厂老板这篇内容可以帮你省掉不少来回试错的时间。下面我从头到尾拆一遍包括路径选择、脚本逻辑、单位换算、踩坑记录和自动校验尽量把能讲清楚的地方都讲透。1. 为什么要把PSD设计稿转成DXF加工链路绕不开的格式关卡先搞清楚一个基本问题为什么PS这么强大的软件偏偏倒不出一份像样的DXFPhotoshop的核心能力是像素和图层它擅长的是“画得好看”而不是“画得精确”。你拉的辅助线、对齐的路径、切好的选区理论上都可能是像素精度的成果但DXF是一种矢量交换格式它记录的是点、线、圆弧、多段线的几何坐标。PS里点一下“导出”它默认输出的是JPG、PNG、PSD、PDF这些规格没有DXF这种CAD专用格式的直接导出选项。这就导致设计师交付给加工厂之前中间永远隔着一道转换工序。从实际业务场景看需要这个转换的场合一般分三种切割类亚克力字、金属字、木牌轮廓加工设备需要闭合的外轮廓线DXF是最通用的格式。雕刻类在板材上雕出logo或文字的阴刻阳刻需要的不只是轮廓还有内部结构的精确位置。制图底图类比如PCB设计里要把产品外形从美工图转入布线软件像Allegro这种EDA工具就只认DXF/DWG作为导入底图的格式。搞清楚这些场景你就明白接下来的转换工作为什么不能简单粗暴地“截图生成DXF”而是要根据不同用途做不同的清理和校验。1.1 哪些内容能靠谱地从PS搬进CAD不是所有PSD里的东西都值得转也不是所有图层都能顺利转成DXF。我按转换成功率排了个序形状图层、路径、选区转路径转换成功率最高因为它们的本质就是矢量几何PS里Ctrl点击图层缩略图就能生成选区选区内再转成路径路径坐标可以被完整读取。文字图层未轮廓化转换结果不稳定如果目标机器或CAD字体库里没有对应字体DXF里的文字可能直接变成一个方块或者空占位所以文字一定要先在PS里转成形状。普通位图图层如果只是从照片、扫描图里提取轮廓那转换结果取决于图层透明通道的干净程度背景越干净、抠图越精确轮廓就越理想。混合模式、图层样式、蒙版这些漂亮效果在转换时基本是“不可见”的用了混合模式的图层如果直接抓轮廓出来的可能是一大块糊掉的边界。所以我在做预处理时有一条铁律准备用于转换的副本文件里尽量去掉特效、去掉混合模式、去掉多余的隐藏图层只保留干净的、有明确边界的图形内容。1.2 源文件检查清单开始转换前先花十分钟排雷很多人转完DXF在CAD里打开发现乱成一团就怪脚本不灵其实毛病多半出在PS源文件上。我列了一个自己的检查清单每次接单或批量处理前先过一遍画布尺寸是否和实际物理尺寸一致如果客户设计稿是按像素画的而没有标注尺寸你输出的DXF会在CAD里显示为“无单位”默认当毫米处理时极大概率尺寸对不上。所有需要出图的图层是否可见有没有被隐藏的备份图层混进来了有没有文字图层有的话必须轮廓化。有没有蒙版图层建议应用蒙版后再转。图层的命名是否规范如果你的转换脚本按图层名映射成DXF图层那些“图层 1 拷贝 2”的名字会在CAD里让你找东西找到怀疑人生。这一步做完后面的转换才真正可控。2. 三条从PS到DXF的转换路线按文件类型选熟悉PS操作的人可能第一反应是“先用Illustrator中转一下”这其实是业内最常见的路子。但实际工作中我发现中转路线适合单张复杂图形一旦文件多了、要批量出图、或者要反复修改参数手动中转就太折磨人了。所以我把常用路线分成了三条各有适用边界。路线适用场景优点缺点A. 借道AI导出单张复杂图形、需要手动微调路径质量高可二次编辑手动操作多批量困难B. 插件/在线转换器单张快速交付不追求图层结构上手快无需脚本受制于第三方安全性、精度不稳定C. 自建脚本批处理批量文件、规则化图层结构可复现、可控、能自动校验前期搭建有学习成本2.1 路线A借道AI导出适合少量复杂图形这条路线在多边形、曲线密集的图形上表现最好具体操作步骤我给新手完整走一遍在PS中打开设计稿点击要导出的图层先保证是形状图层或选区转成的路径。按住Ctrl键单击图层缩略图建立选区。打开“路径”面板点击面板右上角的菜单按钮选择“建立工作路径”容差建议填1.0像素到2.0像素。容差越小路径越贴合原始选区但节点会爆炸式增加容差太大则丢失细节。执行“文件 导出 路径到Illustrator”保存成一个.ai文件。用Illustrator打开这个文件全选路径。这里有个关键点AI可能把每一条独立路径当成独立对象导出DXF之前最好用“形状生成器”或“合并”把需要的图形合并成一个复合路径。在AI里执行“文件 导出 导出为”格式选“AutoCAD绘图(DWG/DXF)”。导出面板里可以设置版本和单位我通常选DXF格式、AutoCAD 2010版本、单位毫米。在CAD里打开验证一遍尺寸和轮廓完整性。这条路线适合图形不规则、曲线较多、只有一张两张图要转的场景。操作熟练后单张图五分钟能搞定但一旦有几十张图手动重复就非常痛苦了这时候应该上路线C。2.2 路线B插件与在线转换器适合单张快速交付市面上有一些第三方的DXF导出插件安装后可以挂在Photoshop里直接输出DXF也有不少在线转换工具能把EPS或PDF转成DXF。这条路线最大的优势是快不用学脚本但我不建议把它作为生产主力原因有三个你没发控制它内部是怎么做轮廓提取的精度和图纸比例经常对不上。在线转换工具上传设计图有隐私风险某些客户logo或产品外形一旦泄露后续很麻烦。转换结果中的图层信息基本会丢失所有图形糊在一个图层里到CAD后要做后期分图层的话特别费劲。它适合的场景是临时有一个小活客户催得急等不及搭批处理环境你手边又只有PS那就用它顶一下。正式项目我还是建议你自己掌握一套可复现的流程。2.3 路线C自建脚本批处理适合规范化批量生产这就是标题里“ps2022 - ps to dxf”真正指的部分。我最终选择自建脚本是因为我接到的活常常是一周来几十个设计稿全是类似风格的logo或图形如果每个都在PS里手动导出路径再丢给AI那基本等于用青春换加班。脚本化的思路是用Python读取PSD文件提取图层的透明通道轮廓按设定好的比例和单位写出DXF。前期需要花半天时间搭环境、调参数但搭完之后后面每一次都是双击运行输出结果一致且可控。这条路线要求PSD文件本身的图层规范所以我下面会重点讲如何从PS端配合再讲脚本怎么实现。3. 自建“ps2022 - ps to dxf”脚本图层名到坐标的核心转换逻辑既然是脚本项目核心不在PS里而在转换逻辑里。你得先想明白一件事DXF里存的是几何数据而PSD里存的是像素块。从像素到几何中间的桥梁是“透明通道”或“图层蒙版”。所谓的转换就是找到每个图层有内容的部分把它边缘的像素坐标提出来再经过换算写进DXF。3.1 PS端的图层命名规范和画布准备脚本能做到什么程度完全取决于PSD文件规范到什么程度。我在自己的生产环境里定了三条规定图层名称必须能表达加工含义比如“外轮廓”“内孔”“雕刻文字”脚本会直接把这些名字映射成DXF的图层名到CAD里拖颜色、控制加工顺序都方便。每个图层只保留一个独立图形别把五个图形塞在同一层里否则脚本很难判断哪些轮廓属于同一个封闭区域。画布DPI必须和实际尺寸对应。300dpi是常见输出精度我要求设计的同事在新建文件时把画布尺寸设置成实际毫米数再去画图这样脚本里直接像素换算毫米不会有误差。如果你拿到的是别人的PSD第一件事就是另存副本然后在副本里整理图层删隐藏层、应用蒙版、将文字转为形状、去掉投影外发光这类样式。整理干净再跑脚本。3.2 Python脚本骨架读取PSD、提取轮廓、写出DXF我用的是经典的技术栈psd-tools读取PSD文件opencv-python处理透明通道并提取轮廓ezdxf写出DXF。这三个库都是Python生态里比较成熟的安装也简单。下面给一个能跑通的骨架版本import numpy as np import cv2 from psd_tools import PSDImage import ezdxf # 1. 读取PSD psd PSDImage.load(input.psd) # 2. 设定转换比例300dpi下1mm 11.811像素 dpi 300 mm_per_pixel 25.4 / dpi # 3. 创建DXF文档推荐AutoCAD 2010格式通用性最好 doc ezdxf.new(R2010) msp doc.modelspace() # 画布高度用于后续Y轴翻转 canvas_height psd.height # 4. 遍历可见图层 for layer in psd: if not layer.visible: continue if layer.is_group(): continue # 获取该图层的合成图像转为透明通道 img layer.composite() img_rgba img.convert(RGBA) arr np.array(img_rgba) alpha arr[:, :, 3] # 二值化透明部分变成0有内容部分变成255 _, binary cv2.threshold(alpha, 127, 255, cv2.THRESH_BINARY) # 查找轮廓只取外层轮廓防止内部孔洞被当作独立封闭体 contours, _ cv2.findContours( binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE ) # 5. 每个轮廓转成DXF多段线 for contour in contours: # 轮廓点太多会让DXF文件爆炸用approxPolyDP简化 epsilon 0.5 # 这个值控制折线精度后面会细说 approx cv2.approxPolyDP(contour, epsilon, True) points [] for pt in approx: px, py pt[0] dxf_x px * mm_per_pixel dxf_y (canvas_height - py) * mm_per_pixel points.append((dxf_x, dxf_y)) # 闭合多段线 msp.add_lwpolyline(points, closeTrue) # 6. 保存 doc.saveas(output.dxf) print(转换完成输出output.dxf)这个脚本处理纯色块和透明背景的图形已经够用。如果你要提取的是文字或复杂图形并且图层本身带蒙版建议先用PS做一次“应用图层蒙版”否则composite()拿到的边缘可能有半透明的过渡区二值化后轮廓会多出许多毛边。3.3 坐标偏移的计算从像素原点翻到CAD原点很多第一次跑通脚本的人都会遇到同一个问题导出的DXF在CAD里打开图形整体上下颠倒或者位置偏移了一大截。这个坑的根源是坐标系定义不同。PS的画布坐标系原点在左上角x轴向右y轴向下。而AutoCAD这类CAD软件的数学坐标系原点通常在左下角世界坐标系默认原点位置x轴向右y轴向上。你直接把像素坐标写进DXF图形表现上就是上下颠倒了。所以脚本里必须做一步Y轴翻转公式很简单dxf_x pixel_x * mm_per_pixel dxf_y (canvas_height_px - pixel_y) * mm_per_pixelcanvas_height_px是PS画布的总高度像素pixel_y是轮廓点在PS里的纵坐标。这样算出来的DXF坐标就进入了CAD习惯的从下到上递增的空间。同理如果你在PS里用了多个画板或画布脚本要针对每个画板分别计算基准点不然多画板文件会叠在一个位置。我的做法是在PS端先把多个画板拆成独立文件再批量跑脚本这样最不容易出错。3.4 曲线与精度控制折线密度不是越高越好提取出来的轮廓本质是像素级的锯齿路径直接写进DXF会产生大量微小线段在CAD里不仅看着杂乱加工设备走起来也慢。所以要用轮廓简化算法去掉冗余点。OpenCV里对应的是approxPolyDP它的第二个参数epsilon控制了简化程度值越小保留的点越多越贴近原始轮廓值越大点越少图形越粗糙甚至会把圆角变成明显的直线缺口。我试过不同数值给出一个经验区间普通logo轮廓、文字雕刻epsilon取0.5左右保留细节又不会出现太多锯齿。大幅面切割件、外轮廓epsilon取1.0到2.0减少点数量方便后续CAD里手动调整。需要铣刀加工的圆弧不能只靠简化最好在PS里原图就是矢量路径否则圆弧出去全是折线段加工精度再高也削不出光滑弧线最终还是要靠CAD里的“圆弧拟合”重画一遍。另外提醒一点DXF里的多段线默认是直线连接没有专门的“拟合圆度”参数。如果你拿到的原始设计有大量真圆弧你在PS里再怎么提轮廓得到的也是折线逼近。条件允许时直接让客户提供AI/CDR矢量原稿这比任何转换更靠谱。转换是用来兜底的不是在源头上消灭矢量。4. 实测高频问题与排查思路文件没转坏的唯一保障脚本能跑通不代表能直接交给车间我前期在生产环境里踩过的坑几乎都集中在这一节。每个坑我都先说现象再说排查链路方便你复现和对照。4.1 图层蒙版和混合模式导致的图形“缺角”现象某些图层的图形导出后在CAD里看着不完整边缘少了一块。排查链路我先怀疑是轮廓提取阈值问题把二值化的阈值调到很低仍然缺一块后来在PS里单独看那个图层发现图形上挂了蒙版蒙版边缘还有点羽化。psd-tools的layer.composite()会把蒙版效果直接合成进图层图像里但合成时羽化的半透明区域被二值化一刀切边缘就少了一部分。特别是蒙版边缘带有半透明渐变时少的区域可能肉眼看不出来到DXF里就明显变形。解决办法是在PS源文件阶段先对蒙版执行“选择并遮住”或者直接把蒙版应用到图层上让透明通道变成干净的硬边再跑脚本。或者更简单粗暴在PS里把图层栅格化并盖一遍透明保存后再转换。4.2 单位设置错误300dpi和72dpi导出的差距现象一个原本设计为100mm宽的logo导出后在CAD里量出来是416.67mm或者反过来缩小。排查链路脚本里明明写了mm_per_pixel 25.4 / dpi为什么还会差后来发现PSD文件内部的DPI不一定是300。有些设计稿是直接从网页截图拖进PS的或者新建文件时用的是默认72dpi像素数量一样但物理尺寸差了4.17倍。脚本把dpi写死成300自然就错了。解决方式是在脚本里动态读取PSD的DPI信息psd-tools里通过psd.resolution_info()能拿到水平、垂直分辨率换算关系要避免“想当然”。一份可靠的生产代码应该把DPI作为参数传入而不是在脚本里拍脑袋写死。4.3 文字符号变成一堆方块字体轮廓化的正确顺序现象设计稿里的中文或特殊符号转换后在CAD里显示成问号、方块或者根本看不到。排查链路文字在PS里还是可编辑的文字图层带有字体信息但DXF里如果没有对应字体或者CAD里没有安装这个中文字体显示就会异常。而且脚本按透明通道提取轮廓时文字内部的结构比如“口”字中间的空洞不一定能正确保留成内孔。解决方式处理顺序很重要。比如在PS里“选择文字图层右键→转换为形状”这一步能把文字变成矢量形状路径保证每个字形的内部孔洞结构都在。如果你转换后字体边缘发虚还可以再执行“窗口→路径→工作路径”把字形路径转成工作路径这个路径再导到AI就基本能保留文字结构的完整性。记住一个原则所有要转DXF的文字必须先在PS里变成“形状”不能在转换环节才临时处理。4.4 圆弧丢失与圆孔变多边形容差参数怎么调现象原本直径10mm的圆孔导出后在CAD里看是十二边形加工出来过不了检具。排查链路这个问题不是脚本造成的而是轮廓简化参数过大。approxPolyDP的epsilon设成1.0甚至更大时小圆上的像素锯齿被简化掉太多圆形自然变成多边形。如果把epsilon调小到0.2圆弧逼近效果会好很多但文件里的实体数量几何级上升CAD打开和加工设备读取都会变卡。我的调参经验是如果图形里有大量小圆孔优先调小epsilon到0.2~0.3并单独给圆孔轮廓设置更高的简化阈值。脚本里可以根据轮廓面积或半径做分类大轮廓用大epsilon小圆孔用小epsilon这样兼顾文件体积和圆度精度。这块属于典型的需要多看多调的经验活没有一劳永逸的数值。5. 批量转换的自动校验跑夜班前必须加上的安全网批量生产最怕什么最怕半夜挂机转200个文件第二天早上发现某几个文件因为源图图层命名不合规、透明通道有残留、或者编码问题转出来的DXF根本不能用。所以我在流程后半段加了一套自动校验跑完就出报告不用等人工逐个打开。5.1 输出端自动检查实体数量、闭合状态、边界框校验脚本的思路是反向读一遍DXF检查里面到底有什么。我用ezdxf写了一个简单的校验模块import ezdxf def validate_dxf(path): doc ezdxf.readfile(path) msp doc.modelspace() entities list(msp) if not entities: print(无实体转出空文件) return False for e in entities: if e.dxftype() LWPOLYLINE: if not e.closed: print(f未闭合多段线: {e.dxf.handle}) # 计算边界框 extents msp.bbox() width_mm extents.size.x height_mm extents.size.y print(f边界框尺寸: {width_mm:.2f}mm x {height_mm:.2f}mm) print(f实体数量: {len(entities)})这个模块会告诉你每个DXF文件的实体数量、是否有未闭合的多段线、整体边界尺寸。当边界尺寸和PS画布物理尺寸对不上时说明DPI或单位换算有问题当未闭合多段线太多时说明源文件的图层边界不干净。校验脚本的输出可以汇总成一个日志文件我建议在批量任务队列里按此逻辑每转完一个文件就跑一次有异常就写入异常清单最后统一人工排查不等全转完再翻车。5.2 人工抽检规则十张图抽一张五分钟过一遍自动校验能查出结构性问题但看不出工艺问题比如圆孔半径太小没法加工、两个轮廓间距太近切割会碰穿。这类问题我靠人工抽检兜底。我的抽检规则是每转完十张图随机抽一张在CAD里对三件事三分钟就能完成标注尺寸和源图对不上对照PS里的画布物理尺寸量两个关键点距离。有没有意外的小碎屑轮廓这个多半是背景残留或阴影残留需要在PS端清掉。内外轮廓关系对不对比如文字“回”字结构外框和内部空间是否都保留成了可用的轮廓线。这些经验靠熟能生巧但规则可以先定下来。我刚跑这套流程时几乎每天都能从抽检里揪出一两个问题文件后来PS端规范了问题率就明显下去了。6. 这半年我把流程固化成了模板最后分享三个习惯转换工具本身只是一块敲门砖真正让生产稳定下来的是规范。我做了五六个月PS转DXF的批量任务后最大的感受是大部分问题都不在脚本里而在源头设计环节只是脚本把源头的隐患暴露出来了而已。现在团队里的设计师已经习惯按我的图层规范工作新建文件时就按毫米设置画布尺寸文字第一时间转成形状命名里直接写清轮廓用途。转换脚本反而变成了一个几乎不需要动脑的环节。我也从最初手忙脚乱地逐个核对尺寸变成了现在双击脚本、看日志、抽检、交付一气呵成。最后分享三个我觉得最值得养成的工作习惯每个PSD源文件旁边保留一份“转换扁平化副本”副本里图层已经合并、样式已经栅格化。这样即使原文件被改得乱七八糟转换任务也可以随时从副本重新跑不会被可变字体、丢失的字体文件卡住。不要一次性把所有图层都转出去。拿到图先分类哪些是外轮廓、哪些是内部开孔、哪些只是装饰线。分开导出更能保证CAD里加工顺序清晰避免外轮廓和内孔混在同一图层导致切割顺序混乱。统一用毫米作为DXF的隐含单位。不管客户原始文件是英寸还是厘米到转换环节一律换算成毫米再写进DXF并在图纸里用文字标注一次实际尺寸。这样客户CAD打开时哪怕单位设置错了也能靠尺寸标注第一时间发现。这套流程能在多大程度上帮到别人我说不准但对我自己来说它把PS和DXF之间那层“不得不转”的隔阂变成了一个再普通不过的工序。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻