条码矢量图真假辨别:SVG 和 PDF 里也可能藏着位图,30 秒自己验
后缀是 .svg 或 .pdf,不代表里面装的是矢量。很多在线工具的「矢量导出」只是把一张 PNG 套进 SVG 壳里或贴进 PDF 一页——预览正常,制版发毛。三个不用专业软件的自检方法,以及什么时候位图其实够用。
把条码交给印刷厂之前,几乎每个人都听过一句话:要给矢量图。于是大家去找一个能导出 SVG 或 PDF 的工具,点下载,交稿。问题是——后缀名是 .svg 或 .pdf,不代表里面装的是矢量。很多在线工具导出的所谓矢量文件,实际上是把一张 PNG 位图套进 SVG 的壳里,或者把同一张 PNG 贴进 PDF 的一页。文件能打开、预览也正常,只有放大到制版精度,或者印出来看到条边发毛,才会发现问题。
这篇讲三件事:这个坑是怎么形成的、怎么在 30 秒内自己验出手上的文件是真矢量还是假矢量、以及什么时候位图其实完全够用、不必迷信矢量。
🏷️ 关键要点
- 后缀不等于内容。SVG 里可以嵌
<image>,PDF 里可以嵌位图对象,两者都是合法文件,但放大即糊。 - 最快的判别方法是放大。把文件放大到 1600%,条的边缘依然是刀切一样的直线就是矢量;出现台阶或灰色过渡像素就是位图。
- SVG 可以直接用记事本打开。看到
<image或一长串data:image/png;base64,就是假矢量。 - 文件体积也会出卖它。一个一维条码的真矢量 SVG 通常几 KB,位图套壳的往往几十上百 KB。
- 位图不是不能用——尺寸固定、分辨率足够、不再缩放的场景,300 dpi 以上的 PNG 完全可以印。真正的问题是把位图当矢量交出去,然后被放大。
一、假矢量是怎么来的
在线条码工具通常先在浏览器的 canvas 上把条码画出来——这一步产出的就是位图。到了导出环节,写「PNG 下载」很容易,直接把 canvas 存成图片即可。但很多工具的「SVG 下载」和「PDF 下载」走的是同一条捷径:
- 假 SVG:生成一个
<svg>外壳,中间放一个<image href="data:image/png;base64,……">,把 canvas 的 PNG 整张塞进去。文件后缀是 .svg,用浏览器打开也能看,但里面一根矢量路径都没有。 - 假 PDF:新建一页 PDF,用
addImage把同一张 PNG 贴上去。PDF 阅读器打开完全正常,印刷厂拿去做 RIP 时才发现是点阵。
这不是恶意,多半是省事:真矢量导出需要按码制重新计算每一根条的位置和宽度,位图套壳只要几行代码。对屏幕预览没有任何区别,对制版是天壤之别。
二、30 秒自检:三个方法,不需要专业软件
方法一:放大到 1600%(对所有格式都适用)
用任何看得了图的软件打开文件,把显示比例拉到 1600% 以上,盯着条的竖直边缘看:
- 真矢量:边缘始终是一条干净的直线,无论放到多大都不会出现颗粒。
- 位图:边缘出现方块台阶,或者黑白之间夹着一圈灰色的过渡像素。
PDF 用 Acrobat Reader、浏览器自带阅读器都可以;SVG 直接拖进浏览器再按 Ctrl/Cmd 加号放大。这是最直观、最不会看错的一招。
方法二:用文本编辑器打开 SVG
SVG 本质是文本文件。把它拖进记事本、VS Code 或任何文本编辑器(不要用图片软件),看开头几行:
| 看到什么 | 结论 |
|---|---|
<path d="M3 86L3 0M54 86……"、<rect>、<polygon> | 真矢量。条是用几何路径画出来的 |
<image href="data:image/png;base64,iVBOR……" | 假矢量。整张位图被塞进了 SVG 壳里 |
只有一个 <image> 标签,后面跟着几万个字符 | 假矢量。那串字符就是 PNG 的 base64 编码 |
带人眼可读数字的条码,真矢量文件里数字也会是路径(M……Q……Z 这样的曲线命令),而不是 <text> 标签。用 <text> 也能印,但要求印刷厂那边装了同一款字体,风险更高;转成路径就没有这个问题。
方法三:看文件体积
这一招最快,但只能作为初筛。同一个 50 × 20 mm 的一维条码:
| 文件 | 典型体积 | 说明 |
|---|---|---|
| 真矢量 SVG(不含文字) | 约 1–3 KB | 只有十几条路径指令 |
| 真矢量 SVG(含人眼可读数字) | 约 5–10 KB | 数字的字形轮廓占了大头 |
| 位图套壳 SVG | 几十 KB 到几百 KB | base64 编码还会让体积再涨约三分之一 |
| 真矢量 PDF | 约 20–60 KB | 含 PDF 自身结构开销 |
看到一个「SVG 条码」有 200 KB,基本可以直接判定是套壳。反过来体积小不一定就是真矢量,还是要用方法一或方法二确认。
三、什么时候位图其实够用
矢量不是万能钥匙,位图也不是原罪。真正决定能不能用的是最终输出尺寸下的有效分辨率:
- 尺寸已经定死、不会再缩放:比如就是 50 × 20 mm,用 300 dpi 以上导出的 PNG 完全可以印,效果和矢量没有肉眼可见的差别。
- 热敏/热转印标签机:打印头本身就是 203 或 300 dpi 的点阵,按打印机分辨率的整数倍生成位图,反而比矢量再栅格化更可控。相关取值见条码扫不出来的 12 个原因第 5 条。
- 必须用矢量的场合:交给印刷厂制版、要放进 AI/CDR 版面里排、后续可能改尺寸、或者对方明确要求 PDF/X。这几种情况下位图迟早会被缩放,风险是实打实的。
换句话说:位图的问题从来不是「它是位图」,而是「你以为它是矢量,于是放心地放大了」。
四、交给工厂时该给什么
- 首选真矢量 PDF,按 PDF/X-1a 或 PDF/X-4 导出,字体转曲或嵌入。完整的交稿要求见标签交稿前自检清单。
- 条码单独给一份原始文件,不要只给一张排好版的截图。工厂需要在自己的版面里按 GS1 尺寸微调放大率和静区。
- 写清楚三个数:成品尺寸(mm)、放大率或 X 尺寸(mm)、静区宽度(X 的倍数)。这三个数比「给个高清图」有用得多。
- 不要交 Word、PPT 里贴的条码。这类文件会二次压缩图片,条边会被压出灰边。
- 自己先按上面三招验一遍。交稿前 30 秒的检查,比返工一版划算太多。
本站的条码生成器的 SVG 与 PDF 导出都是直出矢量路径(含人眼可读数字的字形轮廓),可以用上面的方法二直接验证:文本编辑器打开导出的 SVG,看到的是 <path d="……"> 而不是 <image>。带自定义上行/下行文字时因为需要二次合成,会回退为位图版本,界面上会明确提示,不会让你以为拿到的是矢量。
五、一张速查表
| 你想做的事 | 该要什么文件 | 怎么验 |
|---|---|---|
| 交印刷厂制版 | 矢量 PDF(PDF/X),或矢量 SVG | 放大 1600% 看边缘 |
| 放进 AI / CorelDRAW 排版 | 矢量 SVG 或 EPS/PDF | 置入后能否单独选中每根条 |
| 热敏标签机直接打 | ≥ 打印机分辨率整数倍的 PNG | 模块宽度是否为整数个点 |
| 贴在电商详情页 / 内部单据 | PNG 即可 | 不需要验 |
| 尺寸还没定、可能会改 | 必须矢量 | 文本编辑器看有没有 <image> |
参考资料
本文涉及的格式定义与条码质量要求以下列标准与规范为准。
常见问题
SVG 文件一定是矢量吗?
不一定。SVG 规范允许用 <image> 元素嵌入位图,很多在线工具就是把 canvas 生成的 PNG 用 base64 塞进一个 SVG 外壳里导出的。这样的文件后缀是 .svg、浏览器也能打开,但里面没有任何矢量路径,放大就会糊。最快的判别方法是用文本编辑器打开:看到 <path> 是真矢量,看到 <image href="data:image/png;base64, 就是位图套壳。
PDF 里的条码是矢量还是位图,怎么看?
把 PDF 在阅读器里放大到 1600% 以上,盯着条的竖直边缘:真矢量始终是干净的直线,位图会出现方块台阶或黑白之间的灰色过渡像素。另一个辅助判断是体积——一个一维条码的真矢量 PDF 通常几十 KB,而嵌了 300 dpi 位图的往往大得多。
位图条码能不能拿去印刷?
能,前提是尺寸已经定死、不再缩放,且在最终成品尺寸下有效分辨率达到 300 dpi 以上。热敏与热转印标签机本身就是点阵输出,按打印机分辨率的整数倍生成位图甚至比矢量更可控。真正危险的是把位图当矢量交出去,工厂按矢量的预期去放大排版,条宽误差就超标了。
条码上的人眼可读数字,用文字还是转曲?
转成路径(转曲)更保险。用 <text> 元素保留为文字时,印刷厂那边必须装有同一款字体,否则会被替换成另一款字,字宽变化还可能挤压条码的静区。转曲后字形变成几何轮廓,跟条一起是纯图形,不依赖任何字体环境。
我怎么知道工具导出的到底是不是矢量?
不要看工具的宣传文案,自己验。三个方法按可靠性排序:一是把文件放大到 1600% 看条的边缘有没有台阶;二是把 SVG 拖进文本编辑器搜 <image;三是看体积,一个一维条码的真矢量 SVG 通常只有几 KB。三招都不需要专业软件,加起来不到 30 秒。