QR Code Guide: How to Create, Customize & Use QR Codes

· 10 min read

什么是二维码及其工作原理

二维码(QR Code,Quick Response Code)是一种二维矩阵条码,由日本电装公司(Denso Wave)于1994年发明。最初用于汽车制造业的零件追踪,如今已成为连接物理世界与数字世界的重要桥梁。与传统的一维条形码相比,二维码能够存储更多信息,并且可以从任何角度快速读取。

二维码的基本结构

一个标准的二维码由以下关键元素组成:

数据编码方式

二维码支持多种编码模式,根据数据类型自动选择最优编码方式:

错误纠正级别

二维码采用Reed-Solomon纠错算法,即使部分损坏也能正常读取。共有四个错误纠正级别:

级别 恢复能力 数据容量损失 适用场景
L (Low) 约7% 最小 清洁环境,短期使用,需要最大数据容量
M (Medium) 约15% 中等 一般应用,平衡容量与可靠性
Q (Quartile) 约25% 较高 工业环境,可能有污损或磨损
H (High) 约30% 最高 恶劣环境,需要嵌入logo,长期户外使用

选择错误纠正级别时需要权衡:更高的纠错级别意味着更强的容错能力,但也会减少可存储的数据量,并增加二维码的复杂度。对于需要在中心嵌入logo的二维码,建议使用Q或H级别。

扫描与解码过程

当扫描设备读取二维码时,会经历以下步骤:

  1. 图像捕获: 相机或扫描器捕获二维码图像
  2. 定位: 识别三个定位图案,确定二维码的位置、大小和旋转角度
  3. 透视校正: 将倾斜或扭曲的图像转换为正面视图
  4. 采样: 将图像转换为黑白模块矩阵
  5. 解码: 读取格式信息,确定版本和纠错级别
  6. 数据提取: 按照特定的读取顺序提取数据码字
  7. 错误纠正: 使用Reed-Solomon算法纠正错误
  8. 数据解析: 根据编码模式将二进制数据转换为原始信息

二维码的类型

根据存储的数据类型和用途,二维码可以分为多种类型。每种类型都遵循特定的数据格式标准,使扫描设备能够自动执行相应的操作。

URL二维码

这是最常见的二维码类型,存储网址链接。扫描后自动在浏览器中打开网页。

格式: https://example.com/page
用途: 网站推广、产品信息、在线菜单、活动注册

实际应用示例:餐厅将菜单URL编码为二维码,顾客扫描后直接查看电子菜单,无需接触纸质菜单,既卫生又环保。

vCard二维码

存储联系人信息,扫描后可直接保存到手机通讯录。支持姓名、电话、邮箱、地址、公司等多个字段。

格式示例:
BEGIN:VCARD
VERSION:3.0
FN:张三
TEL:+86-138-0000-0000
EMAIL:[email protected]
ORG:科技公司
URL:https://example.com
END:VCARD

商务场景中,将vCard二维码印在名片上,对方扫描即可保存完整联系信息,避免手动输入错误。

WiFi二维码

存储WiFi网络的SSID、密码和加密类型,扫描后自动连接网络,无需手动输入密码。

格式: WIFI:T:WPA;S:网络名称;P:密码;H:false;;
参数说明:
T - 加密类型(WPA/WEP/nopass)
S - 网络SSID
P - 密码
H - 是否隐藏网络(true/false)

咖啡馆、酒店等场所可以在显眼位置放置WiFi二维码,顾客扫描即可连接,提升用户体验。

电子邮件二维码

扫描后自动打开邮件客户端,预填收件人、主题和正文。

格式: mailto:[email protected]?subject=咨询&body=您好,我想了解...
参数:
- 收件人地址
- subject: 邮件主题
- body: 邮件正文
- cc: 抄送
- bcc: 密送

短信二维码

扫描后打开短信应用,预填收件人和消息内容。

格式: 
SMS:+86-138-0000-0000:预设消息内容
或
SMSTO:+86-138-0000-0000:预设消息内容

营销活动中,可以让用户扫描二维码发送特定关键词参与抽奖或获取优惠。

地理位置二维码

存储经纬度坐标,扫描后在地图应用中显示位置或启动导航。

格式: geo:39.9042,116.4074
或带查询参数: geo:39.9042,116.4074?q=天安门广场

活动邀请函上印制地理位置二维码,参与者扫描后直接导航到活动地点。

支付二维码

用于移动支付,包含商户信息和交易金额。不同支付平台有各自的编码标准。

示例(简化):
- 微信支付: weixin://wxpay/bizpayurl?...
- 支付宝: https://qr.alipay.com/...
- 银联: upi://pay?...

应用下载二维码

链接到应用商店的下载页面,或使用深度链接直接打开已安装的应用。

iOS: https://apps.apple.com/app/id123456789
Android: https://play.google.com/store/apps/details?id=com.example.app
深度链接: myapp://open?page=home

如何创建二维码

创建二维码有多种方法,从在线工具到编程库,可以根据需求选择合适的方式。

方法一:使用在线生成器

这是最简单快捷的方式,适合个人用户和小批量需求。

  1. 选择可靠的在线工具: 如QR Code Generator、QRCode Monkey、Unitag等
  2. 选择二维码类型: URL、文本、vCard、WiFi等
  3. 输入数据: 根据选择的类型填写相应信息
  4. 设置参数:
    • 选择错误纠正级别(L/M/Q/H)
    • 调整尺寸(像素或厘米)
    • 选择输出格式(PNG、SVG、EPS等)
  5. 定制外观(可选): 修改颜色、添加logo、改变样式
  6. 生成并下载: 预览效果后下载文件
  7. 测试: 使用多个设备和应用扫描测试

方法二:使用编程库

适合需要批量生成或集成到应用中的开发者。

Python示例(使用qrcode库):

import qrcode

# 基础生成
qr = qrcode.QRCode(
    version=1,  # 1-40,控制二维码大小
    error_correction=qrcode.constants.ERROR_CORRECT_H,
    box_size=10,  # 每个模块的像素大小
    border=4,  # 边框宽度(模块数)
)

qr.add_data('https://example.com')
qr.make(fit=True)

img = qr.make_image(fill_color="black", back_color="white")
img.save('qrcode.png')

# 带logo的二维码
from PIL import Image

qr = qrcode.QRCode(error_correction=qrcode.constants.ERROR_CORRECT_H)
qr.add_data('https://example.com')
qr.make()

img = qr.make_image(fill_color="#1a73e8", back_color="white").convert('RGB')

# 添加logo
logo = Image.open('logo.png')
logo_size = img.size[0] // 4
logo = logo.resize((logo_size, logo_size))

logo_pos = ((img.size[0] - logo_size) // 2, (img.size[1] - logo_size) // 2)
img.paste(logo, logo_pos)

img.save('qrcode_with_logo.png')

JavaScript示例(使用qrcode.js):

// Node.js环境
const QRCode = require('qrcode');

// 生成为文件
QRCode.toFile('qrcode.png', 'https://example.com', {
  errorCorrectionLevel: 'H',
  type: 'png',
  width: 300,
  color: {
    dark: '#000000',
    light: '#FFFFFF'
  }
}, function (err) {
  if (err) throw err;
  console.log('二维码已生成');
});

// 生成为Data URL(浏览器环境)
QRCode.toDataURL('https://example.com', {
  errorCorrectionLevel: 'M',
  width: 300
}, function (err, url) {
  if (err) throw err;
  document.getElementById('qrcode').src = url;
});

Java示例(使用ZXing库):

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;

public class QRCodeGenerator {
    public static void generateQRCode(String data, String path) 
            throws WriterException, IOException {
        
        Map hints = new HashMap<>();
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
        hints.put(EncodeHintType.MARGIN, 1);
        
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix bitMatrix = qrCodeWriter.encode(
            data, 
            BarcodeFormat.QR_CODE, 
            300, 
            300, 
            hints
        );
        
        Path filePath = FileSystems.getDefault().getPath(path);
        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", filePath);
    }
}

方法三:使用命令行工具

适合需要在脚本中批量生成的场景。

# 使用qrencode(Linux/Mac)
qrencode -o qrcode.png -s 10 -l H "https://example.com"

# 参数说明:
# -o: 输出文件名
# -s: 模块大小(像素)
# -l: 错误纠正级别(L/M/Q/H)
# -m: 边距宽度

# 批量生成
while IFS=, read -r name url; do
    qrencode -o "qr_${name}.png" -s 10 -l H "$url"
done < urls.csv

最佳实践建议

二维码定制化

虽然标准的黑白二维码功能完善,但定制化设计可以提升品牌识别度和视觉吸引力。不过,过度定制可能影响扫描性能,需要谨慎平衡。

颜色定制

二维码不必是黑白的,可以使用品牌色彩,但需遵循以下原则:

推荐的颜色组合:

✓ 深蓝(#1a73e8) + 白色
✓ 深绿(#0f9d58) + 白色  
✓ 深紫(#673ab7) + 白色
✓ 黑色 + 浅黄(#fff9c4)
✗ 红色 + 绿色(色盲用户难以区分)
✗ 黄色 + 白色(对比度不足)
✗ 浅灰 + 白色(对比度不足)

嵌入Logo

在二维码中心嵌入品牌logo是常见的定制方式,但需要注意:

实现步骤:

  1. 生成错误纠正级别为H的二维码
  2. 准备高清logo图片(PNG格式,透明背景)
  3. 将logo缩放到二维码尺寸的15-20%
  4. 在logo周围添加白色边框(约logo宽度的5-10%)
  5. 将logo居中叠加到二维码上
  6. 测试扫描性能

形状定制

可以修改二维码模块的形状,创造独特的视觉效果:

注意事项:

背景图案

可以在二维码背景添加图案或图片,但这是最具挑战性的定制:

框架和装饰

在二维码周围添加框架、文字说明或行动号召:

示例布局:
┌─────────────────────┐
│   扫描查看菜单      │
│  ┌─────────────┐    │
│  │             │    │
│  │  [QR CODE]  │    │
│  │             │    │
│  └─────────────┘    │
│  使用微信或相机扫描 │
└─────────────────────┘

定制工具推荐

二维码尺寸与扫描距离指南

二维码的尺寸直接影响扫描距离和成功率。选择合适的尺寸需要考虑使用场景、扫描距离和印刷质量。

基本尺寸公式

二维码尺寸与扫描距离的关系可以用以下公式估算:

二维码尺寸 = 扫描距离 ÷ 10

示例:
- 扫描距离20cm → 二维码尺寸至少2cm × 2cm
- 扫描距离1米 → 二维码尺寸至少10cm × 10cm
- 扫描距离5米 → 二维码尺寸至少50cm × 50cm

这是保守估算,实际效果受多种因素影响。

不同场景的尺寸建议

应用场景 扫描距离 推荐尺寸 最小尺寸
名片 10-20cm 2cm × 2cm 1.5cm × 1.5cm
产品包装 20-30cm 2.5cm × 2.5cm 2cm × 2cm
餐桌台卡 30-50cm 4cm × 4cm 3cm × 3cm
A4传单 30-40cm 4cm × 4cm 3cm × 3cm
海报 50cm-1m 8cm × 8cm 5cm × 5cm
店铺橱窗 1-2米 15cm × 15cm 10cm × 10cm
户外广告牌 3-5米 40cm × 40cm 30cm × 30cm
建筑物外墙 10米以上 1m × 1m以上 80cm × 80cm

影响扫描距离的因素