@qr-platform/qr-code.js 0.8.17
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.
- package/.github/workflows/publish.yml +18 -0
- package/CHANGELOG.md +233 -0
- package/LICENSE.md +77 -0
- package/README.md +188 -0
- package/docs/advanced-examples.md +523 -0
- package/docs/api-reference-guide.md +254 -0
- package/docs/documentation.md +1592 -0
- package/docs/examples.md +322 -0
- package/docs/license-management.md +501 -0
- package/docs/typescript-types-definitions.md +372 -0
- package/docs/usage-guide.md +622 -0
- package/lib/core/qr-code-js.d.ts +48 -0
- package/lib/core/qr-constant.d.ts +9 -0
- package/lib/core/qr-options-validation.d.ts +13 -0
- package/lib/core/qr-svg.d.ts +76 -0
- package/lib/core/qr-templates.d.ts +6 -0
- package/lib/figures/corner-dot.d.ts +24 -0
- package/lib/figures/corner-square.d.ts +24 -0
- package/lib/figures/dot.d.ts +31 -0
- package/lib/index.d.ts +52 -0
- package/lib/lib/image/GIFImage.d.ts +19 -0
- package/lib/lib/io/Base64.d.ts +10 -0
- package/lib/lib/io/Base64DecodeInputStream.d.ts +15 -0
- package/lib/lib/io/Base64EncodeOutputStream.d.ts +17 -0
- package/lib/lib/io/ByteArrayInputStream.d.ts +12 -0
- package/lib/lib/io/ByteArrayOutputStream.d.ts +12 -0
- package/lib/lib/io/InputStream.d.ts +10 -0
- package/lib/lib/io/OutputStream.d.ts +12 -0
- package/lib/lib/qr-code.d.ts +5 -0
- package/lib/lib/qrcode/BitBuffer.d.ts +11 -0
- package/lib/lib/qrcode/ErrorCorrectLevel.d.ts +23 -0
- package/lib/lib/qrcode/MaskPattern.d.ts +39 -0
- package/lib/lib/qrcode/Mode.d.ts +23 -0
- package/lib/lib/qrcode/Polynomial.d.ts +15 -0
- package/lib/lib/qrcode/QR8BitByte.d.ts +13 -0
- package/lib/lib/qrcode/QRAlphaNum.d.ts +13 -0
- package/lib/lib/qrcode/QRCode.d.ts +22 -0
- package/lib/lib/qrcode/QRCodeMinimal.d.ts +58 -0
- package/lib/lib/qrcode/QRData.d.ts +17 -0
- package/lib/lib/qrcode/QRKanji.d.ts +13 -0
- package/lib/lib/qrcode/QRMath.d.ts +13 -0
- package/lib/lib/qrcode/QRNumber.d.ts +14 -0
- package/lib/lib/qrcode/QRUtil.d.ts +25 -0
- package/lib/lib/qrcode/RSBlock.d.ts +16 -0
- package/lib/lib/text/createStringToBytes.d.ts +9 -0
- package/lib/lib/text/stringToBytes_SJIS.d.ts +8 -0
- package/lib/lib/text/stringToBytes_UTF8.d.ts +7 -0
- package/lib/lib/zbar-wasm/index.d.ts +1 -0
- package/lib/lib/zxing-js/src/browser/BrowserCodeReader.d.ts +410 -0
- package/lib/lib/zxing-js/src/browser/BrowserQRCodeReader.d.ts +29 -0
- package/lib/lib/zxing-js/src/browser/BrowserQRCodeSvgWriter.d.ts +46 -0
- package/lib/lib/zxing-js/src/browser/BrowserSvgCodeWriter.d.ts +49 -0
- package/lib/lib/zxing-js/src/browser/DecodeContinuouslyCallback.d.ts +6 -0
- package/lib/lib/zxing-js/src/browser/HTMLCanvasElementLuminanceSource.d.ts +27 -0
- package/lib/lib/zxing-js/src/browser/HTMLVisualMediaElement.d.ts +4 -0
- package/lib/lib/zxing-js/src/browser/VideoInputDevice.d.ts +22 -0
- package/lib/lib/zxing-js/src/browser.d.ts +3 -0
- package/lib/lib/zxing-js/src/core/ArgumentException.d.ts +7 -0
- package/lib/lib/zxing-js/src/core/ArithmeticException.d.ts +7 -0
- package/lib/lib/zxing-js/src/core/ArrayIndexOutOfBoundsException.d.ts +10 -0
- package/lib/lib/zxing-js/src/core/BarcodeFormat.d.ts +42 -0
- package/lib/lib/zxing-js/src/core/Binarizer.d.ts +53 -0
- package/lib/lib/zxing-js/src/core/BinaryBitmap.d.ts +78 -0
- package/lib/lib/zxing-js/src/core/ChecksumException.d.ts +8 -0
- package/lib/lib/zxing-js/src/core/DecodeHintType.d.ts +91 -0
- package/lib/lib/zxing-js/src/core/Dimension.d.ts +13 -0
- package/lib/lib/zxing-js/src/core/EncodeHintType.d.ts +99 -0
- package/lib/lib/zxing-js/src/core/Exception.d.ts +17 -0
- package/lib/lib/zxing-js/src/core/FormatException.d.ts +8 -0
- package/lib/lib/zxing-js/src/core/HighContrastLuminanceSource.d.ts +27 -0
- package/lib/lib/zxing-js/src/core/IllegalArgumentException.d.ts +7 -0
- package/lib/lib/zxing-js/src/core/IllegalStateException.d.ts +7 -0
- package/lib/lib/zxing-js/src/core/IndexOutOfBoundsException.d.ts +7 -0
- package/lib/lib/zxing-js/src/core/InvertedLuminanceSource.d.ts +22 -0
- package/lib/lib/zxing-js/src/core/LuminanceSource.d.ts +84 -0
- package/lib/lib/zxing-js/src/core/NodeLuminanceSource.d.ts +36 -0
- package/lib/lib/zxing-js/src/core/NotFoundException.d.ts +8 -0
- package/lib/lib/zxing-js/src/core/NullPointerException.d.ts +7 -0
- package/lib/lib/zxing-js/src/core/OutOfMemoryError.d.ts +6 -0
- package/lib/lib/zxing-js/src/core/PlanarYUVLuminanceSource.d.ts +35 -0
- package/lib/lib/zxing-js/src/core/RGBLuminanceSource.d.ts +21 -0
- package/lib/lib/zxing-js/src/core/Reader.d.ts +49 -0
- package/lib/lib/zxing-js/src/core/ReaderException.d.ts +7 -0
- package/lib/lib/zxing-js/src/core/ReedSolomonException.d.ts +7 -0
- package/lib/lib/zxing-js/src/core/Result.d.ts +52 -0
- package/lib/lib/zxing-js/src/core/ResultMetadataType.d.ts +68 -0
- package/lib/lib/zxing-js/src/core/ResultPoint.d.ts +34 -0
- package/lib/lib/zxing-js/src/core/ResultPointCallback.d.ts +11 -0
- package/lib/lib/zxing-js/src/core/UniversalLuminanceSource.d.ts +46 -0
- package/lib/lib/zxing-js/src/core/UnsupportedOperationException.d.ts +7 -0
- package/lib/lib/zxing-js/src/core/Writer.d.ts +30 -0
- package/lib/lib/zxing-js/src/core/WriterException.d.ts +7 -0
- package/lib/lib/zxing-js/src/core/common/BitArray.d.ts +111 -0
- package/lib/lib/zxing-js/src/core/common/BitMatrix.d.ts +98 -0
- package/lib/lib/zxing-js/src/core/common/BitSource.d.ts +38 -0
- package/lib/lib/zxing-js/src/core/common/CharacterSetECI.d.ts +89 -0
- package/lib/lib/zxing-js/src/core/common/DecoderResult.d.ts +64 -0
- package/lib/lib/zxing-js/src/core/common/DefaultGridSampler.d.ts +10 -0
- package/lib/lib/zxing-js/src/core/common/DetectorResult.d.ts +16 -0
- package/lib/lib/zxing-js/src/core/common/ECIEncoderSet.d.ts +37 -0
- package/lib/lib/zxing-js/src/core/common/ECIInput.d.ts +79 -0
- package/lib/lib/zxing-js/src/core/common/GlobalHistogramBinarizer.d.ts +29 -0
- package/lib/lib/zxing-js/src/core/common/GridSampler.d.ts +36 -0
- package/lib/lib/zxing-js/src/core/common/GridSamplerInstance.d.ts +18 -0
- package/lib/lib/zxing-js/src/core/common/HybridBinarizer.d.ts +54 -0
- package/lib/lib/zxing-js/src/core/common/MinimalECIInput.d.ts +123 -0
- package/lib/lib/zxing-js/src/core/common/PerspectiveTransform.d.ts +26 -0
- package/lib/lib/zxing-js/src/core/common/StringUtils.d.ts +48 -0
- package/lib/lib/zxing-js/src/core/common/detector/CornerDetector.d.ts +35 -0
- package/lib/lib/zxing-js/src/core/common/detector/MathUtils.d.ts +36 -0
- package/lib/lib/zxing-js/src/core/common/detector/WhiteRectangleDetector.d.ts +71 -0
- package/lib/lib/zxing-js/src/core/common/reedsolomon/AbstractGenericGF.d.ts +34 -0
- package/lib/lib/zxing-js/src/core/common/reedsolomon/AbstractGenericGFPoly.d.ts +36 -0
- package/lib/lib/zxing-js/src/core/common/reedsolomon/GenericGF.d.ts +58 -0
- package/lib/lib/zxing-js/src/core/common/reedsolomon/GenericGFPoly.d.ts +47 -0
- package/lib/lib/zxing-js/src/core/common/reedsolomon/ReedSolomonDecoder.d.ts +40 -0
- package/lib/lib/zxing-js/src/core/common/reedsolomon/ReedSolomonEncoder.d.ts +41 -0
- package/lib/lib/zxing-js/src/core/qrcode/QRCodeReader.d.ts +35 -0
- package/lib/lib/zxing-js/src/core/qrcode/QRCodeWriter.d.ts +13 -0
- package/lib/lib/zxing-js/src/core/qrcode/decoder/BitMatrixParser.d.ts +58 -0
- package/lib/lib/zxing-js/src/core/qrcode/decoder/DataBlock.d.ts +28 -0
- package/lib/lib/zxing-js/src/core/qrcode/decoder/DataMask.d.ts +36 -0
- package/lib/lib/zxing-js/src/core/qrcode/decoder/DecodedBitStreamParser.d.ts +30 -0
- package/lib/lib/zxing-js/src/core/qrcode/decoder/Decoder.d.ts +44 -0
- package/lib/lib/zxing-js/src/core/qrcode/decoder/ECB.d.ts +12 -0
- package/lib/lib/zxing-js/src/core/qrcode/decoder/ECBlocks.d.ts +16 -0
- package/lib/lib/zxing-js/src/core/qrcode/decoder/ErrorCorrectionLevel.d.ts +38 -0
- package/lib/lib/zxing-js/src/core/qrcode/decoder/FormatInformation.d.ts +33 -0
- package/lib/lib/zxing-js/src/core/qrcode/decoder/Mode.d.ts +56 -0
- package/lib/lib/zxing-js/src/core/qrcode/decoder/QRCodeDecoderMetaData.d.ts +21 -0
- package/lib/lib/zxing-js/src/core/qrcode/decoder/Version.d.ts +44 -0
- package/lib/lib/zxing-js/src/core/qrcode/detector/AlignmentPattern.d.ts +21 -0
- package/lib/lib/zxing-js/src/core/qrcode/detector/AlignmentPatternFinder.d.ts +82 -0
- package/lib/lib/zxing-js/src/core/qrcode/detector/Detector.d.ts +87 -0
- package/lib/lib/zxing-js/src/core/qrcode/detector/FinderPattern.d.ts +26 -0
- package/lib/lib/zxing-js/src/core/qrcode/detector/FinderPatternFinder.d.ts +114 -0
- package/lib/lib/zxing-js/src/core/qrcode/detector/FinderPatternInfo.d.ts +16 -0
- package/lib/lib/zxing-js/src/core/qrcode/encoder/BlockPair.d.ts +7 -0
- package/lib/lib/zxing-js/src/core/qrcode/encoder/ByteMatrix.d.ts +24 -0
- package/lib/lib/zxing-js/src/core/qrcode/encoder/Encoder.d.ts +85 -0
- package/lib/lib/zxing-js/src/core/qrcode/encoder/MaskUtil.d.ts +47 -0
- package/lib/lib/zxing-js/src/core/qrcode/encoder/MatrixUtil.d.ts +37 -0
- package/lib/lib/zxing-js/src/core/qrcode/encoder/QRCode.d.ts +29 -0
- package/lib/lib/zxing-js/src/core/util/Arrays.d.ts +45 -0
- package/lib/lib/zxing-js/src/core/util/ByteArrayOutputStream.d.ts +174 -0
- package/lib/lib/zxing-js/src/core/util/Charset.d.ts +7 -0
- package/lib/lib/zxing-js/src/core/util/Collections.d.ts +11 -0
- package/lib/lib/zxing-js/src/core/util/Float.d.ts +14 -0
- package/lib/lib/zxing-js/src/core/util/Formatter.d.ts +28 -0
- package/lib/lib/zxing-js/src/core/util/Integer.d.ts +19 -0
- package/lib/lib/zxing-js/src/core/util/Long.d.ts +12 -0
- package/lib/lib/zxing-js/src/core/util/OutputStream.d.ts +106 -0
- package/lib/lib/zxing-js/src/core/util/StandardCharsets.d.ts +7 -0
- package/lib/lib/zxing-js/src/core/util/StringBuilder.d.ts +21 -0
- package/lib/lib/zxing-js/src/core/util/StringEncoding.d.ts +51 -0
- package/lib/lib/zxing-js/src/core/util/System.d.ts +10 -0
- package/lib/lib/zxing-js/src/customTypings.d.ts +16 -0
- package/lib/lib/zxing-js/src/index.d.ts +5 -0
- package/lib/lib/zxing-js/src/node.d.ts +1 -0
- package/lib/license/LicenseManager.d.ts +69 -0
- package/lib/license/LicenseManagerNode.d.ts +64 -0
- package/lib/node.d.ts +37 -0
- package/lib/options-demo.d.ts +239 -0
- package/lib/plugins/QRBorderHelpers.d.ts +32 -0
- package/lib/plugins/QRBorderPlugin.d.ts +35 -0
- package/lib/plugins/QRValidatorZbar.d.ts +38 -0
- package/lib/plugins/QRValidatorZbarNode.d.ts +60 -0
- package/lib/plugins/QRValidatorZbarNodeSharp.d.ts +83 -0
- package/lib/qr-code-js-node.js +1 -0
- package/lib/qr-code-js.js +1 -0
- package/lib/templates/borders-inner-outter.d.ts +129 -0
- package/lib/templates/borders-inner-scale-offset.d.ts +497 -0
- package/lib/templates/borders-inner.d.ts +129 -0
- package/lib/templates/borders-no-license.d.ts +129 -0
- package/lib/templates/borders-outter.d.ts +129 -0
- package/lib/templates/borders-text-auto-curved.d.ts +129 -0
- package/lib/templates/borders-text-full-curved.d.ts +133 -0
- package/lib/templates/borders.d.ts +129 -0
- package/lib/templates/scales.d.ts +130 -0
- package/lib/templates/scan-validators/index.d.ts +1 -0
- package/lib/templates/scan-validators/tests/cases/basic-inverted.d.ts +9 -0
- package/lib/templates/scan-validators/tests/cases/basic-no-license.d.ts +3 -0
- package/lib/templates/scan-validators/tests/cases/basic.d.ts +3 -0
- package/lib/templates/scan-validators/tests/cases/colors-inverted.d.ts +2 -0
- package/lib/templates/scan-validators/tests/cases/colors.d.ts +58 -0
- package/lib/templates/scan-validators/tests/cases/out-of-borders-inverted.d.ts +9 -0
- package/lib/templates/scan-validators/tests/cases/out-of-borders.d.ts +9 -0
- package/lib/templates/scan-validators/tests/cases/position-inverted.d.ts +9 -0
- package/lib/templates/scan-validators/tests/cases/position.d.ts +3 -0
- package/lib/templates/scan-validators/tests/index.d.ts +27 -0
- package/lib/tools/browser-image-tools.d.ts +7 -0
- package/lib/tools/browser-utils.d.ts +18 -0
- package/lib/types/helper.d.ts +23 -0
- package/lib/utils/canvas-options.d.ts +7 -0
- package/lib/utils/color.d.ts +4 -0
- package/lib/utils/gradient.d.ts +26 -0
- package/lib/utils/image.d.ts +16 -0
- package/lib/utils/merge.d.ts +5 -0
- package/lib/utils/options.d.ts +220 -0
- package/lib/utils/qrcode.d.ts +8 -0
- package/lib/utils/scan-validator-node.d.ts +15 -0
- package/lib/utils/scan-validators/abstract-scan-validator.d.ts +43 -0
- package/lib/utils/scan-validators/zbar-scan-validator.d.ts +8 -0
- package/lib/utils/scan-validators/zxing-canvas-scan-validator.d.ts +10 -0
- package/lib/utils/scan-validators/zxing-scan-validator.d.ts +8 -0
- package/lib/utils/svg.d.ts +2 -0
- package/lib/utils/token-validator.d.ts +19 -0
- package/package.json +80 -0
@@ -0,0 +1,523 @@
|
|
1
|
+
# Advanced Examples for QR-Code.js
|
2
|
+
<a id="start"></a>
|
3
|
+
|
4
|
+
This document provides advanced examples demonstrating the customization capabilities of QRCode.js. Each section focuses on specific options to help you create unique and visually appealing QR codes.
|
5
|
+
|
6
|
+
---
|
7
|
+
|
8
|
+
## Detailed Examples by Options
|
9
|
+
|
10
|
+
### Core Options
|
11
|
+
|
12
|
+
These examples focus on the fundamental QR code generation settings.
|
13
|
+
|
14
|
+
**Example 1: High Error Correction & Specific Type Number**
|
15
|
+
|
16
|
+
```typescript
|
17
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
18
|
+
const qrCoreHighEC = new QRCodeJs({
|
19
|
+
data: 'https://example.com/high-ec',
|
20
|
+
qrOptions: {
|
21
|
+
typeNumber: 10, // Larger QR code version
|
22
|
+
errorCorrectionLevel: 'H' // Highest error correction
|
23
|
+
},
|
24
|
+
dotsOptions: {
|
25
|
+
color: '#4A00E0' // Deep purple dots
|
26
|
+
}
|
27
|
+
});
|
28
|
+
qrCoreHighEC.append(document.getElementById('core-high-ec-container'));
|
29
|
+
```
|
30
|
+
|
31
|
+
**Example 2: Auto Type Number & Medium Error Correction**
|
32
|
+
|
33
|
+
```typescript
|
34
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
35
|
+
const qrCoreAutoEC = new QRCodeJs({
|
36
|
+
data: 'https://example.com/auto-ec-medium',
|
37
|
+
qrOptions: {
|
38
|
+
typeNumber: 0, // Auto-detect size
|
39
|
+
errorCorrectionLevel: 'M' // Medium error correction
|
40
|
+
},
|
41
|
+
dotsOptions: {
|
42
|
+
color: '#006400' // Dark green dots
|
43
|
+
}
|
44
|
+
});
|
45
|
+
qrCoreAutoEC.append(document.getElementById('core-auto-ec-container'));
|
46
|
+
```
|
47
|
+
|
48
|
+
---
|
49
|
+
|
50
|
+
### Layout Options
|
51
|
+
|
52
|
+
Demonstrates how to control the positioning and scaling within the container or border.
|
53
|
+
|
54
|
+
**Example 1: Scaled Down with Offsets**
|
55
|
+
|
56
|
+
```typescript
|
57
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
58
|
+
const qrLayoutScaledOffset = new QRCodeJs({
|
59
|
+
data: 'https://example.com/layout-scaled-offset',
|
60
|
+
scale: 0.75, // QR code occupies 75% of the space
|
61
|
+
offset: -15, // Moves QR code 15px up relative to center
|
62
|
+
verticalOffset: 5, // Additional 5px absolute downward shift
|
63
|
+
horizontalOffset: -5, // Additional 5px absolute leftward shift
|
64
|
+
dotsOptions: {
|
65
|
+
color: '#D32F2F' // Red dots
|
66
|
+
},
|
67
|
+
backgroundOptions: {
|
68
|
+
color: '#FFEBEE' // Light red background
|
69
|
+
}
|
70
|
+
});
|
71
|
+
qrLayoutScaledOffset.append(document.getElementById('layout-scaled-offset-container'));
|
72
|
+
```
|
73
|
+
|
74
|
+
**Example 2: Responsive QR Code**
|
75
|
+
|
76
|
+
```typescript
|
77
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
78
|
+
const qrLayoutResponsive = new QRCodeJs({
|
79
|
+
data: 'https://example.com/layout-responsive',
|
80
|
+
isResponsive: true, // SVG will resize with container
|
81
|
+
margin: 10, // Add a 10px quiet zone
|
82
|
+
dotsOptions: {
|
83
|
+
color: '#0277BD' // Blue dots
|
84
|
+
}
|
85
|
+
});
|
86
|
+
// Ensure the container has a defined size or resizes
|
87
|
+
const responsiveContainer = document.getElementById('layout-responsive-container');
|
88
|
+
if (responsiveContainer) {
|
89
|
+
responsiveContainer.style.width = '80%'; // Example: container takes 80% width
|
90
|
+
responsiveContainer.style.height = 'auto';
|
91
|
+
qrLayoutResponsive.append(responsiveContainer);
|
92
|
+
}
|
93
|
+
```
|
94
|
+
|
95
|
+
---
|
96
|
+
|
97
|
+
### Dot Styling
|
98
|
+
|
99
|
+
Showcases different shapes and colors for the main data dots.
|
100
|
+
|
101
|
+
**Example 1: Classy Rounded Dots**
|
102
|
+
|
103
|
+
```typescript
|
104
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
105
|
+
const qrDotsClassy = new QRCodeJs({
|
106
|
+
data: 'https://example.com/dots-classy',
|
107
|
+
dotsOptions: {
|
108
|
+
type: 'classyRounded',
|
109
|
+
color: '#388E3C', // Green classy dots
|
110
|
+
size: 11
|
111
|
+
}
|
112
|
+
});
|
113
|
+
qrDotsClassy.append(document.getElementById('dots-classy-container'));
|
114
|
+
```
|
115
|
+
|
116
|
+
**Example 2: Star Dots**
|
117
|
+
|
118
|
+
```typescript
|
119
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
120
|
+
const qrDotsStar = new QRCodeJs({
|
121
|
+
data: 'https://example.com/dots-star',
|
122
|
+
dotsOptions: {
|
123
|
+
type: 'star',
|
124
|
+
color: '#FFA000', // Amber star dots
|
125
|
+
size: 13
|
126
|
+
}
|
127
|
+
});
|
128
|
+
qrDotsStar.append(document.getElementById('dots-star-container'));
|
129
|
+
```
|
130
|
+
|
131
|
+
**Example 3: Diamond Dots**
|
132
|
+
|
133
|
+
```typescript
|
134
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
135
|
+
const qrDotsDiamond = new QRCodeJs({
|
136
|
+
data: 'https://example.com/dots-diamond',
|
137
|
+
dotsOptions: {
|
138
|
+
type: 'diamond',
|
139
|
+
color: '#5E35B1', // Deep Purple diamond dots
|
140
|
+
size: 10
|
141
|
+
}
|
142
|
+
});
|
143
|
+
qrDotsDiamond.append(document.getElementById('dots-diamond-container'));
|
144
|
+
```
|
145
|
+
|
146
|
+
---
|
147
|
+
|
148
|
+
### Corner Squares Styling
|
149
|
+
|
150
|
+
Customizes the three large corner squares.
|
151
|
+
|
152
|
+
**Example 1: Outpoint Corner Squares**
|
153
|
+
|
154
|
+
```typescript
|
155
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
156
|
+
const qrCornerSquareOutpoint = new QRCodeJs({
|
157
|
+
data: 'https://example.com/corner-square-outpoint',
|
158
|
+
dotsOptions: { color: '#444' },
|
159
|
+
cornersSquareOptions: {
|
160
|
+
type: 'outpoint',
|
161
|
+
color: '#C2185B' // Pink outpoint corners
|
162
|
+
}
|
163
|
+
});
|
164
|
+
qrCornerSquareOutpoint.append(document.getElementById('corner-square-outpoint-container'));
|
165
|
+
```
|
166
|
+
|
167
|
+
**Example 2: Rounded Corner Squares**
|
168
|
+
|
169
|
+
```typescript
|
170
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
171
|
+
const qrCornerSquareRounded = new QRCodeJs({
|
172
|
+
data: 'https://example.com/corner-square-rounded',
|
173
|
+
dotsOptions: { type: 'dot', color: '#7B1FA2' }, // Purple dots
|
174
|
+
cornersSquareOptions: {
|
175
|
+
type: 'rounded',
|
176
|
+
color: '#00796B' // Teal rounded corners
|
177
|
+
}
|
178
|
+
});
|
179
|
+
qrCornerSquareRounded.append(document.getElementById('corner-square-rounded-container'));
|
180
|
+
```
|
181
|
+
|
182
|
+
---
|
183
|
+
|
184
|
+
### Corner Dots Styling
|
185
|
+
|
186
|
+
Customizes the smaller dots within the corner squares.
|
187
|
+
|
188
|
+
**Example 1: Heart Corner Dots**
|
189
|
+
|
190
|
+
```typescript
|
191
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
192
|
+
const qrCornerDotHeart = new QRCodeJs({
|
193
|
+
data: 'https://example.com/corner-dot-heart',
|
194
|
+
dotsOptions: { color: '#555' },
|
195
|
+
cornersSquareOptions: { type: 'square', color: '#E64A19' }, // Orange square corners
|
196
|
+
cornersDotOptions: {
|
197
|
+
type: 'heart',
|
198
|
+
color: '#FFFFFF' // White heart dots inside corners
|
199
|
+
}
|
200
|
+
});
|
201
|
+
qrCornerDotHeart.append(document.getElementById('corner-dot-heart-container'));
|
202
|
+
```
|
203
|
+
|
204
|
+
**Example 2: Square Corner Dots with Different Color**
|
205
|
+
|
206
|
+
```typescript
|
207
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
208
|
+
const qrCornerDotSquare = new QRCodeJs({
|
209
|
+
data: 'https://example.com/corner-dot-square',
|
210
|
+
dotsOptions: { type: 'rounded', color: '#004D40' }, // Dark Teal dots
|
211
|
+
cornersSquareOptions: { type: 'rounded', color: '#FBC02D' }, // Yellow rounded corners
|
212
|
+
cornersDotOptions: {
|
213
|
+
type: 'square',
|
214
|
+
color: '#004D40' // Dark Teal square dots inside corners
|
215
|
+
}
|
216
|
+
});
|
217
|
+
qrCornerDotSquare.append(document.getElementById('corner-dot-square-container'));
|
218
|
+
```
|
219
|
+
|
220
|
+
---
|
221
|
+
|
222
|
+
### Background Styling
|
223
|
+
|
224
|
+
Applies color, rounding, and gradients to the background.
|
225
|
+
|
226
|
+
**Example 1: Colored and Rounded Background**
|
227
|
+
|
228
|
+
```typescript
|
229
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
230
|
+
const qrBackgroundStyled = new QRCodeJs({
|
231
|
+
data: 'https://example.com/background-styled',
|
232
|
+
dotsOptions: { color: '#FFFFFF' }, // White dots for contrast
|
233
|
+
backgroundOptions: {
|
234
|
+
color: '#1A237E', // Indigo background
|
235
|
+
round: 0.3 // 30% rounding
|
236
|
+
}
|
237
|
+
});
|
238
|
+
qrBackgroundStyled.append(document.getElementById('background-styled-container'));
|
239
|
+
```
|
240
|
+
|
241
|
+
**Example 2: Background with Subtle Radial Gradient**
|
242
|
+
|
243
|
+
```typescript
|
244
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
245
|
+
const qrBackgroundGradient = new QRCodeJs({
|
246
|
+
data: 'https://example.com/background-gradient',
|
247
|
+
dotsOptions: { color: '#333' },
|
248
|
+
backgroundOptions: {
|
249
|
+
round: '10%',
|
250
|
+
gradient: {
|
251
|
+
type: 'radial',
|
252
|
+
colorStops: [
|
253
|
+
{ offset: 0, color: '#E3F2FD' }, // Light blue center
|
254
|
+
{ offset: 1, color: '#BBDEFB' } // Darker blue edge
|
255
|
+
]
|
256
|
+
}
|
257
|
+
}
|
258
|
+
});
|
259
|
+
qrBackgroundGradient.append(document.getElementById('background-gradient-container'));
|
260
|
+
```
|
261
|
+
|
262
|
+
---
|
263
|
+
|
264
|
+
### Gradients Usage
|
265
|
+
|
266
|
+
Applies linear and radial gradients to various elements.
|
267
|
+
|
268
|
+
**Example 1: Linear Gradient on Dots**
|
269
|
+
|
270
|
+
```typescript
|
271
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
272
|
+
const qrGradientDotsLinear = new QRCodeJs({
|
273
|
+
data: 'https://example.com/gradient-dots-linear',
|
274
|
+
dotsOptions: {
|
275
|
+
type: 'rounded',
|
276
|
+
gradient: {
|
277
|
+
type: 'linear',
|
278
|
+
rotation: Math.PI / 2, // Vertical gradient
|
279
|
+
colorStops: [
|
280
|
+
{ offset: 0, color: '#FDD835' }, // Yellow start
|
281
|
+
{ offset: 1, color: '#F57F17' } // Orange end
|
282
|
+
]
|
283
|
+
}
|
284
|
+
},
|
285
|
+
backgroundOptions: { color: '#FFFDE7' } // Light yellow background
|
286
|
+
});
|
287
|
+
qrGradientDotsLinear.append(document.getElementById('gradient-dots-linear-container'));
|
288
|
+
```
|
289
|
+
|
290
|
+
**Example 2: Radial Gradient on Corner Squares & Linear on Dots**
|
291
|
+
|
292
|
+
```typescript
|
293
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
294
|
+
const qrGradientMultiple = new QRCodeJs({
|
295
|
+
data: 'https://example.com/gradient-multiple',
|
296
|
+
dotsOptions: {
|
297
|
+
type: 'square',
|
298
|
+
gradient: {
|
299
|
+
type: 'linear',
|
300
|
+
rotation: 0, // Horizontal
|
301
|
+
colorStops: [
|
302
|
+
{ offset: 0, color: '#8E24AA' }, // Purple
|
303
|
+
{ offset: 1, color: '#D81B60' } // Pink
|
304
|
+
]
|
305
|
+
}
|
306
|
+
},
|
307
|
+
cornersSquareOptions: {
|
308
|
+
type: 'dot',
|
309
|
+
gradient: {
|
310
|
+
type: 'radial',
|
311
|
+
colorStops: [
|
312
|
+
{ offset: 0, color: '#D81B60' }, // Pink center
|
313
|
+
{ offset: 1, color: '#8E24AA' } // Purple edge
|
314
|
+
]
|
315
|
+
}
|
316
|
+
},
|
317
|
+
cornersDotOptions: { // Keep inner dots consistent with square gradient
|
318
|
+
type: 'dot',
|
319
|
+
gradient: {
|
320
|
+
type: 'radial',
|
321
|
+
colorStops: [
|
322
|
+
{ offset: 0, color: '#D81B60' },
|
323
|
+
{ offset: 1, color: '#8E24AA' }
|
324
|
+
]
|
325
|
+
}
|
326
|
+
},
|
327
|
+
backgroundOptions: { color: '#F3E5F5' } // Light purple background
|
328
|
+
});
|
329
|
+
qrGradientMultiple.append(document.getElementById('gradient-multiple-container'));
|
330
|
+
```
|
331
|
+
|
332
|
+
---
|
333
|
+
|
334
|
+
### Image Embedding
|
335
|
+
|
336
|
+
Embeds logos or images within the QR code.
|
337
|
+
|
338
|
+
**Example 1: Centered Logo with Fill**
|
339
|
+
|
340
|
+
```typescript
|
341
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
342
|
+
const qrImageCenter = new QRCodeJs({
|
343
|
+
data: 'https://example.com/image-center',
|
344
|
+
qrOptions: { errorCorrectionLevel: 'Q' }, // Higher EC recommended
|
345
|
+
image: 'https://upload.wikimedia.org/wikipedia/commons/a/a5/Instagram_icon.png', // Example: Instagram logo
|
346
|
+
imageOptions: {
|
347
|
+
mode: 'center',
|
348
|
+
imageSize: 0.35,
|
349
|
+
margin: 3,
|
350
|
+
crossOrigin: 'anonymous',
|
351
|
+
fill: { color: 'rgba(255,255,255,0.8)' } // Semi-transparent white fill behind logo
|
352
|
+
},
|
353
|
+
dotsOptions: { color: '#C13584' } // Instagram-like color
|
354
|
+
});
|
355
|
+
qrImageCenter.append(document.getElementById('image-center-container'));
|
356
|
+
```
|
357
|
+
|
358
|
+
**Example 2: Image as Background**
|
359
|
+
|
360
|
+
```typescript
|
361
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
362
|
+
const qrImageBackground = new QRCodeJs({
|
363
|
+
data: 'https://example.com/image-background',
|
364
|
+
qrOptions: { errorCorrectionLevel: 'M' },
|
365
|
+
image: 'https://source.unsplash.com/random/300x300?nature,water', // Example: Random nature image
|
366
|
+
imageOptions: {
|
367
|
+
mode: 'background', // Use image as background
|
368
|
+
imageSize: 1, // Image covers the whole area
|
369
|
+
crossOrigin: 'anonymous'
|
370
|
+
},
|
371
|
+
dotsOptions: {
|
372
|
+
type: 'rounded',
|
373
|
+
color: 'rgba(0, 0, 0, 0.7)' // Semi-transparent dark dots for contrast
|
374
|
+
},
|
375
|
+
cornersSquareOptions: { color: 'rgba(0, 0, 0, 0.7)' },
|
376
|
+
cornersDotOptions: { color: 'rgba(0, 0, 0, 0.7)' },
|
377
|
+
backgroundOptions: false // Disable default background color
|
378
|
+
});
|
379
|
+
qrImageBackground.append(document.getElementById('image-background-container'));
|
380
|
+
```
|
381
|
+
|
382
|
+
---
|
383
|
+
|
384
|
+
### Border Options and Decorations (Premium Feature)
|
385
|
+
|
386
|
+
Uses premium border features for advanced styling and text. Requires a license.
|
387
|
+
|
388
|
+
**Example 1: Elaborate Border with Multiple Decorations**
|
389
|
+
|
390
|
+
```typescript
|
391
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
392
|
+
// Ensure license is activated first
|
393
|
+
// await QRCodeJs.license('YOUR-LICENSE-KEY');
|
394
|
+
|
395
|
+
const qrBorderElaborate = new QRCodeJs({
|
396
|
+
data: 'https://example.com/border-elaborate',
|
397
|
+
dotsOptions: {
|
398
|
+
type: 'extraRounded',
|
399
|
+
color: '#0D47A1' // Dark Blue
|
400
|
+
},
|
401
|
+
backgroundOptions: { color: '#E3F2FD' }, // Light Blue background
|
402
|
+
borderOptions: {
|
403
|
+
hasBorder: true,
|
404
|
+
thickness: 30,
|
405
|
+
color: '#0D47A1', // Dark Blue main border
|
406
|
+
radius: '15%',
|
407
|
+
background: '#BBDEFB', // Lighter blue border background
|
408
|
+
borderOuter: { // Gold outer line
|
409
|
+
color: '#FFAB00',
|
410
|
+
thickness: 4
|
411
|
+
},
|
412
|
+
borderInner: { // White inner line
|
413
|
+
color: '#FFFFFF',
|
414
|
+
thickness: 2
|
415
|
+
},
|
416
|
+
decorations: {
|
417
|
+
top: {
|
418
|
+
enableText: true,
|
419
|
+
type: 'text',
|
420
|
+
value: 'SCAN FOR DETAILS',
|
421
|
+
style: { fontFace: 'Arial', fontSize: 16, fontColor: '#FFFFFF', fontWeight: 'bold' }
|
422
|
+
},
|
423
|
+
bottom: {
|
424
|
+
enableText: true,
|
425
|
+
type: 'text',
|
426
|
+
value: 'Powered by QR-Platform',
|
427
|
+
style: { fontFace: 'Arial', fontSize: 12, fontColor: '#FFFFFF' }
|
428
|
+
},
|
429
|
+
left: { // Example: Add small icon/text on side (adjust offset/size)
|
430
|
+
enableText: true,
|
431
|
+
type: 'text',
|
432
|
+
value: '>',
|
433
|
+
style: { fontFace: 'Arial', fontSize: 20, fontColor: '#FFFFFF', fontWeight: 'bold' },
|
434
|
+
offset: 0 // Center vertically
|
435
|
+
},
|
436
|
+
right: {
|
437
|
+
enableText: true,
|
438
|
+
type: 'text',
|
439
|
+
value: '<',
|
440
|
+
style: { fontFace: 'Arial', fontSize: 20, fontColor: '#FFFFFF', fontWeight: 'bold' },
|
441
|
+
offset: 0
|
442
|
+
}
|
443
|
+
}
|
444
|
+
}
|
445
|
+
});
|
446
|
+
qrBorderElaborate.append(document.getElementById('border-elaborate-container'));
|
447
|
+
```
|
448
|
+
|
449
|
+
---
|
450
|
+
|
451
|
+
### Scan Validation (Premium Feature)
|
452
|
+
|
453
|
+
Validate if the generated QR code is scannable using the built-in validator. This requires a premium license.
|
454
|
+
|
455
|
+
```typescript
|
456
|
+
// filepath: /Users/kurdin/projects/qr-platform/qr-code-js/docs/advanced-examples.md
|
457
|
+
// Ensure license is activated first
|
458
|
+
// await QRCodeJs.license('YOUR-LICENSE-KEY');
|
459
|
+
|
460
|
+
const qrCodeToValidate = new QRCodeJs({
|
461
|
+
data: 'Complex data string that might be hard to scan due to density or styling choices',
|
462
|
+
qrOptions: { errorCorrectionLevel: 'L' }, // Lower error correction can make scanning harder
|
463
|
+
dotsOptions: { type: 'tinySquare', color: '#CCCCCC' } // Light color, complex dot type
|
464
|
+
});
|
465
|
+
|
466
|
+
// Basic validation
|
467
|
+
qrCodeToValidate.validateScanning()
|
468
|
+
.then(result => {
|
469
|
+
console.log('Basic Validation Result:', result);
|
470
|
+
if (!result.isValid) {
|
471
|
+
console.warn(`QR code might not be scannable. Reason: ${result.message}`);
|
472
|
+
// Consider adjusting options like increasing errorCorrectionLevel or changing dot style/color
|
473
|
+
} else {
|
474
|
+
console.log(`QR code is valid! Decoded: ${result.decodedText}`);
|
475
|
+
}
|
476
|
+
})
|
477
|
+
.catch(error => {
|
478
|
+
console.error('Validation error:', error);
|
479
|
+
});
|
480
|
+
|
481
|
+
// Validation with debug output using zbar validator
|
482
|
+
qrCodeToValidate.validateScanning('zbar', true)
|
483
|
+
.then(result => {
|
484
|
+
console.log('Validation Result (zbar with debug):', result);
|
485
|
+
})
|
486
|
+
.catch(error => {
|
487
|
+
console.error('Validation error (zbar with debug):', error);
|
488
|
+
});
|
489
|
+
|
490
|
+
// Example of handling validation failure within an async function
|
491
|
+
async function createAndValidate() {
|
492
|
+
const qr = new QRCodeJs({
|
493
|
+
data: 'Test Data for Validation',
|
494
|
+
dotsOptions: { type: 'star', color: '#FF00FF'} // Potentially difficult style
|
495
|
+
});
|
496
|
+
try {
|
497
|
+
const validation = await qr.validateScanning();
|
498
|
+
if (validation.isValid) {
|
499
|
+
console.log(`QR Code is valid! Decoded: ${validation.decodedText}`);
|
500
|
+
qr.append(document.getElementById('validation-success-container'));
|
501
|
+
} else {
|
502
|
+
console.error(`QR Code validation failed: ${validation.message}. Consider simplifying the design.`);
|
503
|
+
// Optionally, try adjusting options and re-validating
|
504
|
+
// qr.update({ dotsOptions: { type: 'square', color: '#000000' } });
|
505
|
+
// const reValidation = await qr.validateScanning();
|
506
|
+
// ... handle reValidation result
|
507
|
+
}
|
508
|
+
} catch (err) {
|
509
|
+
console.error('An error occurred during validation:', err);
|
510
|
+
}
|
511
|
+
}
|
512
|
+
|
513
|
+
createAndValidate();
|
514
|
+
```
|
515
|
+
|
516
|
+
---
|
517
|
+
|
518
|
+
### See Also
|
519
|
+
- [QRCode.js Documentation](./documentation.md#start)
|
520
|
+
- [API Reference Guide](./api-reference-guide.md#start)
|
521
|
+
- [TypeScript Types and Definitions](./typescript-types-definitions.md#start)
|
522
|
+
- [License Management](./license-management.md#start)
|
523
|
+
- [Basic Examples](./examples.md#start)
|