专业二维码生成器

在浏览器本地生成二维码,支持样式(形状/定位点)、渐变、Logo、外框与分享。数据不上传,永久免费、无水印。

永久免费 无水印 纯本地生成 PNG / SVG

二维码生成器

快速样式预设 一键套用,稍后在样式设置里微调
样式设置
外框
高级设置
渐变
Logo
仅在 PNG 模式下支持。图片在本地处理,不会被上传。
logo preview
提示:样式仅对 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 后直接使用。