# QR Code Generator [![Badge License]][License]
*A Library For A Multitude Of Languages.*
---
[![Button Demo]][Demo]
[![Button Website]][Website]
[![Button Languages]][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.*
[![Badge TypeScript]][TypeScript]
[![Badge JavaScript]][Javascript]
[![Badge C++]][C++]
[![Badge C]][C]
[![Badge Python]][Python]
[![Badge Java]][Java]
[![Badge Rust]][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.
#### 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 [![Badge Java]][Java Demo]
While the code below is written in Java, the
ports to other languages are designed with
essentially the same API naming / behavior.
```Java
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 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)
...
}
```
[Website]: https://www.nayuki.io/page/qr-code-generator-library
[Demo]: https://www.nayuki.io/page/qr-code-generator-library#live-demo-javascript
[Languages]: #Languages 'Language Selection'
[Java Demo]: java/QrCodeGeneratorDemo.java 'Java Example'
[License]: LICENSE
[TypeScript]: typescript-javascript 'TypeScript Overview'
[JavaScript]: typescript-javascript 'JavaScript Overview'
[Python]: python 'Python Overview'
[Java]: java 'Java Overview'
[Rust]: rust 'Rust Overview'
[C++]: cpp 'C++ Overview'
[C]: c 'C Overview'
[Badge License]: https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge
[Badge TypeScript]: https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logoColor=white&logo=TypeScript
[Badge JavaScript]: https://img.shields.io/badge/JavaScript-cfbb1b?style=for-the-badge&logoColor=white&logo=JavaScript
[Badge Python]: https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logoColor=white&logo=Python
[Badge Rust]: https://img.shields.io/badge/Rust-f44a00?style=for-the-badge&logoColor=white&logo=Rust
[Badge Java]: https://img.shields.io/badge/Java-c00711?style=for-the-badge&logoColor=white&logo=CoffeeScript
[Badge C++]: https://img.shields.io/badge/C++-00599C?style=for-the-badge&logoColor=white&logo=CPlusPlus
[Badge C]: https://img.shields.io/badge/C-999999?style=for-the-badge&logoColor=white&logo=C
[Button Languages]: https://img.shields.io/badge/Languages-A22846?style=for-the-badge&logoColor=white&logo=ROS
[Button Website]: https://img.shields.io/badge/Website-4298B8?style=for-the-badge&logoColor=white&logo=Apostrophe
[Button Demo]: https://img.shields.io/badge/Demo-006600?style=for-the-badge&logoColor=white&logo=AppleArcade