收藏各位旅行者好呀,我是屋主 GrayZ。今天要安利的,是我最近搓出来的一个 CAD 图纸渲染工具——cad2image。
先老实交代一句:这玩意儿跟之前那几个难兄难弟一样,Star 数嘛……咳,懂得都懂(>人<;)。但它解决的痛点,是真真切切机械、建筑、电子这帮画图党每天都在受的折磨——用 Acme CAD Converter 把 DWG 转成 PNG 的时候,圆弧边缘总是拖着一圈细小的毛须、杂线,放大看简直逼死强迫症。
所以我就想:能不能把「图纸渲染」这条管线重做一遍,让圆弧就是圆弧、直线就是直线,干干净净?于是就有了 cad2image。
cad2image 是什么
一句话:cad2image 是一个把 DWG / DXF 图纸渲染成 PNG / SVG 的命令行工具,同时也是一个可以直接 import 的 Python 库。
它做的事,核心就一件:把 CAD 图纸变成能直接发微信、贴文档、塞进网页的图片或矢量图。围绕这件小事,它顺手解决了一堆 CAD 出图的顽疾:
| 能力 | 说明 |
|---|---|
| 高保真渲染 | DWG/DXF → PNG(任意 DPI)或 SVG(矢量) |
| 告别残余杂线 | 圆弧走真圆弧,无多边形折痕、无毛须 |
| 中文开箱即用 | 内置开源中文字体,自动替换 SimSun / 宋体等专有字体 |
| 完整打印样式 | CTB 打印样式表、线宽控制、颜色 / 灰度 / 单色输出 |
| 批量处理 | 目录递归处理,逐条报告成功 / 失败,不因单个失败中断整批 |
| 双形态 | 命令行工具 + Python 库,两条路都能走 |
为什么要重造轮子:Acme 的「杂线」到底哪来的
这里想多唠两句技术,因为这是 cad2image 存在的理由。
很多画图党出图都用 Acme CAD Converter,方便是方便,但它渲出来的 PNG 有一个老毛病——圆弧的边缘经常拖着一圈细小的毛须、杂线,放大看特别脏。
我扒了扒它的底层:Acme 走的是 ODA Teigha 内核,DWG 被解析成「边矢量模型」后,会分别喂给三套后端。其中 SVG / PDF 这两套是走真圆弧的,输出是干净的;唯独 GDI 图元栅格化这套,会把曲线离散成一小段一小段的折线,于是圆弧就变成了多边形,边缘自然全是折痕和毛须。
换句话说,bug 不在图纸,也不在 CAD 软件,而在 GDI 栅格化那一步。找到了根子,解法就清晰了——把栅格化后端整个换掉。
于是 cad2image 用了一条更干净的管线:ODA File Converter(负责 DWG→DXF 这个「啃二进制」的脏活)+ ezdxf(纯 Python 读 DXF)+ PyMuPDF 后端渲染。圆弧走真圆弧,栅格化不再经过 GDI,杂线自然就没了。
安装
要求 Python 3.8+。安装就一句话:
# 从 PyPI 安装(推荐)
pip install cad2image
ODA 装好后,工具会按这个优先级去找它:先看环境变量 ODA_FILE_CONVERTER_PATH,找不到就用默认路径 D:\ODA\ODAFileConverter_title 21.5.0\ODAFileConverter.exe;你也可以用 --oda-path 直接指定。
快速上手
装完就能用控制台命令 cad2image(也可以 python -m cad2image)。常用玩法都在下面:
参数挺多,但都直白。完整的参数表放下面,需要时对着查就行:
从 Acme CAD Converter 迁移
如果你之前一直用 Acme 的命令行出图,cad2image 已经把参数语义对齐好了,照着下面这张表改就行:
| Acme 参数 | cad2image 映射 |
|---|---|
/res N |
--dpi N |
/w /h(mm) |
--width / --height |
/e /ad(缩放扩展) |
--fit(包围盒自适应) |
/b 背景色 |
--background |
/lw 0/1/2 |
--lineweight + --lineweight-scaling |
/p 1/2/3(1bit/灰度/256色) |
--color(灰度暂以 monochrome 近似) |
/pw myset |
plotstyle.load_ctb(尚未实现,见已知限制) |
/a 0/-1/-2(布局选择) |
--layout |
/l 报告 |
批处理汇总 + 退出码 |
给开发者的 Python API
除了命令行,cad2image 也能当库用,提供三层能力:渲染(DXF→PNG/SVG)、转换(DWG→DXF)、批处理。只有 DWG→DXF 转换需要 ODA,纯 DXF 渲染不需要。
错误统一抛 FileNotFoundError / ValueError / RuntimeError,可以放心捕获。
必须清楚的边界
- 灰度输出(Acme
/p 2):暂以 monochrome 近似,真正的 256 级灰度要等像素级后处理。 - 3D 消隐(Acme
/hide):未实现,工具默认输入是 2D 工程图。 - Xref 外部引用:转换前要把 xref 文件与主图放同一目录(与 Acme 行为一致)。
- 页面单位:模型空间包围盒自适应时,默认绘图单位是 mm(
$INSUNITS没做换算)。 - SHX 中文大字体(bigfont):ezdxf 1.1.x 不支持,引用这类字体的图纸会被自动重写为 Noto Sans SC。
结语
写到这里,cad2image 的「干净出图」这一件事就讲完了。它不是什么黑科技,只是把 CAD 出图这条老管线里最脏的那一步(GDI 栅格化)换成了真圆弧的矢量路径,再把中文、打印样式、批量这些画图党天天要的东西顺手补齐。
工具是 MIT 开源的,代码全在 GitHub 上,PyPI 也能直接 pip install。如果你也喜欢这种「把命令行工具搓成顺手小玩意」的调调,我之前还写过 阿里云盘 WebDAV 管理器。欢迎各位旅行者去围观、提 issue,甚至……顺手点个 Star?(就是那个小星星,懂的都懂)ヾ(◍°∇°◍)ノ゙
P.S. 如果手头有「圆弧边缘带杂线」的坏图纸,可以拿它跑一遍试试,对比一下 Acme 和 cad2image 的输出差异,效果会更直观。愿大家的图纸都干干净净、没有毛须。
![[技术·教程] cad2image——让 CAD 图纸渲染告别残余杂线 1 1789354762 cad2image banner](https://blog.grayzhao.com/wp-content/uploads/2026/09/1789354762-cad2image-banner-1024x576.png)
Comments NOTHING