专业二维码生成器
在浏览器本地生成二维码,支持样式(形状/定位点)、渐变、Logo、外框与分享。数据不上传,永久免费、无水印。
永久免费
无水印
纯本地生成
PNG / SVG
使用方法
- 选择类型(URL、文本、WiFi、vCard、短信、邮件),输入或粘贴内容
- 调整尺寸、边距、颜色、纠错级别,以及样式(形状/定位点)、渐变、Logo、外框等
- 选择 PNG 或 SVG 格式
- 二维码将自动生成;准备就绪后可“下载”或“复制”
- 使用 Logo 或复杂样式时,建议将纠错提升至 H,并预留足够的安静区(空白边)
- 用于印刷/展示时,保证前景-背景高对比,避免过小尺寸及过度失真
功能特性
- 纯前端生成(不上传)
- 支持 PNG 与 SVG 输出
- 样式可定制:形状、定位点、圆角、间隙
- 渐变(多色、多方向)
- Logo 叠加(可选自动提升纠错级别)
- 外框与描边(圆角卡片风格)
- 分享与剪贴板(链接/图片)
- 多语言与主题支持
什么是定位点(Finder)?
二维码四角中的三个大方块叫做 定位点(Finder),用于帮助相机快速找到二维码的位置与角度,从而实现纠偏与解码。它们通常是黑白相间的 7×7 模块结构(外黑、内白、中心黑)。
- 作用:快速定位、抗旋转、抗透视。
- 样式:本工具支持方形、圆角以及“圆点风格”的定位点渲染(样式 → Finder 中选择)。
二维码是谁发明的?
二维码(QR Code)由日本 Denso Wave 公司的工程师 原昌宏(Masahiro Hara) 于 1994 年发明。QR 是 “Quick Response(快速响应)” 的缩写。
- 发明动机:提升汽车零部件生产线的识别效率,突破一维码容量与读取速度的限制。
- 设计灵感:围棋黑白棋子与矩阵图案,启发了“模块化 + 定位图形”的高鲁棒设计。
- 为何不用付专利费:Denso Wave 持有商标与部分专利,但明确免费开放使用,以促进生态普及(支持商用,不收授权费)。
标准规范与使用建议
- 国际标准:ISO/IEC 18004(QR Code 2D 符号规范),定义版本、掩码、纠错、图形结构等。
- 容错等级:L/M/Q/H 四级(约 7%/15%/25%/30% 可恢复),Logo 叠加建议使用更高等级。
- 编码内容:文本、URL、vCard、Wi‑Fi 等,建议遵循相应 URI/数据格式规范(如
WIFI:T:WPA;S:SSID;P:PASS;;)。 - 印刷与显示:保证前景/背景对比与安静区大小;避免过度失真、过小尺寸与过密纹理干扰。
- 可访问性:关键场合建议提供备用文本/链接,避免仅以二维码作为唯一入口。
通过编程语言生成二维码
下面给出常用语言的最简示例,适合入门与脚手架使用:
JavaScript(Node/Browser)
// Node: npm i qrcode
const QRCode = require('qrcode');
QRCode.toFile('qrcode.png', 'https://example.com', { errorCorrectionLevel: 'M' });
// Browser (Canvas):
// <script src="https://cdn.jsdelivr.net/npm/[email protected]/lib/browser.min.js"></script>
QRCode.toCanvas(document.getElementById('canvas'), 'Hello QR', { width: 256 });
Python
# pip install qrcode[pil]
import qrcode
img = qrcode.make('https://example.com')
img.save('qrcode.png')
PHP
// composer require endroid/qr-code
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;
$qr = QrCode::create('https://example.com');
$writer = new PngWriter();
$result = $writer->write($qr);
$result->saveToFile(__DIR__.'/qrcode.png');
Go
// go get -u github.com/skip2/go-qrcode
package main
import "github.com/skip2/go-qrcode"
func main() {
qrcode.WriteFile("https://example.com", qrcode.Medium, 256, "qrcode.png")
}
Java
// Maven: com.google.zxing:core, com.google.zxing:javase
// Minimal ZXing example
import com.google.zxing.BarcodeFormat;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class Main {
public static void main(String[] args) throws Exception {
QRCodeWriter writer = new QRCodeWriter();
BitMatrix matrix = writer.encode("https://example.com", BarcodeFormat.QR_CODE, 256, 256);
BufferedImage image = MatrixToImageWriter.toBufferedImage(matrix);
ImageIO.write(image, "png", new File("qrcode.png"));
}
}
Rust
// Cargo.toml
// qrcode = "0.13"
// image = "0.24"
use qrcode::QrCode;
use image::Luma;
fn main() {
let code = QrCode::new("https://example.com").unwrap();
let image = code.render<Luma<u8>>().min_dimensions(256, 256).build();
image.save("qrcode.png").unwrap();
}
提示:不同库支持的样式能力差异较大。如需高级样式(圆点、渐变、定位点风格、外框等),可在本工具中生成 PNG/SVG 后直接使用。