如何生成 QR 码(免费、可定制)
为 URL、WiFi、联系人等创建 QR 码。自定义颜色和大小,下载为 PNG 或 SVG。
什么是 QR 码,为什么要生成它?
QR 码(Quick Response code,快速响应码)是一种二维条码,可以存储多达 4,296 个字母数字字符或 7,089 个数字字符。1994 年由丰田的日本子公司电装波(Denso Wave)发明,QR 码最初设计用于在制造过程中追踪车辆。它们后来成为连接物理和数字的通用工具:用手机摄像头扫描打印的 QR 码,可以打开网址、显示联系人详细信息、连接 WiFi,或执行支付流程 —— 无需输入。
你会在以下场景需要生成 QR 码:
- 分享链接:把它打印在传单、名片或产品标签上。人们扫描访问。
- WiFi 接入:包含你的网络 SSID 和密码的 QR 码让客人无需输入即可加入。
- 联系人卡片(vCard):编码你的姓名、电话、邮箱和地址,让人们可以直接保存到手机通讯录。
- 电子邮件和短信:预填邮件主题和正文,或目标电话号码。
- 加密货币支付:比特币、以太坊和大多数钱包使用 QR 码编码支付地址和金额。
- 双因素认证(TOTP):Google Authenticator 等认证器应用通过显示 QR 码在新设备上设置 2FA。
- 应用深度链接:直接链接到你应用中的某个屏幕(例如 `myapp://product/123`)。
- 库存和票务:每个项目上的 QR 码编码一个 ID 用于追踪。
好消息是:只要用对工具,生成 QR 码是免费、快速且私密的。
QR 码类型和容量
QR 码内容有几种标准:
- 网址:一个简单的网址。`https://example.com`
- 文本:最多约 4,000 字符的任意文本
- vCard:包含姓名、电话、邮箱、地址的联系人卡片
- WiFi:`WIFI:T:WPA;S:mynetwork;P:mypassword;;`
- 电子邮件:`mailto:[email protected]?subject=Hello&body=Hi`
- 短信:`sms:+15551234567?body=Hello`
- 电话:`tel:+15551234567`
- 地理:`geo:37.7749,-122.4194`(纬度,经度)
- 加密货币:`bitcoin:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa?amount=0.5`
QR 码还有纠错级别,控制代码在被破坏到无法读取之前可以损失多少:
- L(低):约 7% 的代码可以丢失
- M(中):约 15% 可以丢失
- Q(四分之一):约 25% 可以丢失
- H(高):约 30% 可以丢失
更高的纠错使 QR 码更密集(更多方块),但更具弹性。对于打印在曲面上、户外标志或任何可能被划伤的物品上,使用 Q 或 H。
方法一:使用 UtilBoxx QR 码生成器(推荐)
在浏览器中生成 QR 码最快、最私密、最可定制的方式是 UtilBoxx QR 码生成器。它支持 URL、文本、WiFi、vCard、邮件、电话、短信、地理和加密货币,可完全自定义颜色和大小,并可下载为 PNG 或 SVG。所有处理在浏览器本地完成 —— 没有上传、没有注册、不会记录你生成的内容。
使用方法:
- 打开 utilboxx.com/zh/tools/dev/qrcode
- 选择你的内容类型:URL、WiFi、vCard、邮件等
- 填写字段(URL、SSID/密码、联系人详细信息等)
- 自定义颜色、背景、大小和纠错
- 点击"生成"
- 下载为 PNG(用于屏幕)或 SVG(用于打印)
为什么推荐这个方法:
- 100% 免费,无注册、无邮箱、无水印
- 隐私优先:QR 码在浏览器中生成。内容永远不离开你的设备。对敏感 QR 码(WiFi 密码、2FA 密钥、加密货币地址)至关重要。
- 所有主要类型:URL、WiFi、vCard、邮件、电话、短信、地理、加密货币
- 完全可定制:前景色、背景色、大小、纠错、边距
- PNG 和 SVG 导出:PNG 用于屏幕和网页,SVG 用于打印(SVG 无限缩放而不失真)
- 任何有浏览器的设备都能用
如果你每月生成一次以上的 QR 码,这个工具能在节省时间和保护隐私上值回票价。
方法二:python-qrcode 库(Python)
Python 的 `qrcode` 库(配合用于图像渲染的 `Pillow`)是编程生成 QR 码的规范工具。用 `pip install qrcode[pil]` 安装。
```python import qrcode from qrcode.constants import ERROR_CORRECT_H
# 简单 URL qr = qrcode.QRCode( version=None, # 自动检测大小 error_correction=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("url_qr.png")
# WiFi QR 码 wifi_qr = qrcode.QRCode(box_size=10, border=4) wifi_qr.add_data("WIFI:T:WPA;S:MyNetwork;P:MyPassword;;") wifi = wifi_qr.make_image() wifi.save("wifi_qr.png")
# vCard vcard = """BEGIN:VCARD VERSION:3.0 FN:Ada Lovelace ORG:UtilBoxx TEL:+15551234567 EMAIL:[email protected] URL:https://example.com END:VCARD""" vcard_qr = qrcode.QRCode(box_size=8, border=2) vcard_qr.add_data(vcard) vcard_img = vcard_qr.make_image() vcard_img.save("vcard_qr.png")
# SVG 输出(用于打印) from qrcode.image.svg import SvgPathImage svg_qr = qrcode.QRCode(box_size=10, border=4) svg_qr.add_data("https://example.com") svg_img = svg_qr.make_image(image_factory=SvgPathImage) with open("url_qr.svg", "wb") as f: svg_img.save(f) ```
要批量生成(例如 1,000 个库存标签),一个带 `qrcode` 和 ID CSV 的小脚本能在几秒内生成所有文件。
方法三:命令行 qrencode(Linux/macOS)
`qrencode` 命令行工具是生成 QR 码的快速、可脚本化方式。macOS 上用 Homebrew 安装(`brew install qrencode`),Linux 上用 apt(`sudo apt install qrencode`)。
```bash # 为 URL 生成 QR 码 qrencode -o url.png "https://example.com"
# 使用更高纠错生成 qrencode -o url.png -l H "https://example.com"
# 生成 SVG(用于打印,无限缩放) qrencode -o url.svg -t SVG "https://example.com"
# 生成 ANSI 文本(用于终端显示!) qrencode -t ANSI "https://example.com"
# 生成 UTF-8 文本(更好的终端输出) qrencode -t UTF8 "https://example.com"
# WiFi QR qrencode -o wifi.png "WIFI:T:WPA;S:MyNetwork;P:MyPassword;;"
# vCard qrencode -o vcard.png "BEGIN:VCARD VERSION:3.0 FN:Ada Lovelace TEL:+15551234567 END:VCARD" ```
`qrencode` 是 shell 会话中一次性 QR 生成的最快路径,也适合在流水线中嵌入 QR 码的脚本。`-t ANSI` 模式让你可以直接在终端打印 QR 码,这是一个无需 GUI 就能分享的有趣技巧。
方法四:在线工具(UtilBoxx 之外)
还有许多其他在线 QR 码生成器 —— 大多数都能用,但有一些注意事项:
- 有些会上传你的数据:如果你扫描 WiFi QR,SSID 和密码是敏感的。确保工具本地处理(UtilBoxx 就是)或有明确的隐私政策。
- 有些会加水印:免费版通常会添加小标志或品牌边框。请阅读细则。
- 有些限制功能:自定义、类型和纠错可能藏在付费墙后。
- 有些有广告:弹窗广告、重定向广告和追踪像素很常见。
当有疑问时,优先选择尊重隐私、浏览器内处理的工具。UtilBoxx 的 QR 生成器基于 `qrcode` 构建,整个流水线在客户端运行。
常见问题
QR 码能容纳多少数据?
最大是 4,296 个字母数字字符或 7,089 个数字字符或 2,953 个二进制字节(在最低纠错级别下)。实际上,QR 码最适合短数据 —— 长 URL 变得密集且难以扫描。对于超过约 300 字符的内容,考虑使用缩短的 URL(通过 bit.ly 等服务)或不同的码类型(Data Matrix、PDF417、Aztec)。
静态和动态 QR 码有什么区别?
静态QR 码编码固定的 URL 或内容。生成后无法更改。动态QR 码指向您控制的重定向服务:扫描一次后 URL 永远不会变,但您可以更新它重定向的位置。动态码需要付费服务,并有隐私成本(重定向服务记录每次扫描)。出于隐私考虑,优先选择静态码。
QR 码是安全风险吗?
是的,在几个特定方面:
- Quishing(QR 钓鱼):恶意 QR 码可以导向钓鱼网站。打开之前始终预览 URL。
- 路过式恶意软件:QR 码可以链接到恶意 APK 或 .exe 下载。不要扫描来自不可信来源的码。
- WiFi 共享:如果你为家庭 WiFi 生成 QR 码并公开发布,任何人都可以加入你的网络。对共享的 QR 码使用有访问限制的访客网络。
- 支付重定向:加密货币地址替换攻击为攻击者的钱包生成 QR 码。发送前始终逐字符验证地址。
QR 码本身只是一个方块。风险在于它触发的 URL 或操作。
打印 QR 码的最佳尺寸是多少?
一个常用的经验法则:QR 码宽度应至少为每 10 个数据字符 1 厘米(0.4 英寸),最小为 2 cm × 2 cm(0.8 in × 0.8 in)。对于大多数 QR 码(约 50 个字符),2 厘米就足够了。对于密集的码(约 500 个字符),目标是 4-5 厘米。始终在码周围包含至少 4 个空白方块的"静默区" —— 大多数工具默认添加。
对于远距离扫描,按预期距离乘以系数:打算从 1 米处扫描的码应至少 2.5 厘米宽。
QR 码可以样式化或品牌化吗?
可以,但需要小心。三个定位图案(三个角上的大方块)必须保持完整且与背景高对比度。你可以:
- 更改数据模块(前景)和背景的颜色
- 在中心添加 logo(使用更高纠错 Q 或 H 来补偿被遮挡的数据)
- 圆角化模块以获得现代外观
- 在码下方添加带文字的边框
不要:
- 反转颜色(某些扫描器难以读取浅色深背景)
- 添加渐变(大多数扫描器可以读取,但有些不能)
- 在数据模块上放置文字或图形
- 扭曲方形宽高比
最小可扫描的 QR 码是多少?
最小实际尺寸约为短数据和良好光照下的 1 cm × 1 cm。更小的码(低至几毫米)在高分辨率打印和高对比度油墨下是可能的,但大多数手机摄像头有困难。对于大多数用途,2-3 厘米是实际下限。
结论
QR 码是物理和数字之间的通用桥梁。生成免费,扫描免费(每部手机都有内置扫描器),并支持从 URL 到 WiFi 凭据再到加密货币支付的数十种内容类型。正确的工具很重要:尊重隐私的工具完全在浏览器中运行,而其他的则将你的数据上传到远程服务器。
偶尔生成的话,UtilBoxx QR 码生成器 私密、免费,并生成具有完全自定义功能的高质量 PNG 和 SVG 输出。批量工作用 Python 的 `qrcode` 库或 `qrencode` CLI 可以处理成千上万的码而不离开终端。一次性的情况下,在线工具也行,只要你信任它处理你的数据。
一个快速的设计提示:保持高对比度(黑底白底是黄金标准),添加静默区,如果你打算叠加 logo 则使用纠错 H。你的 QR 码将在第一次就可靠地扫描。