Go to file
ElectronicsArchiver 4ebbd619c7 Formatted Instruction 3 years ago
c Rewrote comments for top-level QR-encoding functions in C, to correspond better to other language ports. 3 years ago
cpp - In the project (top-level) readme file, kept one language's code example and moved all others out to language-specific readme files. 3 years ago
java Updated package version numbers. 3 years ago
java-fast Added a comment in Java QrSegmentAdvanced.makeSegmentsOptimally() functions to be consistent with QrCode.encodeSegments(). 3 years ago
python Updated package version numbers. 3 years ago
rust Updated package version numbers. 3 years ago
rust-no-heap Updated package version numbers. 3 years ago
typescript-javascript Changed to standard error classes in TypeScript code. 3 years ago
LICENSE Moved License Into License File 3 years ago
README.md Formatted Instruction 3 years ago

README.md

QR Code Generator

A Library For A Multitude Of Languages.



Button Demo Button Website



Introduction

This project aims to be the best, clearest QR
Code generator library in multiple languages.

Primary Goals

  • Flexible options
  • Absolute correctness

Secondary Goals

  • Compact implementation size
  • Good documentation comments


Languages

The library is available in multiple languages
with mostly the same amount of functionality.


Badge TypeScript Badge JavaScript

Badge C++ Badge C

Badge Python

Badge Java

Badge Rust



Features

Core

  • Significantly shorter code but more documentation
    comments compared to competing libraries.

  • Supports encoding all 40 versions (sizes) and all 4 error
    correction levels, as per the QR Code Model 2 standard.

  • Output format: Raw modules/pixels of the QR symbol

  • Detects finder-like penalty patterns more
    accurately than other implementations.

  • Encodes numeric and special-alphanumeric
    strings into less space than general text.


Parameters

  • Minimum / Maximum allowed version number can be
    specified, which the library will use to automatically
    choose smallest version in the range that fits the data.

  • User can specify mask pattern manually, otherwise
    library will automatically evaluate all 8 masks and
    select the optimal one.

  • User can specify absolute error correction level, or
    allow the library to boost it if it doesn't increase the
    version number

  • User can create a list of data segments
    manually and add ECI segments.


AdvancedOptionalJava Only

  • Encodes Japanese Unicode text in kanji
    mode to save a lot of space compared
    to UTF-8 bytes.

  • Computes optimal segment mode switching
    for text with mixed numeric / alphanumeric
    / general / kanji parts.


Check the project website for more information.



ExampleBadge Java

While the code below is written in Java, the
ports to other languages are designed with
essentially the same API naming / behavior.


import java.awt.image.BufferedImage;
import java.util.List;
import java.io.File;

import javax.imageio.ImageIO;
import io.nayuki.qrcodegen.*;


//  Simple Operation

QrCode codeA = QrCode.encodeText("Hello, world!",QrCode.Ecc.MEDIUM);
BufferedImage image = toImage(codeA,4,10);
ImageIO.write(image,"png",new File("qr-code.png"));


//  Manual Operation

List<QrSegment> segments = QrSegment.makeSegments("3141592653589793238462643383");
QrCode codeB = QrCode.encodeSegments(segments,QrCode.Ecc.HIGH,5,5,2,false);

for(int y = 0;y < codeB.size;y++)
    for(int x = 0;x < codeB.size;x++){
        ...
        paint codeB.getModule(x,y)
        ...
    }