二维码变成 JPG 之后发生了什么
PNG 会把每个模块按准确的色值写进文件。JPEG 完全不这么做:它把图像切成 8×8 的块,把每一块转换成频率系数,然后丢掉编码器认为眼睛最不容易察觉的那部分。放在照片上,这笔交换看不出来;放在一张全是硬边缘的码图上,被丢掉的信息恰恰就是边缘本身。
三个会破坏二维码的特性
色度二次采样。 多数编码器保留完整的亮度分辨率,却把色度存成一半甚至四分之一分辨率,也就是 4:2:0 和 4:2:2 模式。亮度承载了模块的形状,所以调校得当的 JPEG 还能活下来。质量继续往下压,色度平面就会横向渗进相邻模块,低质量码图周围那圈彩色毛边就是这么来的。
硬边缘上的振铃。 把从黑到白的突变做量化,两侧都会过冲,于是在每个模块周围留下一圈圈很淡的同心带。质量 0.9 时这些带子比背景高几个灰阶;质量 0.5 时它们已经宽到让解码器把一行的第一个深色模块读成两个。
没有透明度。 JPEG 存不了 alpha 通道,未绘制区域一定是一种实色,而格式没有地方记录这是哪种颜色。这就是本页的背景被锁死为白色、而不是作为一个选项提供的原因,也是二维码 JPG 放到深色网页上仍然自带一圈白框的原因。
决定能不能扫出来的那个数字
在任何压缩之前,用导出宽度除以总格子数。总格子数等于模块数加上两倍的静区,所以 3 号码配 4 模块静区是 29 + 8 = 37 格。900 像素时每格 24 像素,压缩余量极大;111 像素时正好 3 像素,质量低于 0.85 就要开始丢扫描了。预览下方的读数会实时显示这个数字。
- 每模块不到 2 像素:屏幕上就解不出来,摄像头更是稳定失败。
- 3 到 4 像素:屏幕和平板扫描没问题,用手机摄像头拍就不稳。
- 5 到 8 像素:打印出来在正常距离能扫。
- 10 像素以上:适合社交平台,因为平台还会再压一次你的文件。
二维码图片该用 PNG、JPG 还是 SVG?
后续还要缩放、改色,或者要透明背景,就选 PNG。目标位置只收照片、文件要经过邮件,或者页面本来就是固定白底,就选 JPG。尺寸未知的印刷场景,就选 SVG。
| 格式 | 是否有损 | 是否透明 | 最适合 | 主要风险 |
|---|---|---|---|---|
| PNG | 否 | 是 | 网页、文档、后续还要处理的图 | 大尺寸时三者里文件最大 |
| JPG / JPEG | 是 | 否 | 邮件签名、白底网页、拒收 PNG 的表单 | 质量一降模块边缘就发糊 |
| SVG | 矢量无损 | 是 | 印刷、嵌进 HTML、品牌物料 | 很多手机扫码工具不直接打开该文件 |
实际用得上的参数组合
下面这些组合扛得住「生成 → 手机拍」这一趟往返,长度按大多数人实际粘贴的内容估。它们是起点而不是规则:如果预览报告每模块少于 5 像素,就把宽度再加上去。
| 用在哪里 | 宽度 | 质量 | 纠错级别 | 说明 |
|---|---|---|---|---|
| 邮件页脚里的链接 | 600 px | 0.90 | M | 邮件客户端会缩小图片,要留余量 |
| 网站或落地页 | 900 px | 0.92 | M | 视网膜屏上清晰,短内容还能压在 10 KB 内 |
| 朋友圈、小红书、领英 | 1200 px | 0.95 | Q | 平台上传时还会再压缩一次 |
| 传单,A5 300 dpi | 1500 px | 0.95 | M | 打印约 4 厘米见方,还有富余 |
| 海报、易拉宝 | 2000 px | 1.00 | L | 远距离观看,模块尺寸比信息密度重要 |
| 带长查询串的 URL | 1600 px | 0.95 | L | 内容越长版本号越高,模块越小 |
常用打印分辨率对应多大
打印分辨率是每英寸点数,所以用像素宽度除以 dpi 就是实际物理尺寸。900 像素的二维码 JPG,在 300 dpi 的传单上印成 3 英寸见方,在 150 dpi 的海报上是 6 英寸,在大幅面机器常见的 100 dpi 下是 9 英寸。反过来推算更实用:量好你有的空间是多少英寸,乘以打印机 dpi,按那个宽度或略高导出。
印刷有一点要提醒:把小尺寸导出的 JPEG 放大,是在重采样一个已经有损的文件,打印机还会再量化一次。请直接按最终尺寸导出。如果一定要超过 2000 像素地放大,请改用主站 二维码图片生成器 走 SVG 矢量路线。