二维码解析
在线识别和解码二维码图片,支持拖拽上传、粘贴图片,纯浏览器端处理保护隐私
上传二维码图片
拖拽二维码图片到此处
支持 PNG、JPG、GIF、BMP、WebP 等常见图片格式
也可以使用 Ctrl+V 粘贴剪贴板中的图片
什么是二维码解析?
二维码解码工具用于读取图片中的二维码,并提取其中保存的数据。结果可能是网址、普通文本、Wi-Fi 配置、联系人信息、支付标识或其他编码字符串。它适合在打开二维码前先查看内容,也适合从截图、文档、海报或客服反馈图片中提取信息,排查手机扫码失败的原因。需要注意的是,能被解码不代表内容安全;尤其是链接,应先确认域名和跳转目标,避免误入钓鱼页面、过期资源或异常重定向。图片识别过程在浏览器本地完成。
使用方法
使用步骤
- 点击上传区域选择二维码图片,或拖放图片
- 你也可以使用Ctrl+V(Mac上为Cmd+V)从剪贴板粘贴图片
- 工具将自动检测并解码二维码内容
- 解码结果出现在下方,并自动检测内容类型(URL或文本)
- 点击'复制结果'按钮将解码内容复制到剪贴板
解码技巧
- 使用清晰的图片,确保二维码完整可见且周围有足够的静区,以便可靠检测。
- 谨慎对待解码的链接。在打开不熟悉的二维码URL之前,预览文本并验证域名。
使用场景
从上传或粘贴的图片中解码二维码拖入图片、选择文件或从剪贴板粘贴图片,工具会将其绘制到隐藏的 canvas 上进行读取。当你有截图、照片或保存的二维码图片但身边没有手机扫码器时,这个功能非常实用。
将 URL 与纯文本结果区分开解码后,内容会根据能否被浏览器 URL 构造器解析来分类:可解析的标记为 URL,其余视为文本。URL 结果提供在新标签页打开的操作,所有结果都可复制并显示字符数。
在设计工作中检查二维码的可读性由于解码器直接从图像像素读取数据,它有助于验证经过缩放、改色、截图或压缩后的二维码是否仍可扫描。读取失败会给出明确的「未检测到二维码」或解码错误提示,而非静默输出,这使得在品牌评审中并排对比两个设计方案变得很容易。
读取较长的 Wi-Fi 或 vCard 负载解码后的 Wi-Fi 字符串会显示 SSID、密码和安全类型,无需手机摄像头即可查看,适合验证打印的访客网络卡片。vCard 结果可复制后粘贴到联系人表单中手动导入。
在打开链接前检查二维码内容始终先阅读解码后的 URL 而不是直接用手机扫描图片,因为二维码可能隐藏短链接、钓鱼页面或过期重定向。无点击操作的纯文本解码结果比一键跳转更安全;现代 Chromium 内核浏览器提供的 BarcodeDetector API 速度快但对 Micro-QR 或损坏的二维码处理不佳,因此当 BarcodeDetector 不可用时页面会回退到 JS 库。Reed-Solomon 纠错在 M、Q、H 级别下仍能修复模糊照片,但高密度或低对比度的二维码经常失败,需要在更充足的光线下重新拍摄。Micro-QR 码只有一个角落的定位标记,属于完全不同的规格族,通常需要专用扫描器。
技术原理
二维码解码是一个多阶段图像处理流水线,用于在照片或截图中定位二维码、校正透视畸变、将图像二值化为黑白、读取模块网格、应用纠错并根据编码模式解码数据。本工具使用 jsQR 库,该库在浏览器主线程上以 JavaScript 实现完整的处理流程。
第一阶段是定位三个定位图案——每个二维码左上角、右上角和左下角的标志性 7×7 方中套方中套方标记。jsQR 扫描图像中匹配定位图案横截面特征(1:1:3:1:1 比例)的黑白像素交替序列,不依赖旋转角度。定位三个定位图案后,其质心定义了二维码的边界四边形。
透视校正使用从四个角点计算的单应性矩阵将四边形变换为正方形网格。这一步至关重要,因为二维码很少被正面拍摄——校正可以将二维码“展平”,使每个模块(代表一个比特的黑色或白色方块)落在规则网格上。模块尺寸由定位图案尺寸和版本号确定,版本号从定位图案旁的格式信息条带中读取。
图像二值化将灰度像素值转换为纯黑白。jsQR 使用局部阈值方法:不是单一全局阈值(在不均匀光照或阴影下会失败),而是对图像的小区域计算阈值,使其对智能手机照片中常见的渐变和暗角具有鲁棒性。
纠错使用 ISO/IEC 18004:2015 规定的 Reed-Solomon 码。二维码支持四个纠错等级:L(约 7% 恢复)、M(约 15%)、Q(约 25%)和 H(约 30%)。数据码字和纠错码字交织在各块中;jsQR 执行伴随式计算并应用 Berlekamp-Massey 算法在码字的额定容量内定位和纠正错误。如果损坏超过纠错等级,解码会失败而非返回损坏数据。
最后,根据前四个比特中的编码模式指示符解释解码后的比特流:数字模式(0001,每 3 位数字 10 比特)、字母数字模式(0010,每 2 个字符 11 比特)、字节模式(0100,每字符 8 比特,通常为 UTF-8 或 Latin-1)、汉字模式(1000,每字符 13 比特,使用 Shift JIS)或 ECI(0111,扩展通道解释,用于指定字符集)。工具显示解码字符串并自动检测其为 URL(通过尝试 new URL() 解析)还是纯文本。
第一阶段是定位三个定位图案——每个二维码左上角、右上角和左下角的标志性 7×7 方中套方中套方标记。jsQR 扫描图像中匹配定位图案横截面特征(1:1:3:1:1 比例)的黑白像素交替序列,不依赖旋转角度。定位三个定位图案后,其质心定义了二维码的边界四边形。
透视校正使用从四个角点计算的单应性矩阵将四边形变换为正方形网格。这一步至关重要,因为二维码很少被正面拍摄——校正可以将二维码“展平”,使每个模块(代表一个比特的黑色或白色方块)落在规则网格上。模块尺寸由定位图案尺寸和版本号确定,版本号从定位图案旁的格式信息条带中读取。
图像二值化将灰度像素值转换为纯黑白。jsQR 使用局部阈值方法:不是单一全局阈值(在不均匀光照或阴影下会失败),而是对图像的小区域计算阈值,使其对智能手机照片中常见的渐变和暗角具有鲁棒性。
纠错使用 ISO/IEC 18004:2015 规定的 Reed-Solomon 码。二维码支持四个纠错等级:L(约 7% 恢复)、M(约 15%)、Q(约 25%)和 H(约 30%)。数据码字和纠错码字交织在各块中;jsQR 执行伴随式计算并应用 Berlekamp-Massey 算法在码字的额定容量内定位和纠正错误。如果损坏超过纠错等级,解码会失败而非返回损坏数据。
最后,根据前四个比特中的编码模式指示符解释解码后的比特流:数字模式(0001,每 3 位数字 10 比特)、字母数字模式(0010,每 2 个字符 11 比特)、字节模式(0100,每字符 8 比特,通常为 UTF-8 或 Latin-1)、汉字模式(1000,每字符 13 比特,使用 Shift JIS)或 ECI(0111,扩展通道解释,用于指定字符集)。工具显示解码字符串并自动检测其为 URL(通过尝试 new URL() 解析)还是纯文本。
- 定位图案检测:jsQR 扫描行中匹配 1:1:3:1:1 比例的黑白像素交替序列——三个近似直角排列的定位图案确认二维码的存在和方向,不受旋转影响
- 透视校正:从检测到的四个角点计算单应性矩阵,将倾斜的四边形映射到正方形网格——这一步至关重要,因为实际拍摄的照片很少正面捕获二维码
- 自适应二值化:局部阈值将图像分成小区域并计算每个区域的阈值,使解码器对不均匀光照、阴影和渐变具有鲁棒性,而全局阈值无法处理这些情况
- Reed-Solomon 纠错(ISO/IEC 18004):四个等级(L/M/Q/H)提供 7-30% 的数据恢复——Berlekamp-Massey 算法定位错误位置,Forney 算法计算纠正幅度;如果损坏超过等级容量,解码干净地失败
- 编码模式检测:前四个数据比特指示模式——数字模式(0001,对数字高效)、字母数字模式(0010,用于 A-Z 0-9 和符号)、字节模式(0100,用于任意 UTF-8/Latin-1 数据)、汉字模式(1000,用于 Shift JIS)和 ECI(0111,用于字符集指定)
- 版本和模块网格:二维码版本从 1(21×21 模块)到 40(177×177),每个版本每边增加 4 个模块——版本从定位图案旁的格式信息条带读取,模块数决定采样网格密度
- 浏览器本地执行:图像绘制到隐藏的 Canvas 元素,getImageData() 提取原始 RGBA 像素缓冲区,jsQR 在浏览器主线程中完成全部处理——不上传任何图像数据到服务器,解码完成后 canvas 被垃圾回收
示例
URL 二维码
扫描内容:https://example.com
类型: URL
动作: 扫描器在用户确认后用系统浏览器打开链接纯文本二维码
扫描内容:This is text content
类型: 文本
动作: 扫描器把文本复制到剪贴板,或在结果页中显示WiFi 凭证二维码
扫描内容:WIFI:T:WPA;S:NetworkName;P:Password;;
类型: WiFi (WPA2)
动作: 支持该格式的手机会弹出「连接到 NetworkName?」并使用给定密码加入网络vCard 联系人卡片
扫描内容:BEGIN:VCARD\nVERSION:3.0\nFN:Jane Doe\nTEL:+1-555-0142\nEMAIL:jane@example.com\nEND:VCARD
类型: 联系人卡片
动作: 手机会根据解析出的字段,提示创建一条新的通讯录联系人常见问题
图像会被上传以解码吗?
不会。解码通过 WebAssembly 或纯 JS 在浏览器中运行。图像字节在本地读取,不会发送到服务器。
支持哪些输入方式?
上传文件、从剪贴板粘贴图像,或拖放图像文件。图像在浏览器中处理,不会上传到服务器。
解码器会返回什么?
原始解码后的文本。页面会判断结果是 URL 还是普通文本,并相应显示标签。如果是 URL,会提供「打开 URL」按钮。
为什么我的二维码无法解码?
常见原因有:模糊、对比度低、反光、透视倾斜,或二维码被部分遮挡。请裁剪得更近、提高亮度,并保持手机与平面成 90° 平稳拍摄。纠错等级 L 的二维码几乎无法承受任何破损;H 级可容忍较大遮挡。
可以解码截图和 PDF 中的二维码吗?
截图通常解码良好,因为对比度完美且没有透视畸变。对于 PDF,请先截取二维码区域的图像,再上传图片。
应该打开二维码包含的每一个 URL 吗?
不应该。二维码是已知的钓鱼载体(quishing),因为 URL 隐藏在视觉图像中。打开前请检查解码出的 URL——页面会展示完整 URL 让你看清域名。警惕错拼域名、IP 地址,以及隐藏真实目的地的短链。
可以解码一张图中的多个二维码吗?
页面每张图只检测一个二维码。如果图片中有多个二维码,请分别裁剪每个并单独上传,结果最可靠。