A Library For A Multitude Of Languages.
This project aims to be the best, clearest QR
Code generator library in multiple languages.
- Flexible options
- Absolute correctness
- Compact implementation size
- Good documentation comments
The library is available in multiple languages
with mostly the same amount of functionality.
-
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.
-
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.
-
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.
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)
...
}