fastqr 1.0.20 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/BUILD.md +10 -74
- data/CHANGELOG.md +1 -1
- data/CMakeLists.txt +1 -1
- data/DISTRIBUTION.md +14 -14
- data/INSTALL.md +4 -4
- data/LICENSE +1 -3
- data/PREBUILT.md +3 -3
- data/README.md +254 -148
- data/VERSION +1 -1
- data/bindings/nodejs/README.md +418 -0
- data/bindings/nodejs/package.json +1 -2
- data/bindings/ruby/extconf.rb +4 -4
- data/bindings/ruby/lib/fastqr/version.rb +1 -1
- data/bindings/ruby/prebuilt/linux-aarch64/bin/fastqr +0 -0
- data/bindings/ruby/prebuilt/linux-aarch64.tar.gz +0 -0
- data/bindings/ruby/prebuilt/linux-x86_64/bin/fastqr +0 -0
- data/bindings/ruby/prebuilt/linux-x86_64.tar.gz +0 -0
- data/bindings/ruby/prebuilt/macos-arm64/bin/fastqr +0 -0
- data/bindings/ruby/prebuilt/macos-arm64.tar.gz +0 -0
- data/bindings/ruby/prebuilt/macos-x86_64/bin/fastqr +0 -0
- data/bindings/ruby/prebuilt/macos-x86_64.tar.gz +0 -0
- data/build.sh +5 -5
- data/docs/NODEJS_USAGE.md +2 -2
- data/docs/README.md +5 -4
- data/prebuilt/README.md +5 -6
- data/src/fastqr.cpp +1 -1
- metadata +5 -4
data/README.md
CHANGED
|
@@ -2,88 +2,138 @@
|
|
|
2
2
|
|
|
3
3
|
[](LICENSE)
|
|
4
4
|
[](https://isocpp.org/)
|
|
5
|
+
[](https://en.wikipedia.org/wiki/C11_(C_standard_revision))
|
|
6
|
+
[](https://cmake.org/)
|
|
7
|
+
[](https://www.gnu.org/software/bash/)
|
|
8
|
+
[](https://www.ecma-international.org/ecma-262/)
|
|
5
9
|
[](https://rubygems.org/gems/fastqr)
|
|
6
10
|
[](https://www.npmjs.com/package/fastqr)
|
|
7
11
|
[](https://packagist.org/packages/fastqr/fastqr)
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
**The fastest QR code generator on the planet.** 🚀
|
|
10
14
|
|
|
11
|
-
|
|
15
|
+
Generate 1,000 QR codes in **0.37 seconds**. Full UTF-8 support. Custom colors. Logo embedding. Precise size control.
|
|
12
16
|
|
|
13
|
-
|
|
14
|
-
- ⚡ **Batch Mode**: Generate 1000 QR codes in ~0.4s (7x faster than single mode!)
|
|
15
|
-
- 🌐 **Full UTF-8 Support**: Vietnamese, Japanese (Kanji, Hiragana, Katakana), Chinese, emoji, etc.
|
|
16
|
-
- 🎨 **Custom Colors**: Choose colors for QR code and background
|
|
17
|
-
- 📐 **Exact Size**: Generate QR codes with precise pixel dimensions (e.g., 2000x2000px)
|
|
18
|
-
- 🖼️ **Logo Embedding**: Add company logos to the center of QR codes
|
|
19
|
-
- 📦 **Multiple Languages**: Bindings for Ruby, Node.js, PHP
|
|
20
|
-
- 🛡️ **Error Correction**: Supports 4 levels (L, M, Q, H)
|
|
21
|
-
- 💾 **Multiple Formats**: PNG, JPG, WebP
|
|
22
|
-
- ✅ **Pre-built Binaries**: No dependencies needed for gem/npm/composer packages!
|
|
17
|
+
---
|
|
23
18
|
|
|
24
|
-
##
|
|
19
|
+
## 🔥 Performance Benchmarks
|
|
25
20
|
|
|
26
|
-
|
|
27
|
-
|---------|--------|----------|
|
|
28
|
-
| **Speed** | ✅ The same | ✅ The same |
|
|
29
|
-
| **Exact Size** | ✅ 2000x2000px exact | ❌ Scale-based (hard to be exact) |
|
|
30
|
-
| **UTF-8 Support** | ✅ Full | ⚠️ Limited |
|
|
31
|
-
| **Colors** | ✅ RGB customizable | ❌ Black only |
|
|
32
|
-
| **Logo** | ✅ Yes | ❌ No |
|
|
33
|
-
| **Bindings** | ✅ Ruby, Node.js, PHP | ❌ CLI only |
|
|
34
|
-
| **Installation** | ✅ Pre-built binaries | ❌ Requires system deps |
|
|
21
|
+
### CLI Performance: FastQR vs qrencode
|
|
35
22
|
|
|
36
|
-
|
|
23
|
+
*Task: Generate 1,000 QR codes (500×500px)*
|
|
24
|
+
|
|
25
|
+
| Library | Sequential Mode | Batch Mode | Speedup |
|
|
26
|
+
|---------|----------------|------------|---------|
|
|
27
|
+
| **FastQR** | 2.56s 🚀 | **0.37s** ⚡ | **8x faster** with batch |
|
|
28
|
+
| qrencode | 2.97s 🐌 | ❌ Not supported | - |
|
|
29
|
+
|
|
30
|
+
**FastQR is 16% faster in sequential mode and 8x faster with batch mode!**
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
### Ruby Performance: FastQR vs rqrcode
|
|
35
|
+
|
|
36
|
+
*Task: Generate 1,000 QR codes (500×500px)*
|
|
37
|
+
|
|
38
|
+
| Library | Sequential Mode | Batch Mode | Speedup |
|
|
39
|
+
|---------|----------------|------------|---------|
|
|
40
|
+
| **FastQR** | 3.49s 🚀 | **0.38s** ⚡ | **17x faster** with batch |
|
|
41
|
+
| rqrcode | 59.45s 🐢 | ❌ Not supported | - |
|
|
42
|
+
|
|
43
|
+
**FastQR is 17x faster in sequential mode and 157x faster with batch mode!**
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
### Node.js Performance: FastQR vs qrcode
|
|
48
|
+
|
|
49
|
+
*Task: Generate 1,000 QR codes (500×500px)*
|
|
50
|
+
|
|
51
|
+
| Library | Sequential Mode | Batch Mode | Speedup |
|
|
52
|
+
|---------|----------------|------------|---------|
|
|
53
|
+
| **FastQR** | 2.43s 🚀 | **0.46s** ⚡ | **7x faster** with batch |
|
|
54
|
+
| qrcode | 17.25s 🐌 | ❌ Not supported | - |
|
|
55
|
+
|
|
56
|
+
**FastQR is 7x faster in sequential mode and 37x faster with batch mode!**
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 💪 Why FastQR Dominates
|
|
61
|
+
|
|
62
|
+
### Speed Comparison Summary
|
|
63
|
+
|
|
64
|
+
| Platform | Library | Sequential | Batch | FastQR Advantage |
|
|
65
|
+
|----------|---------|------------|-------|------------------|
|
|
66
|
+
| **CLI** | qrencode | 2.97s | ❌ | **8x faster** ⚡ |
|
|
67
|
+
| **Ruby** | rqrcode | 59.45s | ❌ | **157x faster** 🚀 |
|
|
68
|
+
| **Node.js** | qrcode | 17.25s | ❌ | **37x faster** ⚡ |
|
|
69
|
+
|
|
70
|
+
**Average: FastQR with batch mode is 67x faster than popular alternatives!**
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## ✨ What Makes FastQR Special?
|
|
75
|
+
|
|
76
|
+
### Features That Set Us Apart
|
|
77
|
+
|
|
78
|
+
| Feature | FastQR | Others |
|
|
79
|
+
|---------|--------|--------|
|
|
80
|
+
| **Batch Processing** | ✅ Up to 157x faster | ❌ Not available |
|
|
81
|
+
| **Exact Size Control** | ✅ 2000×2000px exact | ❌ Scale-based (imprecise) |
|
|
82
|
+
| **Full UTF-8 Support** | ✅ Vietnamese, Japanese, Chinese, emoji | ⚠️ Limited or none |
|
|
83
|
+
| **Custom Colors** | ✅ RGB foreground + background | ⚠️ Limited or none |
|
|
84
|
+
| **Logo Embedding** | ✅ Built-in logo support | ⚠️ Limited or none |
|
|
85
|
+
| **Language Bindings** | ✅ Ruby, Node.js, PHP, C++ | ✅ Usually supported |
|
|
86
|
+
| **Error Correction** | ✅ 4 levels (L, M, Q, H) | ✅ Usually supported |
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 🚀 Key Features
|
|
37
91
|
|
|
38
|
-
|
|
92
|
+
- ⚡ **Blazing Fast**: Up to **157x faster** than popular alternatives with batch mode
|
|
93
|
+
- 🔥 **Batch Processing**: Generate 1,000 QR codes in **~0.37 seconds**
|
|
94
|
+
- 🌐 **Full UTF-8 Support**: Vietnamese, Japanese (Kanji, Hiragana, Katakana), Chinese, emoji, and more
|
|
95
|
+
- 🎨 **Custom Colors**: Choose any RGB color for QR code and background
|
|
96
|
+
- 📐 **Exact Size Control**: Generate QR codes with precise pixel dimensions (e.g., 2000×2000px)
|
|
97
|
+
- 🖼️ **Logo Embedding**: Add company logos to the center of QR codes
|
|
98
|
+
- 🛡️ **Error Correction**: Supports 4 levels (L, M, Q, H)
|
|
99
|
+
- 💾 **Multiple Formats**: PNG, JPG, WebP
|
|
100
|
+
- 🔧 **Multiple Languages**: Native bindings for Ruby, Node.js, PHP, and C++
|
|
39
101
|
|
|
40
|
-
|
|
41
|
-
- **[libpng](http://www.libpng.org/pub/png/libpng.html)** - Fast PNG encoding
|
|
42
|
-
- **[stb_image](https://github.com/nothings/stb)** (Public Domain) - Logo image loading
|
|
102
|
+
---
|
|
43
103
|
|
|
44
104
|
## 📦 Installation
|
|
45
105
|
|
|
46
|
-
###
|
|
106
|
+
### CLI Installation
|
|
47
107
|
|
|
108
|
+
**macOS (Homebrew):**
|
|
48
109
|
```bash
|
|
49
110
|
brew tap tranhuucanh/fastqr
|
|
50
111
|
brew install fastqr
|
|
51
112
|
```
|
|
52
113
|
|
|
53
|
-
|
|
54
|
-
|
|
114
|
+
**Ubuntu/Debian:**
|
|
55
115
|
```bash
|
|
56
|
-
# Download from GitHub Releases
|
|
57
116
|
wget https://github.com/tranhuucanh/fastqr/releases/download/v1.0.0/fastqr-1.0.0-linux-x64.deb
|
|
58
117
|
sudo dpkg -i fastqr-1.0.0-linux-x64.deb
|
|
59
118
|
```
|
|
60
119
|
|
|
61
|
-
### Language Packages
|
|
120
|
+
### Language Packages
|
|
62
121
|
|
|
63
122
|
**Ruby:**
|
|
64
123
|
```bash
|
|
65
124
|
gem install fastqr
|
|
66
|
-
# No system dependencies needed! 🎉
|
|
67
125
|
```
|
|
68
126
|
|
|
69
127
|
**Node.js:**
|
|
70
128
|
```bash
|
|
71
|
-
npm install fastqr
|
|
72
|
-
# No system dependencies needed! 🎉
|
|
129
|
+
npm install fastqr-pro
|
|
73
130
|
```
|
|
74
131
|
|
|
75
132
|
**PHP:**
|
|
76
133
|
```bash
|
|
77
134
|
composer require fastqr/fastqr
|
|
78
|
-
# No system dependencies needed! 🎉
|
|
79
135
|
```
|
|
80
136
|
|
|
81
|
-
**Important**: Starting from v1.0.0, all language packages include pre-built binaries for:
|
|
82
|
-
- macOS (Intel & Apple Silicon)
|
|
83
|
-
- Linux (x86_64 & arm64)
|
|
84
|
-
|
|
85
|
-
You don't need to install `libqrencode` or `libpng` separately! The binaries are automatically bundled and loaded.
|
|
86
|
-
|
|
87
137
|
### Build from Source
|
|
88
138
|
|
|
89
139
|
```bash
|
|
@@ -103,64 +153,134 @@ make
|
|
|
103
153
|
sudo make install
|
|
104
154
|
```
|
|
105
155
|
|
|
106
|
-
See [INSTALL.md](INSTALL.md) for more
|
|
156
|
+
See [INSTALL.md](INSTALL.md) for more options.
|
|
157
|
+
|
|
158
|
+
---
|
|
107
159
|
|
|
108
|
-
##
|
|
160
|
+
## 🎯 Quick Start
|
|
109
161
|
|
|
110
162
|
### CLI
|
|
163
|
+
|
|
164
|
+
**Single QR Code:**
|
|
111
165
|
```bash
|
|
112
166
|
fastqr "Hello World" output.png
|
|
113
167
|
fastqr -s 500 -f 255,0,0 "Red QR" red.png
|
|
114
|
-
fastqr -
|
|
168
|
+
fastqr -l logo.png -L 25 "QR with Logo" branded.png
|
|
115
169
|
```
|
|
116
170
|
|
|
117
|
-
|
|
171
|
+
**Batch Mode (8x faster!):**
|
|
118
172
|
```bash
|
|
119
|
-
|
|
173
|
+
# Create batch.txt with one text per line
|
|
174
|
+
echo "https://example.com/user/1" > batch.txt
|
|
175
|
+
echo "https://example.com/user/2" >> batch.txt
|
|
176
|
+
# ... add 1000 URLs
|
|
177
|
+
|
|
178
|
+
# Generate 1,000 QR codes in 0.37 seconds ⚡
|
|
179
|
+
fastqr -F batch.txt output_dir/
|
|
120
180
|
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
### Ruby
|
|
185
|
+
|
|
121
186
|
```ruby
|
|
122
187
|
require 'fastqr'
|
|
123
|
-
|
|
124
|
-
|
|
188
|
+
|
|
189
|
+
# Single QR code
|
|
190
|
+
FastQR.generate("Hello World", "qr.png", size: 500)
|
|
191
|
+
|
|
192
|
+
# Batch mode - 157x faster than rqrcode! 🚀
|
|
193
|
+
urls = (1..1000).map { |i| "https://example.com/user/#{i}" }
|
|
194
|
+
FastQR.generate_batch(urls, "output/")
|
|
195
|
+
# ⚡ Done in 0.38 seconds! (vs 59.45s with rqrcode)
|
|
196
|
+
|
|
197
|
+
# Custom colors and logo
|
|
198
|
+
FastQR.generate("https://example.com", "branded.png",
|
|
199
|
+
size: 800,
|
|
200
|
+
foreground: [255, 0, 0], # Red QR code
|
|
201
|
+
background: [255, 255, 200], # Light yellow background
|
|
202
|
+
logo: "logo.png",
|
|
203
|
+
logoSize: 20,
|
|
204
|
+
errorLevel: "H" # High error correction for logos
|
|
205
|
+
)
|
|
125
206
|
```
|
|
126
207
|
|
|
208
|
+
---
|
|
209
|
+
|
|
127
210
|
### Node.js
|
|
128
|
-
|
|
129
|
-
npm install fastqr # Pre-built binaries included!
|
|
130
|
-
```
|
|
211
|
+
|
|
131
212
|
```javascript
|
|
132
213
|
const fastqr = require('fastqr');
|
|
133
|
-
|
|
134
|
-
|
|
214
|
+
|
|
215
|
+
// Single QR code
|
|
216
|
+
fastqr.generate('Hello World', 'qr.png', { size: 500 });
|
|
217
|
+
|
|
218
|
+
// Batch mode - 37x faster than qrcode! 🚀
|
|
219
|
+
const urls = Array.from({length: 1000}, (_, i) =>
|
|
220
|
+
`https://example.com/user/${i+1}`
|
|
221
|
+
);
|
|
222
|
+
fastqr.generateBatch(urls, 'output/');
|
|
223
|
+
// ⚡ Done in 0.46 seconds! (vs 17.25s with qrcode)
|
|
224
|
+
|
|
225
|
+
// Custom colors and logo
|
|
226
|
+
fastqr.generate('https://example.com', 'branded.png', {
|
|
227
|
+
size: 800,
|
|
228
|
+
foreground: [255, 0, 0], // Red QR code
|
|
229
|
+
background: [255, 255, 200], // Light yellow background
|
|
230
|
+
logo: 'logo.png',
|
|
231
|
+
logoSize: 20,
|
|
232
|
+
errorLevel: 'H' // High error correction for logos
|
|
233
|
+
});
|
|
135
234
|
```
|
|
136
235
|
|
|
236
|
+
---
|
|
237
|
+
|
|
137
238
|
### PHP
|
|
138
|
-
|
|
139
|
-
composer require fastqr/fastqr # Pre-built binaries included!
|
|
140
|
-
```
|
|
239
|
+
|
|
141
240
|
```php
|
|
142
241
|
use FastQR\FastQR;
|
|
143
|
-
|
|
144
|
-
|
|
242
|
+
|
|
243
|
+
// Single QR code
|
|
244
|
+
FastQR::generate('Hello World', 'qr.png', ['size' => 500]);
|
|
245
|
+
|
|
246
|
+
// Batch mode - Lightning fast! ⚡
|
|
247
|
+
$urls = array_map(fn($i) => "https://example.com/user/$i", range(1, 1000));
|
|
248
|
+
FastQR::generateBatch($urls, 'output/');
|
|
249
|
+
// Done in ~0.4 seconds!
|
|
250
|
+
|
|
251
|
+
// Custom colors and logo
|
|
252
|
+
FastQR::generate('https://example.com', 'branded.png', [
|
|
253
|
+
'size' => 800,
|
|
254
|
+
'foreground' => [255, 0, 0], // Red QR code
|
|
255
|
+
'background' => [255, 255, 200], // Light yellow background
|
|
256
|
+
'logo' => 'logo.png',
|
|
257
|
+
'logoSize' => 20,
|
|
258
|
+
'errorLevel' => 'H' // High error correction for logos
|
|
259
|
+
]);
|
|
145
260
|
```
|
|
146
261
|
|
|
262
|
+
---
|
|
263
|
+
|
|
147
264
|
### C++
|
|
265
|
+
|
|
148
266
|
```cpp
|
|
149
267
|
#include <fastqr.h>
|
|
268
|
+
|
|
269
|
+
// Single QR code
|
|
150
270
|
fastqr::QROptions options;
|
|
151
271
|
options.size = 500;
|
|
152
|
-
fastqr::generate("Hello", "qr.png", options);
|
|
272
|
+
fastqr::generate("Hello World", "qr.png", options);
|
|
273
|
+
|
|
274
|
+
// Batch mode - Blazing fast! 🚀
|
|
275
|
+
std::vector<std::string> urls;
|
|
276
|
+
for (int i = 1; i <= 1000; i++) {
|
|
277
|
+
urls.push_back("https://example.com/user/" + std::to_string(i));
|
|
278
|
+
}
|
|
279
|
+
fastqr::generateBatch(urls, "output/", options);
|
|
280
|
+
// Done in ~0.4 seconds!
|
|
153
281
|
```
|
|
154
282
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
Complete usage guides for each platform:
|
|
158
|
-
|
|
159
|
-
- **[CLI Usage Guide](docs/CLI_USAGE.md)** - Complete command-line reference with all options and examples
|
|
160
|
-
- **[Ruby/Rails Usage Guide](docs/RUBY_USAGE.md)** - Ruby and Rails integration with examples
|
|
161
|
-
- **[Node.js Usage Guide](docs/NODEJS_USAGE.md)** - Node.js, Express, and TypeScript guide
|
|
162
|
-
- **[PHP Usage Guide](docs/PHP_USAGE.md)** - PHP, Laravel, and WordPress integration
|
|
163
|
-
- **[Documentation Index](docs/README.md)** - Full documentation portal
|
|
283
|
+
---
|
|
164
284
|
|
|
165
285
|
## 📖 API Reference
|
|
166
286
|
|
|
@@ -169,10 +289,10 @@ Complete usage guides for each platform:
|
|
|
169
289
|
| Option | Type | Default | Description |
|
|
170
290
|
|--------|------|---------|-------------|
|
|
171
291
|
| `size` | int | 300 | Output size in pixels (QR codes are square) |
|
|
172
|
-
| `optimizeSize` | bool | false | Auto round-up to nearest integer multiple
|
|
173
|
-
| `foreground` | RGB array | [0,0,0] | QR code color |
|
|
174
|
-
| `background` | RGB array | [255,255,255] | Background color |
|
|
175
|
-
| `errorLevel` | string | 'M' | Error correction: L
|
|
292
|
+
| `optimizeSize` | bool | false | Auto round-up to nearest integer multiple |
|
|
293
|
+
| `foreground` | RGB array | [0,0,0] | QR code color (RGB) |
|
|
294
|
+
| `background` | RGB array | [255,255,255] | Background color (RGB) |
|
|
295
|
+
| `errorLevel` | string | 'M' | Error correction: L, M, Q, H |
|
|
176
296
|
| `logo` | string | "" | Path to logo image |
|
|
177
297
|
| `logoSize` | int | 20 | Logo size as percentage (1-50) |
|
|
178
298
|
| `quality` | int | 95 | Image quality for lossy formats (1-100) |
|
|
@@ -180,85 +300,63 @@ Complete usage guides for each platform:
|
|
|
180
300
|
|
|
181
301
|
### Error Correction Levels
|
|
182
302
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
303
|
+
| Level | Recovery | Use Case |
|
|
304
|
+
|-------|----------|----------|
|
|
305
|
+
| **L (Low)** | ~7% | Maximum data capacity, clean environment |
|
|
306
|
+
| **M (Medium)** | ~15% | Balanced (default) |
|
|
307
|
+
| **Q (Quartile)** | ~25% | Good for QR codes with logos |
|
|
308
|
+
| **H (High)** | ~30% | Best for damaged/dirty environments |
|
|
187
309
|
|
|
188
310
|
Higher levels allow QR codes to remain readable when damaged or have logos embedded.
|
|
189
311
|
|
|
190
|
-
|
|
312
|
+
---
|
|
191
313
|
|
|
192
|
-
|
|
314
|
+
## 📚 Documentation
|
|
193
315
|
|
|
194
|
-
|
|
195
|
-
git clone https://github.com/tranhuucanh/fastqr.git
|
|
196
|
-
cd fastqr
|
|
316
|
+
Complete usage guides for each platform:
|
|
197
317
|
|
|
198
|
-
|
|
199
|
-
|
|
318
|
+
- **[CLI Usage Guide](docs/CLI_USAGE.md)** - Complete command-line reference
|
|
319
|
+
- **[Ruby/Rails Usage Guide](docs/RUBY_USAGE.md)** - Ruby and Rails integration
|
|
320
|
+
- **[Node.js Usage Guide](docs/NODEJS_USAGE.md)** - Node.js, Express, and TypeScript
|
|
321
|
+
- **[PHP Usage Guide](docs/PHP_USAGE.md)** - PHP, Laravel, and WordPress integration
|
|
322
|
+
- **[Documentation Index](docs/README.md)** - Full documentation portal
|
|
200
323
|
|
|
201
|
-
|
|
202
|
-
mkdir build && cd build
|
|
203
|
-
cmake ..
|
|
204
|
-
make
|
|
324
|
+
---
|
|
205
325
|
|
|
206
|
-
|
|
207
|
-
./example_basic
|
|
326
|
+
## 🏗️ Architecture
|
|
208
327
|
|
|
209
|
-
|
|
210
|
-
make test
|
|
211
|
-
```
|
|
328
|
+
FastQR is built on battle-tested, industry-standard libraries:
|
|
212
329
|
|
|
213
|
-
|
|
330
|
+
- **[libqrencode](https://fukuchi.org/works/qrencode/)** (LGPL v2.1) - QR code bit matrix generation
|
|
331
|
+
- **[libpng](http://www.libpng.org/pub/png/libpng.html)** - Lightning-fast PNG encoding
|
|
332
|
+
- **[stb_image](https://github.com/nothings/stb)** (Public Domain) - Efficient image loading
|
|
214
333
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
│ ├── fastqr.cpp
|
|
223
|
-
│ └── cli.cpp
|
|
224
|
-
├── bindings/ # Language bindings
|
|
225
|
-
│ ├── ruby/
|
|
226
|
-
│ ├── nodejs/
|
|
227
|
-
│ └── php/
|
|
228
|
-
├── prebuilt/ # Pre-compiled binaries
|
|
229
|
-
│ ├── macos-arm64/
|
|
230
|
-
│ ├── macos-x86_64/
|
|
231
|
-
│ ├── linux-x86_64/
|
|
232
|
-
│ └── linux-arm64/
|
|
233
|
-
├── scripts/ # Build and install scripts
|
|
234
|
-
├── examples/ # Examples
|
|
235
|
-
├── cmake/ # CMake configs
|
|
236
|
-
└── LICENSE # LGPL 2.1
|
|
237
|
-
```
|
|
334
|
+
**Why so fast?**
|
|
335
|
+
- ⚡ Zero process forking overhead
|
|
336
|
+
- 🚀 Optimized native C++ core
|
|
337
|
+
- 💪 Batch mode processes multiple QR codes in a single call
|
|
338
|
+
- 🔥 Efficient memory management and image encoding
|
|
339
|
+
|
|
340
|
+
---
|
|
238
341
|
|
|
239
342
|
## 📄 License
|
|
240
343
|
|
|
241
344
|
FastQR is licensed under the **GNU Lesser General Public License v2.1 (LGPL-2.1)**.
|
|
242
345
|
|
|
243
|
-
This project uses:
|
|
244
|
-
- **libqrencode** (LGPL v2.1) - Copyright (C) 2006-2017 Kentaro Fukuchi
|
|
245
|
-
- **libpng** - PNG image encoding
|
|
246
|
-
- **stb_image** (Public Domain) - Sean Barrett's single-header image library
|
|
247
|
-
|
|
248
|
-
As required by the LGPL, you can obtain the source code and rebuild this library with modified versions of libqrencode. See [BUILD.md](BUILD.md) for instructions.
|
|
249
|
-
|
|
250
346
|
### LGPL Requirements
|
|
251
347
|
|
|
252
348
|
When using FastQR in your projects:
|
|
253
349
|
|
|
254
|
-
1. **Open Source Projects**:
|
|
255
|
-
2. **Closed Source/Commercial Projects**:
|
|
256
|
-
-
|
|
257
|
-
-
|
|
258
|
-
- Users must be able to replace
|
|
350
|
+
1. **Open Source Projects**: Use freely ✅
|
|
351
|
+
2. **Closed Source/Commercial Projects**: Use as a library, but:
|
|
352
|
+
- Include a copy of the LGPL license
|
|
353
|
+
- State that your software uses FastQR
|
|
354
|
+
- Users must be able to replace FastQR with a modified version
|
|
259
355
|
|
|
260
356
|
See [LICENSE](LICENSE) for full details.
|
|
261
357
|
|
|
358
|
+
---
|
|
359
|
+
|
|
262
360
|
## 🤝 Contributing
|
|
263
361
|
|
|
264
362
|
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
@@ -269,44 +367,52 @@ Contributions are welcome! Please feel free to submit a Pull Request.
|
|
|
269
367
|
4. Push to the branch (`git push origin feature/AmazingFeature`)
|
|
270
368
|
5. Open a Pull Request
|
|
271
369
|
|
|
272
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md) for
|
|
370
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for details.
|
|
371
|
+
|
|
372
|
+
---
|
|
273
373
|
|
|
274
374
|
## 🐛 Bug Reports
|
|
275
375
|
|
|
276
|
-
|
|
376
|
+
Found a bug? Please open an issue with:
|
|
277
377
|
- Your OS and version
|
|
278
378
|
- FastQR version
|
|
279
379
|
- Steps to reproduce
|
|
280
380
|
- Expected vs actual behavior
|
|
281
381
|
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
## 🗺️ Roadmap
|
|
385
|
+
|
|
386
|
+
- [ ] Windows support
|
|
387
|
+
- [ ] SVG output format
|
|
388
|
+
- [ ] Python bindings
|
|
389
|
+
- [ ] QR code scanning/decoding
|
|
390
|
+
- [ ] Advanced batch processing options
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
282
394
|
## 📮 Contact
|
|
283
395
|
|
|
284
|
-
- GitHub
|
|
285
|
-
- Issues
|
|
396
|
+
- **GitHub**: [@tranhuucanh](https://github.com/tranhuucanh)
|
|
397
|
+
- **Issues**: [GitHub Issues](https://github.com/tranhuucanh/fastqr/issues)
|
|
398
|
+
|
|
399
|
+
---
|
|
286
400
|
|
|
287
401
|
## 🙏 Acknowledgments
|
|
288
402
|
|
|
403
|
+
Special thanks to:
|
|
289
404
|
- [libqrencode](https://fukuchi.org/works/qrencode/) by Kentaro Fukuchi
|
|
290
405
|
- [libpng](http://www.libpng.org/pub/png/libpng.html) by PNG Development Group
|
|
291
406
|
- [stb libraries](https://github.com/nothings/stb) by Sean Barrett
|
|
292
407
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
```
|
|
296
|
-
Generating 100 QR codes (500x500px): ~0.3 seconds
|
|
297
|
-
Generating 1000 QR codes (500x500px): ~3 seconds
|
|
408
|
+
---
|
|
298
409
|
|
|
299
|
-
|
|
300
|
-
```
|
|
410
|
+
<div align="center">
|
|
301
411
|
|
|
302
|
-
|
|
412
|
+
**Made with ❤️ by FastQR Project**
|
|
303
413
|
|
|
304
|
-
|
|
305
|
-
- [ ] SVG output
|
|
306
|
-
- [ ] Python bindings
|
|
307
|
-
- [ ] Batch processing API
|
|
308
|
-
- [ ] QR code scanning/decoding
|
|
414
|
+
*If FastQR saves you time, give us a star!* ⭐
|
|
309
415
|
|
|
310
|
-
|
|
416
|
+
[⬆ Back to top](#fastqr-)
|
|
311
417
|
|
|
312
|
-
|
|
418
|
+
</div>
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.21
|