- Notifications
You must be signed in to change notification settings - Fork6
A portable QR and Barcode generation / manipulation library written in C.
License
kikuchan/libqrean
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A portable QR and Barcode generation / manipulation library written inC.
Wasm (thanks @taisukef)
% qrean -t rmqr Hello█████████████████████████████████ ▄▄▄▄▄ █ ▀ █ █ █▄█ █▄█▄█▄▄ ████ █ █ ██▄ ▄█▀▄▄ ▄▄ ▀█ ▄████ █▄▄▄█ ██▀▀▀▄█▄▄█▀█▄ █▀▀▄████▄▄▄▄▄▄▄█▄██ ▄ ▀▄█▀▀█▀▄ ▄▄▄ ████ ▄▀▀ ▀▄ ▄█▄███▀▀▄▄▀▄▀▄ █▄█ ████▄▄▄█▄█▄█▄█▄█▄█▄█▄█▄█▄█▄▄▄▄▄██▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀% qrean -t mQR Hello > mqr.png # CAVEAT: Outputs PNG stream for not a tty% qrean -o qr.png Hello # You can also specify output filename% qrean -hUsage: qrean [OPTION]... [STRING]Generate QR/Barcode image General options: -h Display this help -o FILENAME Image save as FILENAME -i FILENAME Data read from FILENAME -f FORMAT Output format, one of the following: TXT (default for tty) PNG (default for non tty) PPM -t CODE Output CODE, one of the following: QR, mQR, rMQR, tQR EAN13, EAN8, UPCA CODE39, CODE93 ITF, NW7 -p PADDING Comma-separated PADDING for the code QR family specific options: -v VERSION Use VERSION, one of the following: 1 ... 40 (for QR) M1 ... M4 (for mQR) R7x43 ... R17x139 (for rMQR) R{H}x{W} H: 7, 9, 11, 13, 15, 17 W: 43, 59, 77, 99, 139 tQR (for tQR) -m MASK Use MASK pattern, one of the following: 0 ... 7 (for QR) 0 ... 4 (for mQR) -l LEVEL Use ecc LEVEL, one of the following: L, M, Q, H (for QR) L, M, Q (for mQR) M, H (for rMQR)
% qrean-detect qr.png # The source file must be a PNG file so farHello%
qrean_tqrean=create_qrean(QREAN_CODE_TYPE_QR);qrean_write_string(&qrean,"Hello, world",QREAN_DATA_TYPE_AUTO);size_tlen=qrean_read_bitmap(&qrean,buffer,sizeof(buffer),8);fwrite(buffer,1,len,stdout);
qrean_write_pixel(&qrean,qrean.canvas.symbol_width-1,qrean.canvas.symbol_height-1,0);qrean_fix_errors(&qrean);qrean_read_string(&qrean,buffer,sizeof(buffer));printf("%s\n",buffer);
qrean_t*qrean=new_qrean(QREAN_CODE_TYPE_QR);qrean_set_qr_version(qrean,QR_VERSION_3);qrean_set_qr_errorlevel(qrean,QR_ERRORLEVEL_M);qrean_set_qr_maskpattern(qrean,QR_MASKPATTERN_7);qrean_write_qr_finder_pattern(qrean);qrean_write_qr_alignment_pattern(qrean);qrean_write_qr_timing_pattern(qrean);qrean_write_qr_format_info(qrean);qrean_write_qr_version_info(qrean);
Seeexamples/ directory for working examples.
import{Qrean}from'qrean';constqrean=newQrean();constimg=awaitqrean.encode('Hello, world');console.log(img);// {// width: 116,// height: 116,// data: Uint8ClampedArray(53824) [// :const{ detected}=awaitqrean.detect(img);console.log(detected[0].text);// Hello, world
It requires Wasm to run, but don't worry, most engines support it; Node, Deno, Bun and browsers.
- Windows
- Download fromRelease Page
- UNIX-like systems (Linux / macOS / *BSD)
- Just
make install
- Just
% npm install qrean
Take a look atsrc/ and include (or copy) them!
As you can see, you can take control.I love QR and Barcodes.
The core (encode/decode) doesn't rely onmalloc()
for portability. It uses a stack instead of a heap, but you can still usenew_qrean
for example if you prefer.
You can also configure a callback to draw a pixel directly on a screen for example.
type | encode | decode | detect |
---|---|---|---|
QR | ✓ | ✓ | ✓ |
mQR | ✓ | ✓ | ✓ |
rMQR | ✓ | ✓ | ✓ |
tQR | ✓ | ✓ | ✓ |
UPCA / EAN13 / EAN8 | ✓ | ✓ | ✓ |
CODE39 | ✓ | ✓ | ✓ |
CODE93 | ✓ | ✓ | ✓ |
NW7 | ✓ | ✓ | ✓ |
ITF | ✓ | ✓ | ✓ |
About
A portable QR and Barcode generation / manipulation library written in C.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors3
Uh oh!
There was an error while loading.Please reload this page.