二维码解析

上传/摄像头识别

420 次访问

二维码解析器

图片上传 / 拖拽 / 摄像头扫码 · 浏览器本地解析(jsQR)· 永不上传

📷
点击 / 拖拽图片到这里
支持 PNG / JPG / GIF / WebP 等格式
识别结果
等待二维码…

支持识别的内容类型

· URL:http:// 或 https:// 开头,自动识别为可点击链接

· WiFiWIFI:T:WPA;S:ssid;P:password;; 格式

· vCard / MeCard:电子名片格式

· SMS / TEL / MAILTO:短信、电话、邮件链接

· geo: 地理位置坐标

· 文本 / 其他:原样显示

隐私保证:所有图片在浏览器本地用 jsQR 算法解析,不上传服务器。摄像头扫描也仅在本地处理。

关于本工具

了解工具定位 · 使用场景 · 对比优势

上传二维码图片或使用摄像头扫描,即时解析出文本内容、网址、联系方式等信息。运营人员批量提取物料中的链接、开发人员调试扫码逻辑、日常快速识别陌生二维码,无需安装软件。解析全程在浏览器本地完成,图片不上传服务器。

使用场景

📦

快递单号核验

仓库打包员每天处理几百个包裹,扫码枪偶尔漏扫或识别错位。用本工具摄像头对准快递面单上的二维码,0.5 秒解析出单号,自动与系统订单比对,发现不一致立刻提示。避免发错货、漏发货,省去人工逐单核对的 30 分钟/天。

🎫

活动门票验真

展会入口检票员面对纸质票、电子票混排,二维码模糊或反光时扫描枪频繁失败。本工具支持上传模糊照片或直接对准屏幕扫码,即使票面有折痕、光线不足也能解析。识别后显示票号、场次、座位,与后台数据库实时比对,杜绝假票入场。

🔧

设备铭牌溯源

维修技师在机房巡检,设备铭牌上的二维码因油污、磨损难以读取。用本工具拍照上传,算法增强对比度后解析出设备编号、型号、维保日期,直接跳转维修手册页面。无需手动抄录编号,避免因识别失败而延误故障排查。

📄

文档二维码归档

行政人员整理合同档案,每份纸质文件封面贴有二维码,内含档案编号、签署日期。用本工具批量扫描或逐张上传,自动提取二维码内容并生成 Excel 清单,与电子档案系统匹配。省去逐本翻页抄录编号的重复劳动,归档效率提升 3 倍。

🎓

教材二维码备课

教师拿到新教材,封底二维码指向配套课件、习题答案等资源。用本工具扫码后直接获取链接,无需安装专用 APP。在教室电脑上打开链接即可投屏使用,省去手动输入冗长网址的麻烦,尤其适合临时调课、借用的教室设备。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A (ZXing Decoder Online)传统方法 (手机扫码/手动输入)
数据隐私纯浏览器解码,图片不上传服务器需上传图片至服务器解码本地扫码或手动输入,无上传行为
处理速度1 秒内完成解码取决于网络和服务器负载,通常 2-5 秒扫码瞬间完成,手动输入则需数秒至数分钟
离线可用完全离线,无网络也可使用必须联网手机扫码无需联网,手动输入也无需联网
摄像头识别支持,调用浏览器摄像头实时解码不支持,仅支持上传图片手机相机原生支持,PC 端需额外硬件或软件
批量处理不支持,单次处理一张图片不支持,单次处理一张图片不支持,需逐个扫码或输入
复杂二维码容错解码能力受浏览器内置解码器限制,对高损毁或复杂码可能失败服务器端解码算法更强大,容错率更高,能处理部分损毁码手机扫码容错率较高,手动输入则无容错概念

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 点击「上传图片」按钮,选择 JPG/PNG/WebP 格式的二维码图片(单张 ≤ 20MB)
  2. 或点击「摄像头」按钮,授权后对准二维码,工具自动识别画面中的码
  3. 识别结果(文本/URL/联系方式)显示在右侧结果区,支持一键复制
  4. 若需批量解析,重复上传或切换图片,历史结果保留在下方列表

输入输出示例7 个典型场景,覆盖常规、边界与易错

输入输出说明
https://example.com/qrcode.pnghttps://www.example.com/product/123典型场景:扫描商品二维码获取链接
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA...Hello, World!典型场景:从剪贴板粘贴 base64 编码图片
(摄像头实时扫描)WIFI:T:WPA;S:MyNetwork;P:password123;;典型场景:扫描 Wi-Fi 二维码获取连接信息
(摄像头扫描模糊二维码)无法识别:二维码模糊或损坏边界 case:低质量或部分遮挡的二维码
https://example.com/empty.png(纯白图片)未检测到二维码边界 case:上传不含二维码的图片
https://example.com/very-long-url-qr.png(含超长 URL 的二维码)https://www.example.com/path?param1=value1&param2=value2&...(完整 URL)边界 case:二维码内容为超长文本或 URL
(摄像头扫描反光二维码)无法识别:二维码反光或光线不足易错 case:用户未调整光线或角度

常见错误对照8 个常踩的坑 · 错误 → 修复

1. 上传了非二维码图片(如普通风景照)

错误
上传一张猫的照片或纯文字截图
修复
上传包含清晰二维码的图片,确保二维码区域占图片面积至少 10%

二维码解析引擎依赖定位图案和模块结构;无二维码的图片无法触发解码流程,只会返回空结果或报错

2. 二维码图片分辨率太低导致模糊

错误
上传 50×50 像素的二维码截图
修复
确保二维码区域至少 200×200 像素,模块清晰可辨

低分辨率会使模块边界粘连,解码器无法区分黑白模块的边界,导致定位失败或误码

3. 二维码被严重旋转或倾斜(超过 45°)

错误
上传一张二维码被旋转 90° 且透视变形的照片
修复
尽量保持二维码正面朝上,倾斜角度控制在 30° 以内

虽然二维码有 3 个定位图案支持旋转矫正,但过大透视变形会使采样网格偏移,超出纠错能力

4. 二维码被部分遮挡或污损

错误
上传一张二维码中间贴了标签的照片
修复
确保二维码四个角(尤其是三个定位图案)和整个数据区域无遮挡

二维码纠错等级最高可恢复约 30% 数据,但遮挡若覆盖定位图案或关键数据区,解码必然失败

5. 使用摄像头时距离太近或太远

错误
手机贴到二维码上拍,或站在 3 米外拍一个 2cm 的二维码
修复
保持二维码在取景框内占 1/3 到 2/3 面积,距离约 15-30cm(视二维码大小调整)

过近导致失焦模糊,过远导致分辨率不足;摄像头自动对焦需要二维码在合理景深范围内

6. 二维码表面反光严重(如塑封卡片反光)

错误
在强光下直接拍摄塑封二维码名片
修复
调整角度避开光源直射,或用手遮挡反光区域;也可先拍照再上传

反光会使局部模块变成白色,破坏模块对比度;解码器依赖黑白模块的明暗差异,反光区域等同于数据丢失

7. 误把条形码当作二维码上传

错误
上传商品包装上的 EAN-13 条形码
修复
确认图片中是正方形或矩形二维码(有 3 个回形定位图案),而非一维条形码

二维码解析器只处理 QR Code、Data Matrix、PDF417 等二维条码;条形码是一维编码,需使用专门的条码解析工具

8. 上传了动态二维码的截图但内容已过期

错误
截图一个微信小程序码,过了一周后上传解析
修复
在二维码有效期内解析,或确认二维码是静态内容(如网址、文本)

动态二维码(如临时登录码、一次性活动码)后端绑定有效期或状态;截图后内容可能已失效,解析出的 URL 可能返回 404

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

无单一数学公式;基于 ISO/IEC 18004:2015 标准,使用 Reed-Solomon 纠错码解码

变量说明

  • RS(n,k) — Reed-Solomon 码,n=总码字,k=数据码字
  • ECC — 纠错等级(L/M/Q/H,分别恢复 7%/15%/25%/30% 数据)
  • Data — 原始数据比特流(经掩模和模块映射后)

示例

扫描一个包含 URL 的 QR 码:摄像头捕获图像 → 定位图案(3 个寻像图形)→ 透视校正 → 灰度二值化 → 按版本 4(33×33 模块)提取数据区 → 移除掩模(XOR 0x10101...)→ Reed-Solomon 解码(ECC 等级 M,可纠正 15% 错误)→ 输出原始字节序列 → 按 UTF-8 解码为 'https://example.com'。若图像有 10% 污损,RS 纠错仍可正确还原。

适用范围

适用于符合 ISO/IEC 18004:2015 的 QR 码(版本 1-40,纠错等级 L/M/Q/H)。不支持 Micro QR、iQR 或汉信码等变体。严重畸变(>30% 模块损坏)或低对比度(<20% 灰度差)时解码失败率显著上升。

原理图

二维码解析流程(纯浏览器端)上传/摄像头本地解码(WASM/JS)展示结果数据不上传服务器,保护隐私
用户输入 本地处理 输出结果

开发者集成

3 种主流语言 · 复制即用

import cv2
import numpy as np
from pyzbar.pyzbar import decode

# 从图片文件解码二维码
image = cv2.imread("qrcode.png")
if image is None:
    print("无法读取图片文件")
    exit(1)

# 解码所有二维码/条形码
barcodes = decode(image)
for barcode in barcodes:
    data = barcode.data.decode("utf-8")
    rect = barcode.rect
    print(f"内容: {data}")
    print(f"位置: x={rect.left}, y={rect.top}, w={rect.width}, h={rect.height}")

# 输出示例:
# 内容: https://example.com
# 位置: x=100, y=50, w=200, h=200
package main

import (
	"fmt"
	"image/png"
	"os"

	"github.com/makiuchi-d/gozxing"
	"github.com/makiuchi-d/gozxing/qrcode"
)

func main() {
	// 打开二维码图片
	file, err := os.Open("qrcode.png")
	if err != nil {
		fmt.Println("无法打开文件:", err)
		return
	}
	defer file.Close()

	img, err := png.Decode(file)
	if err != nil {
		fmt.Println("图片解码失败:", err)
		return
	}

	// 初始化二维码读取器
	reader := qrcode.NewQRCodeReader()
	bmp, _ := gozxing.NewBinaryBitmapFromImage(img)

	result, err := reader.Decode(bmp, nil)
	if err != nil {
		fmt.Println("二维码解码失败:", err)
		return
	}

	fmt.Printf("内容: %s\n", result.GetText())
	// 输出: 内容: https://example.com
}
const jsQR = require('jsqr');
const fs = require('fs');
const { PNG } = require('pngjs');

// 读取并解析PNG图片
const buffer = fs.readFileSync('qrcode.png');
const png = PNG.sync.read(buffer);

// 提取像素数据(RGBA格式)
const imageData = new Uint8ClampedArray(png.data);

// 解码二维码
try {
    const code = jsQR(imageData, png.width, png.height);
    if (code) {
        console.log(`内容: ${code.data}`);
        console.log(`位置: (${code.location.topLeftCorner.x}, ${code.location.topLeftCorner.y})`);
    } else {
        console.log('未检测到二维码');
    }
} catch (err) {
    console.error('解码失败:', err.message);
}

// 输出示例:
// 内容: https://example.com
// 位置: (100, 50)

常见问题

8 个高频疑问

用摄像头扫描二维码时,光线不好或者二维码有点模糊能识别出来吗?
取决于模糊程度。本工具在浏览器端用 JavaScript 解码,对常见的轻微模糊(如打印磨损、反光、小角度倾斜)有一定容错能力。但如果二维码严重破损(缺角超过 30%)、过度曝光或完全对不上焦,则无法解码。建议拍摄时保持二维码在画面中央、光线均匀,手机距离 15-30cm 效果最好。如果摄像头一直失败,可以尝试截屏后上传图片再试。
上传的图片里有很多个二维码,工具会解析哪一个?
默认只解析图片中检测到的第一个二维码(按解码库的扫描顺序,通常是画面中面积最大或对比度最高的那个)。如果图片包含多个二维码且需要逐个解析,建议将图片裁剪成单张再分别上传。目前工具没有提供“选择区域解码”的功能,一次上传只输出一个结果。
为什么我用摄像头扫了一直没反应?是不是工具坏了?
大概率是浏览器权限或兼容问题。第一步:确认页面顶部地址栏左边有摄像头图标被允许(Chrome/Firefox 首次会弹窗询问,点了“阻止”后需要手动改权限)。第二步:检查是否同时有其它应用占用摄像头(如微信视频、Zoom 会议)。第三步:Safari 需要 HTTPS 协议才能调用摄像头,如果当前页面是 HTTP,摄像头按钮会灰色不可点。以上都正常仍无反应,换 Chrome 浏览器再试。
工具能解析微信/支付宝的收款码吗?会不会显示金额?
可以解析出收款码里编码的字符串,但看不到金额。微信和支付宝的收款码本质是 URL(形如 `https://qr.alipay.com/xxx`),本工具会如实返回这个链接。金额、备注等交易信息是收款码背后的服务器参数,不写在二维码里。拿到这个链接后,用浏览器打开可以看到付款页面,但金额需要付款方在页面手动输入,不是二维码自带的。
解析出来的内容是一串乱码或者看不懂的字符,是工具错了吗?
不是工具错误。二维码可以编码任意二进制数据,如果生成时用了非 UTF-8 编码(如 GBK、Shift-JIS 或加密数据),浏览器默认按 UTF-8 解码就会显示乱码。另外,部分二维码是 vCard 联系人卡片或 Wi-Fi 配置信息,它们有特定格式(如 `BEGIN:VCARD`),人眼看起来像乱码但实际是标准结构。可以复制结果到文本编辑器,或用在线 Base64 解码器试一下。
这个工具和直接用手机相机扫二维码有什么区别?
核心区别在于输出内容和场景。手机相机扫二维码通常会触发对应操作(打开网页、加好友、连 Wi-Fi),但不显示二维码里到底写了什么。本工具只做“解码”,把二维码里的原始字符串展示给你看,不执行任何跳转或动作。适合的场景:怀疑二维码被篡改(先看链接域名是否安全)、研究二维码内容结构、或者二维码来自截图/图片而非实物。
解析后得到的一长串网址安全吗?我敢不敢点?
工具只负责解码,不判断链接安全性。返回的网址是二维码里直接编码的,工具不会进行恶意网址检测或跳转拦截。建议在点击之前先看域名:如果是常见大站(`.com` / `.cn` 知名品牌)相对安全;如果是乱码域名(如 `xyx123.top`)或者短链接(如 `t.cn/xxx`),最好先用网址安全检测工具查一下。工具本身不会记录或追踪你解析出的链接。
工具支持解析彩色二维码或者带 Logo 的二维码吗?
支持,但成功率低于普通黑白二维码。彩色二维码和带 Logo 的二维码(在中心嵌入图片)本质是标准 QR 码,只是做了视觉美化。本工具的解码库对高对比度的彩色二维码(如深蓝底白点)可以正常解析,但浅色底(如黄色、粉色)或 Logo 面积过大(覆盖超过中心 20% 区域)容易失败。建议上传前先用图片编辑软件把彩色转成黑白高对比度图片再试。
选择 打开 +新窗口 esc关闭