Professional QR Code Generator
Generate QR codes locally in the browser, supporting styles (shape/positioning points), gradients, logos, frames, and sharing. No data is uploaded, it's completely free forever and without watermarks.
QR Code Generator
The downloaded images have no watermarks, and the tool can be used for free permanently.
Usage Instructions
- Select the type (URL, text, WiFi, vCard, SMS, email), then enter or paste the content.
- Adjust the size, margin, color, error correction level, as well as styles (shape/positioning points), gradients, logos, frames, etc.
- Choose the PNG or SVG format.
- The QR code will be generated automatically; you can 'Download' or 'Copy' it when it's ready.
- When using a logo or complex styles, it's recommended to increase the error correction level to H and leave enough quiet zones (blank margins).
- When using for printing/display, ensure high contrast between the foreground and background, and avoid using too small sizes and excessive distortion.
Features
- Generated purely on the front - end (no upload)
- Supports PNG and SVG output
- Customizable styles: shape, positioning points, rounded corners, gaps
- Gradients (multiple colors, multiple directions)
- Logo overlay (option to automatically increase the error correction level)
- Frames and strokes (rounded - card style)
- Sharing and clipboard (links/images)
- Multi - language and theme support
What are the Finder Patterns?
The three large squares at the four corners of the QR code are called Finder Patterns, which help the camera quickly locate the position and angle of the QR code for deviation correction and decoding. They usually have a 7×7 module structure (black outer, white inner, and black center) with alternating black and white colors.
- Function: Quick positioning, anti - rotation, and anti - perspective.
- Styles: This tool supports the rendering of Finder Patterns in square, rounded - corner, and “dot style” (select in Style → Finder).
Who invented the QR code?
The QR Code was invented in 1994 by Masahiro Hara, an engineer at Denso Wave in Japan. QR stands for “Quick Response”.
- Motivation for invention: To improve the identification efficiency of the automobile parts production line and break through the limitations of the capacity and reading speed of the one - dimensional code.
- Design inspiration: The black and white Go pieces and matrix patterns inspired the highly robust design of “modular + positioning graphics”.
- Why no patent fee is required: Denso Wave holds the trademark and some patents but explicitly allows free use to promote the popularization of the ecosystem (commercial use is supported without licensing fees).
Standard Specifications and Usage Suggestions
- International Standard: ISO/IEC 18004 (QR Code 2D Symbol Specification), which defines versions, masks, error correction, graphic structures, etc.
- Error Correction Level: Four levels: L/M/Q/H (approximately 7%/15%/25%/30% recoverable). It is recommended to use a higher level when overlaying a Logo.
- Encoded Content: Text, URL, vCard, Wi - Fi, etc. It is recommended to follow the corresponding URI/data format specifications (e.g.,
WIFI:T:WPA;S:SSID;P:PASS;;). - Printing and Display: Ensure the contrast between the foreground and background and the size of the quiet zone; avoid excessive distortion, too - small sizes, and overly dense texture interference.
- Accessibility: In critical situations, it is recommended to provide alternative text/links to avoid using the QR code as the only entry.
Generate QR codes with programming languages
The following are the simplest examples in common languages, suitable for beginners and scaffolding:
// 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 });
# pip install qrcode[pil]
import qrcode
img = qrcode.make('https://example.com')
img.save('qrcode.png')
// 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 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")
}
// 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"));
}
}
// 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();
}
Note: Different libraries have significant differences in the supported styling capabilities. If you need advanced styles (dots, gradients, Finder Pattern styles, frames, etc.), you can generate PNG/SVG directly in this tool and use them.