二维码生成与识别

生成:文本/网址/Wi-Fi/名片转二维码,可加 LOGO、自定义颜色、导出 PNG 与 SVG;识别:拖入、粘贴或拍摄二维码,本地解码不上传。

把网址、Wi-Fi 信息或一段中文文本变成能扫的二维码,最怕两种情况:内容太长或对比度不够,生成出来扫码器读不出来;或者用了需要联网的免费服务,图片存在别人服务器上还带有效期,内部链接等于泄漏。

本工具用浏览器本地渲染二维码模块,尺寸、容错级别 L/M/Q/H 与前景背景色都可调整,也能把一张本地图片嵌到正中当 LOGO,可导出 PNG 位图或 SVG 矢量图。内容按 UTF-8 编码,中文与符号都能正确写入;生成过程不联网,输入的内容不会离开页面,适合包含内部链接或联系方式的场景。

切换到「解码」就是扫码器:群里收到一张二维码截图,想知道它指向哪里,把图片拖进页面、或截图后按 Ctrl+V 粘贴,立即看到完整内容——是链接就给出直达按钮,一图多码也能全部识别。解码优先调用浏览器原生 BarcodeDetector;没有原生能力的浏览器(典型如多数 Windows 桌面版 Chrome)会自动切换到内置 JS 解码引擎,图片与摄像头视频流始终只在本机处理,页面会如实标注当前正在使用的解码引擎,而不是默默失败。

容错级别决定能挡住多少破损

二维码用里德-所罗门码做纠错,L、M、Q、H 四个级别分别能容忍约 7%、15%、25%、30% 的码字损坏。纠错码本身也占容量,级别越高,同样内容需要的模块越多、码面越密。经验做法是屏幕展示和一般文档用 M;需要贴 logo、印在曲面或易磨损的包装上用 Q 或 H,并相应放大尺寸,否则模块变小反而更难扫。

中间加 LOGO 会不会影响扫描

会,而且影响比多数人以为的大。纠错能力是按码字分布在整张码面上的,而 LOGO 遮住的是一整块连续区域,两者的百分比不能直接换算——即便选 H 级,被盖住的那片区域也完全依赖纠错码去补,余量并没有 30% 看上去那么多。稳妥的做法是:容错级别用 H,LOGO 宽度不超过二维码边长的 25%(遮挡约 6% 的面积),剩下的余量留给印刷质量、屏幕反光和低端扫码器。本工具会在添加 LOGO 时把容错级别自动提到 H(内容在 H 级装得下的前提下),LOGO 过大时给出提示,并在导出时保留 LOGO 四周一圈背景色,避免深色模块与 LOGO 边缘糊在一起。

容量上限与内容长度

二维码最大为版本 40,即 177×177 个模块。容量随模式变化:纯数字最多约 7089 个,字母数字约 4296 个,字节模式约 2953 字节。UTF-8 下一个常用汉字占 3 字节,再扣除纠错开销,实际能放的中文数量有限。内容越长模块越多,外部尺寸不变时每个模块就更小,需要提高印刷精度并缩短扫码距离。

颜色、对比度与扫描成功率

扫码依赖模块与背景的亮度差,深色模块配浅色背景是对比度最高的组合,反过来做「白码黑底」很多扫码器识别不了。背景不要设成透明,否则在深色主题的页面里会变成不可读的图案;前景也避免用亮红、亮黄这类亮度高的颜色,墨绿、深蓝、深灰比正红更稳。二维码四周还要留出至少 4 个模块宽的空白区,贴边或被文字压住都会导致扫不出来。

粘贴比上传更快

桌面场景下最高效的解码路径是:截图工具框选二维码 → Ctrl+V 粘贴到本页 → 立即出结果。拖拽文件和点击选择适合处理已保存的图片;摄像头模式适合笔记本对准手机屏幕互传链接的场合。三种入口共用同一套解码逻辑。

为什么有的图识别不出来

二维码识别对图像质量有底线:码面太小(截图里只占几十像素)、严重模糊、反光或 LOGO 恰好盖住三个定位角之一,都会失败。用截图工具重新框选、让码面至少占画面四分之一,成功率会显著提高。容器图片本身不需要是二维码格式——任何包含码面的位图都可以。

识别出来的内容先看再点

二维码只是编码方式,内容才是风险所在:短链可能跳转到仿冒页面,「WiFi 密码」型码可能携带配置指令。解码结果以纯文本完整展示,链接需要你再次点击才会打开——先看清内容再决定是否访问,是扫码的基本安全习惯。

常见问题

二维码容错级别该选哪个?
屏幕展示、内容较短时选 M 即可;需要在中间放 logo、印在易磨损或曲面材质上时选 Q 或 H。级别越高可恢复的损坏越多,但模块更密、可用容量更小,尺寸不足时反而更难扫,建议同时放大生成尺寸。
二维码中间加 LOGO 之后扫不出来怎么办?
按三步排查:先把容错级别提到 H;再把 LOGO 缩小到不超过二维码边长的 25%(约遮挡 6% 的面积);然后放大二维码的生成尺寸——尺寸变大意味着每个模块更大,扫码器更容易分辨。导出后建议用两三台不同设备实测(微信、系统相机、一台旧手机),如果只有一台能扫出来,说明余量不够,继续缩小 LOGO 或放大尺寸。
二维码最多能放多少字?
取决于编码模式和容错级别:数字模式最多约 7089 位,字母数字约 4296 个,字节模式约 2953 字节。UTF-8 下常用汉字占 3 字节,再扣除纠错码开销,实际大约能放几百个汉字,级别越高可用容量越小。
为什么生成的二维码扫不出来?
常见原因有四个:内容太长导致模块过密、生成尺寸太小、前景与背景对比度不足或做了反色、四周留白被占用。另外如果扫码端用错误的字符编码解析中文,也会显示成乱码,而不是直接报错。
PNG 和 SVG 该选哪个格式?
需要印刷、放大到海报尺寸或插入矢量文档时用 SVG,放大不失真且文件通常更小;用在网页、聊天工具或要兼容各种扫码软件时用 PNG。手机屏幕展示两者都可以,PNG 的兼容性更稳妥。
我的浏览器支持扫码识别吗?
可以。切换到「解码」后,页面顶部状态条会实时标注正在使用的解码引擎:有原生 BarcodeDetector 的浏览器(Android 上的 Chrome、Safari 17+ 等)直接走原生解码;没有的(多数 Windows 桌面版 Chrome、Edge、Firefox)会自动切换到内置 JS 解码引擎。任何主流浏览器都能识别二维码,且始终在本地完成,断网可用。
识别时图片会上传吗?
不会。生成与识别都在浏览器本地完成:解码要么用浏览器原生能力,要么用内置的纯 JS 引擎,图片不离开你的设备,断网也能识别;摄像头模式同理,视频流只在本地处理。
能识别二维码以外的一维码/码制吗?
走原生 BarcodeDetector 时可以,它同时支持 EAN、Code 128、PDF417、Aztec 等常见码制,识别结果会标注类型,商品条码、快递单、图书 ISBN 都能直接扫;自动切换到内置 JS 引擎时则专注二维码识别。

相关工具