|
3 | 3 | * |
4 | 4 | * Cross-browser QRCode generator for pure javascript. Support Canvas, SVG and Table drawing methods. Support Dot style, Logo, Background image, Colorful, Title etc. settings. Support Angular, Vue.js, React, Next.js framework. Support binary(hex) data mode.(Running with DOM on client side) |
5 | 5 | * |
6 | | - * Version 4.0.0 |
| 6 | + * Version 4.1.0 |
7 | 7 | * |
8 | 8 | |
9 | 9 | * |
|
1081 | 1081 | // _htOption.colorDark="rgba(0, 0, 0, .6)"; |
1082 | 1082 | // _htOption.colorLight='rgba(255, 255, 255, .7)'; |
1083 | 1083 | } else { |
1084 | | - _htOption.colorLight = 'transparent'; |
| 1084 | + _htOption.colorLight = "rgba(0,0,0,0)"; |
1085 | 1085 | } |
1086 | 1086 |
|
1087 | 1087 |
|
|
1495 | 1495 |
|
1496 | 1496 | var eye = oQRCode.getEye(row, col); // { isDark: true/false, type: PO_TL, PI_TL, PO_TR, PI_TR, PO_BL, PI_BL }; |
1497 | 1497 |
|
| 1498 | + var nowDotScale = _htOption.dotScale; |
1498 | 1499 | if (eye) { |
| 1500 | + if (eye.type == 'AO') { |
| 1501 | + nowDotScale = _htOption.dotScaleAO; |
| 1502 | + } else if (eye.type == 'AI') { |
| 1503 | + nowDotScale = _htOption.dotScaleAI; |
| 1504 | + } else { |
| 1505 | + nowDotScale = 1; |
| 1506 | + } |
| 1507 | + |
1499 | 1508 | // Is eye |
1500 | 1509 | bIsDark = eye.isDark; |
1501 | 1510 | var type = eye.type; |
|
1508 | 1517 | _oContext.strokeStyle = bIsDark ? eyeColorDark : _htOption.colorLight; |
1509 | 1518 | _oContext.fillStyle = bIsDark ? eyeColorDark : _htOption.colorLight; |
1510 | 1519 |
|
1511 | | - _oContext.fillRect(nLeft, _htOption.titleHeight + nTop, nWidth, nHeight); |
| 1520 | + // _oContext.fillRect(nLeft, _htOption.titleHeight + nTop, nWidth, nHeight); |
| 1521 | + |
| 1522 | + |
| 1523 | + _oContext.fillRect(nLeft + nWidth * (1 - nowDotScale) / 2, _htOption.titleHeight + |
| 1524 | + nTop + nHeight * (1 - |
| 1525 | + nowDotScale) / 2, nWidth * nowDotScale, nHeight * |
| 1526 | + nowDotScale); |
1512 | 1527 |
|
1513 | 1528 | } else { |
1514 | 1529 | _oContext.lineWidth = 0; |
1515 | 1530 | _oContext.strokeStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight; |
1516 | 1531 | _oContext.fillStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight; |
1517 | 1532 |
|
1518 | | - var nowDotScale = _htOption.dotScale; |
| 1533 | + if (_htOption.backgroundImage) { |
| 1534 | + |
| 1535 | + if (_htOption.autoColor) { |
| 1536 | + _oContext.strokeStyle = bIsDark ? "rgba(0, 0, 0, .6)" : |
| 1537 | + "rgba(255, 255, 255, .7)"; |
| 1538 | + _oContext.fillStyle = bIsDark ? "rgba(0, 0, 0, .6)" : |
| 1539 | + "rgba(255, 255, 255, .7)"; |
| 1540 | + } else { |
| 1541 | + _oContext.strokeStyle = bIsDark ? _htOption.colorDark : |
| 1542 | + "rgba(0,0,0,0)"; |
| 1543 | + _oContext.fillStyle = bIsDark ? _htOption.colorDark : |
| 1544 | + "rgba(0,0,0,0)"; |
| 1545 | + _oContext.strokeStyle = _oContext.fillStyle; |
| 1546 | + } |
| 1547 | + |
| 1548 | + } else { |
| 1549 | + _oContext.strokeStyle = _oContext.fillStyle; |
| 1550 | + |
| 1551 | + |
| 1552 | + } |
| 1553 | + |
1519 | 1554 | if (row == 6) { |
1520 | 1555 | // Timing Pattern |
1521 | | - nowDotScale = 1; |
1522 | | - var timingHColorDark = _htOption.timing_H || _htOption.timing || |
1523 | | - _htOption.colorDark; |
1524 | | - _oContext.fillStyle = bIsDark ? timingHColorDark : _htOption.colorLight; |
1525 | | - _oContext.strokeStyle = _oContext.fillStyle; |
| 1556 | + nowDotScale = _htOption.dotScaleTiming_H; |
| 1557 | + |
1526 | 1558 | _oContext.fillRect(nLeft + nWidth * (1 - nowDotScale) / 2, _htOption.titleHeight + |
1527 | 1559 | nTop + nHeight * (1 - |
1528 | 1560 | nowDotScale) / 2, nWidth * nowDotScale, nHeight * |
1529 | 1561 | nowDotScale); |
1530 | 1562 | } else if (col == 6) { |
1531 | 1563 | // Timing Pattern |
1532 | | - nowDotScale = 1; |
1533 | | - var timingVColorDark = _htOption.timing_V || _htOption.timing || |
1534 | | - _htOption.colorDark; |
1535 | | - _oContext.fillStyle = bIsDark ? timingVColorDark : _htOption.colorLight; |
1536 | | - _oContext.strokeStyle = _oContext.fillStyle; |
| 1564 | + nowDotScale = _htOption.dotScaleTiming_V; |
| 1565 | + |
1537 | 1566 | _oContext.fillRect(nLeft + nWidth * (1 - nowDotScale) / 2, _htOption.titleHeight + |
1538 | 1567 | nTop + nHeight * (1 - |
1539 | 1568 | nowDotScale) / 2, nWidth * nowDotScale, nHeight * |
|
1542 | 1571 |
|
1543 | 1572 | if (_htOption.backgroundImage) { |
1544 | 1573 |
|
1545 | | - if (_htOption.autoColor) { |
1546 | | - _oContext.strokeStyle = bIsDark ? "rgba(0, 0, 0, .6)" : |
1547 | | - "rgba(255, 255, 255, .7)"; |
1548 | | - _oContext.fillStyle = bIsDark ? "rgba(0, 0, 0, .6)" : |
1549 | | - "rgba(255, 255, 255, .7)"; |
1550 | | - } else { |
1551 | | - _oContext.strokeStyle = bIsDark ? _htOption.colorDark : |
1552 | | - "rgba(0,0,0,0)"; |
1553 | | - _oContext.fillStyle = bIsDark ? _htOption.colorDark : |
1554 | | - "rgba(0,0,0,0)"; |
1555 | | - _oContext.strokeStyle = _oContext.fillStyle; |
1556 | | - } |
1557 | 1574 | _oContext.fillRect(nLeft + nWidth * (1 - nowDotScale) / 2, |
1558 | 1575 | _htOption.titleHeight + nTop + nHeight * (1 - |
1559 | 1576 | nowDotScale) / 2, nWidth * nowDotScale, nHeight * |
1560 | 1577 | nowDotScale); |
1561 | 1578 | } else { |
1562 | | - _oContext.strokeStyle = _oContext.fillStyle; |
| 1579 | + |
1563 | 1580 | _oContext.fillRect(nLeft + nWidth * (1 - nowDotScale) / 2, |
1564 | 1581 | _htOption.titleHeight + nTop + nHeight * (1 - |
1565 | 1582 | nowDotScale) / 2, nWidth * nowDotScale, nHeight * |
|
1795 | 1812 | colorLight: "#ffffff", |
1796 | 1813 | correctLevel: QRErrorCorrectLevel.H, |
1797 | 1814 |
|
1798 | | - dotScale: 1, // Must be greater than 0, less than or equal to 1. default is 1 |
| 1815 | + dotScale: 1, // For body block, must be greater than 0, less than or equal to 1. default is 1 |
| 1816 | + |
| 1817 | + dotScaleTiming: 1, // Dafault for timing block , must be greater than 0, less than or equal to 1. default is 1 |
| 1818 | + dotScaleTiming_H: undefined, // For horizontal timing block, must be greater than 0, less than or equal to 1. default is 1 |
| 1819 | + dotScaleTiming_V: undefined, // For vertical timing block, must be greater than 0, less than or equal to 1. default is 1 |
| 1820 | + |
| 1821 | + dotScaleA: 1, // Dafault for alignment block, must be greater than 0, less than or equal to 1. default is 1 |
| 1822 | + dotScaleAO: undefined, // For alignment outer block, must be greater than 0, less than or equal to 1. default is 1 |
| 1823 | + dotScaleAI: undefined, // For alignment inner block, must be greater than 0, less than or equal to 1. default is 1 |
1799 | 1824 |
|
1800 | 1825 | quietZone: 0, |
1801 | | - quietZoneColor: 'transparent', |
| 1826 | + quietZoneColor: "rgba(0,0,0,0)", |
1802 | 1827 |
|
1803 | 1828 | title: "", |
1804 | 1829 | titleFont: "bold 16px Arial", |
|
1883 | 1908 | ) |
1884 | 1909 | this._htOption.dotScale = 1; |
1885 | 1910 | } |
| 1911 | + |
| 1912 | + if (this._htOption.dotScaleTiming < 0 || this._htOption.dotScaleTiming > 1) { |
| 1913 | + console.warn(this._htOption.dotScaleTiming + |
| 1914 | + " , is invalidate, dotScaleTiming must greater than 0, less than or equal to 1, now reset to 1. " |
| 1915 | + ) |
| 1916 | + this._htOption.dotScaleTiming = 1; |
| 1917 | + } |
| 1918 | + if (this._htOption.dotScaleTiming_H) { |
| 1919 | + if (this._htOption.dotScaleTiming_H < 0 || this._htOption.dotScaleTiming_H > 1) { |
| 1920 | + console.warn(this._htOption.dotScaleTiming_H + |
| 1921 | + " , is invalidate, dotScaleTiming_H must greater than 0, less than or equal to 1, now reset to 1. " |
| 1922 | + ) |
| 1923 | + this._htOption.dotScaleTiming_H = 1; |
| 1924 | + } |
| 1925 | + } else { |
| 1926 | + this._htOption.dotScaleTiming_H = this._htOption.dotScaleTiming; |
| 1927 | + } |
| 1928 | + |
| 1929 | + if (this._htOption.dotScaleTiming_V) { |
| 1930 | + if (this._htOption.dotScaleTiming_V < 0 || this._htOption.dotScaleTiming_V > 1) { |
| 1931 | + console.warn(this._htOption.dotScaleTiming_V + |
| 1932 | + " , is invalidate, dotScaleTiming_V must greater than 0, less than or equal to 1, now reset to 1. " |
| 1933 | + ) |
| 1934 | + this._htOption.dotScaleTiming_V = 1; |
| 1935 | + } |
| 1936 | + } else { |
| 1937 | + this._htOption.dotScaleTiming_V = this._htOption.dotScaleTiming; |
| 1938 | + } |
| 1939 | + |
| 1940 | + |
| 1941 | + |
| 1942 | + if (this._htOption.dotScaleA < 0 || this._htOption.dotScaleA > 1) { |
| 1943 | + console.warn(this._htOption.dotScaleA + |
| 1944 | + " , is invalidate, dotScaleA must greater than 0, less than or equal to 1, now reset to 1. " |
| 1945 | + ) |
| 1946 | + this._htOption.dotScaleA = 1; |
| 1947 | + } |
| 1948 | + if (this._htOption.dotScaleAO) { |
| 1949 | + if (this._htOption.dotScaleAO < 0 || this._htOption.dotScaleAO > 1) { |
| 1950 | + console.warn(this._htOption.dotScaleAO + |
| 1951 | + " , is invalidate, dotScaleAO must greater than 0, less than or equal to 1, now reset to 1. " |
| 1952 | + ) |
| 1953 | + this._htOption.dotScaleAO = 1; |
| 1954 | + } |
| 1955 | + } else { |
| 1956 | + this._htOption.dotScaleAO = this._htOption.dotScaleA; |
| 1957 | + } |
| 1958 | + if (this._htOption.dotScaleAI) { |
| 1959 | + if (this._htOption.dotScaleAI < 0 || this._htOption.dotScaleAI > 1) { |
| 1960 | + console.warn(this._htOption.dotScaleAI + |
| 1961 | + " , is invalidate, dotScaleAI must greater than 0, less than or equal to 1, now reset to 1. " |
| 1962 | + ) |
| 1963 | + this._htOption.dotScaleAI = 1; |
| 1964 | + } |
| 1965 | + } else { |
| 1966 | + this._htOption.dotScaleAI = this._htOption.dotScaleA; |
| 1967 | + } |
| 1968 | + |
| 1969 | + |
| 1970 | + |
1886 | 1971 | if (this._htOption.backgroundImageAlpha < 0 || this._htOption.backgroundImageAlpha > 1) { |
1887 | 1972 | console.warn(this._htOption.backgroundImageAlpha + |
1888 | 1973 | " , is invalidate, backgroundImageAlpha must between 0 and 1, now reset to 1. ") |
|
0 commit comments