|
3 years ago | |
---|---|---|
c | 3 years ago | |
cpp | 3 years ago | |
java | 3 years ago | |
java-fast | 3 years ago | |
python | 3 years ago | |
rust | 3 years ago | |
rust-no-heap | 3 years ago | |
typescript-javascript | 3 years ago | |
LICENSE | 3 years ago | |
README.md | 3 years ago |
README.md
QR Code Generator
A Library For A Multitude Of Languages.
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.
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.
Advanced Optional Java 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.
Example 
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)
...
}