plate-renderer 0.0.3

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.
Files changed (156) hide show
  1. package/README.md +42 -0
  2. package/dist/140_0-P4kPL3qg.js +6 -0
  3. package/dist/140_0-P4kPL3qg.js.map +1 -0
  4. package/dist/140_1-DTCEP18C.js +6 -0
  5. package/dist/140_1-DTCEP18C.js.map +1 -0
  6. package/dist/140_2-jCbTymCM.js +6 -0
  7. package/dist/140_2-jCbTymCM.js.map +1 -0
  8. package/dist/140_3-DVPX5swr.js +6 -0
  9. package/dist/140_3-DVPX5swr.js.map +1 -0
  10. package/dist/140_4-CY3aiRoa.js +6 -0
  11. package/dist/140_4-CY3aiRoa.js.map +1 -0
  12. package/dist/140_5-CaYieX8z.js +6 -0
  13. package/dist/140_5-CaYieX8z.js.map +1 -0
  14. package/dist/140_6-RoEaG1mC.js +6 -0
  15. package/dist/140_6-RoEaG1mC.js.map +1 -0
  16. package/dist/140_7-LcqrVA6X.js +6 -0
  17. package/dist/140_7-LcqrVA6X.js.map +1 -0
  18. package/dist/140_8-ODrXpep4.js +6 -0
  19. package/dist/140_8-ODrXpep4.js.map +1 -0
  20. package/dist/140_9-JwkcXozu.js +6 -0
  21. package/dist/140_9-JwkcXozu.js.map +1 -0
  22. package/dist/140_A-CXkIw5WE.js +6 -0
  23. package/dist/140_A-CXkIw5WE.js.map +1 -0
  24. package/dist/140_B-Disv-WCR.js +6 -0
  25. package/dist/140_B-Disv-WCR.js.map +1 -0
  26. package/dist/140_C-B1INaeP8.js +6 -0
  27. package/dist/140_C-B1INaeP8.js.map +1 -0
  28. package/dist/140_D-CmQhgtVf.js +6 -0
  29. package/dist/140_D-CmQhgtVf.js.map +1 -0
  30. package/dist/140_E-CnmM7mgG.js +6 -0
  31. package/dist/140_E-CnmM7mgG.js.map +1 -0
  32. package/dist/140_F-m6iwrBy1.js +6 -0
  33. package/dist/140_F-m6iwrBy1.js.map +1 -0
  34. package/dist/140_G-uR9QE4Su.js +6 -0
  35. package/dist/140_G-uR9QE4Su.js.map +1 -0
  36. package/dist/140_H-nJkstUeX.js +6 -0
  37. package/dist/140_H-nJkstUeX.js.map +1 -0
  38. package/dist/140_J-G5MYpmYx.js +6 -0
  39. package/dist/140_J-G5MYpmYx.js.map +1 -0
  40. package/dist/140_K-ByWSsRGa.js +6 -0
  41. package/dist/140_K-ByWSsRGa.js.map +1 -0
  42. package/dist/140_L-D25verQ5.js +6 -0
  43. package/dist/140_L-D25verQ5.js.map +1 -0
  44. package/dist/140_M-Bal3rxCL.js +6 -0
  45. package/dist/140_M-Bal3rxCL.js.map +1 -0
  46. package/dist/140_N-axDnHiDN.js +6 -0
  47. package/dist/140_N-axDnHiDN.js.map +1 -0
  48. package/dist/140_P-CQiovL9o.js +6 -0
  49. package/dist/140_P-CQiovL9o.js.map +1 -0
  50. package/dist/140_Q-BYOFbTka.js +6 -0
  51. package/dist/140_Q-BYOFbTka.js.map +1 -0
  52. package/dist/140_R-Bpf0qwjS.js +6 -0
  53. package/dist/140_R-Bpf0qwjS.js.map +1 -0
  54. package/dist/140_S-DgN1PKgi.js +6 -0
  55. package/dist/140_S-DgN1PKgi.js.map +1 -0
  56. package/dist/140_T-BBb0sue1.js +6 -0
  57. package/dist/140_T-BBb0sue1.js.map +1 -0
  58. package/dist/140_U-DpGlbFk5.js +6 -0
  59. package/dist/140_U-DpGlbFk5.js.map +1 -0
  60. package/dist/140_V-CoAf3jFC.js +6 -0
  61. package/dist/140_V-CoAf3jFC.js.map +1 -0
  62. package/dist/140_W-D2zLOs7z.js +6 -0
  63. package/dist/140_W-D2zLOs7z.js.map +1 -0
  64. package/dist/140_X-XGOqDUpP.js +6 -0
  65. package/dist/140_X-XGOqDUpP.js.map +1 -0
  66. package/dist/140_Y-BFe_xB7m.js +6 -0
  67. package/dist/140_Y-BFe_xB7m.js.map +1 -0
  68. package/dist/140_Z-CIa6xvYU.js +6 -0
  69. package/dist/140_Z-CIa6xvYU.js.map +1 -0
  70. package/dist/140_/344/272/221-kgdmbX-K.js +6 -0
  71. package/dist/140_/344/272/221-kgdmbX-K.js.map +1 -0
  72. package/dist/140_/344/272/254-C8KyFk2Z.js +6 -0
  73. package/dist/140_/344/272/254-C8KyFk2Z.js.map +1 -0
  74. package/dist/140_/344/275/277-DtqoHEFk.js +6 -0
  75. package/dist/140_/344/275/277-DtqoHEFk.js.map +1 -0
  76. package/dist/140_/345/206/200-C0v5IzOg.js +6 -0
  77. package/dist/140_/345/206/200-C0v5IzOg.js.map +1 -0
  78. package/dist/140_/345/220/211-DKiyMBdo.js +6 -0
  79. package/dist/140_/345/220/211-DKiyMBdo.js.map +1 -0
  80. package/dist/140_/345/255/246-DE_uqkJx.js +6 -0
  81. package/dist/140_/345/255/246-DE_uqkJx.js.map +1 -0
  82. package/dist/140_/345/256/201-BOWus8aO.js +6 -0
  83. package/dist/140_/345/256/201-BOWus8aO.js.map +1 -0
  84. package/dist/140_/345/267/235-D62FOQbo.js +6 -0
  85. package/dist/140_/345/267/235-D62FOQbo.js.map +1 -0
  86. package/dist/140_/346/214/202-BtmqLukI.js +6 -0
  87. package/dist/140_/346/214/202-BtmqLukI.js.map +1 -0
  88. package/dist/140_/346/226/260-CO8Y7gZS.js +6 -0
  89. package/dist/140_/346/226/260-CO8Y7gZS.js.map +1 -0
  90. package/dist/140_/346/231/213-c8Qu7FUY.js +6 -0
  91. package/dist/140_/346/231/213-c8Qu7FUY.js.map +1 -0
  92. package/dist/140_/346/241/202-CMPgmxCR.js +6 -0
  93. package/dist/140_/346/241/202-CMPgmxCR.js.map +1 -0
  94. package/dist/140_/346/262/252-DBux4eNb.js +6 -0
  95. package/dist/140_/346/262/252-DBux4eNb.js.map +1 -0
  96. package/dist/140_/346/264/245-DFSGUpVY.js +6 -0
  97. package/dist/140_/346/264/245-DFSGUpVY.js.map +1 -0
  98. package/dist/140_/346/265/231-DFu_rWY1.js +6 -0
  99. package/dist/140_/346/265/231-DFu_rWY1.js.map +1 -0
  100. package/dist/140_/346/270/235-DuxEwn1O.js +6 -0
  101. package/dist/140_/346/270/235-DuxEwn1O.js.map +1 -0
  102. package/dist/140_/346/270/257-CHojvW9O.js +6 -0
  103. package/dist/140_/346/270/257-CHojvW9O.js.map +1 -0
  104. package/dist/140_/346/271/230-Cdv-oyzI.js +6 -0
  105. package/dist/140_/346/271/230-Cdv-oyzI.js.map +1 -0
  106. package/dist/140_/346/276/263-DFRB-Yn2.js +6 -0
  107. package/dist/140_/346/276/263-DFRB-Yn2.js.map +1 -0
  108. package/dist/140_/347/220/274-CQm-WC1u.js +6 -0
  109. package/dist/140_/347/220/274-CQm-WC1u.js.map +1 -0
  110. package/dist/140_/347/224/230-BUkPIiZ8.js +6 -0
  111. package/dist/140_/347/224/230-BUkPIiZ8.js.map +1 -0
  112. package/dist/140_/347/232/226-9fopHcW7.js +6 -0
  113. package/dist/140_/347/232/226-9fopHcW7.js.map +1 -0
  114. package/dist/140_/347/262/244-2ns8bhVd.js +6 -0
  115. package/dist/140_/347/262/244-2ns8bhVd.js.map +1 -0
  116. package/dist/140_/350/213/217-EUfraRZi.js +6 -0
  117. package/dist/140_/350/213/217-EUfraRZi.js.map +1 -0
  118. package/dist/140_/350/222/231-CkJ-t9wg.js +6 -0
  119. package/dist/140_/350/222/231-CkJ-t9wg.js.map +1 -0
  120. package/dist/140_/350/227/217-Dq5D6Lv3.js +6 -0
  121. package/dist/140_/350/227/217-Dq5D6Lv3.js.map +1 -0
  122. package/dist/140_/350/255/246-H0oi8otX.js +6 -0
  123. package/dist/140_/350/255/246-H0oi8otX.js.map +1 -0
  124. package/dist/140_/350/261/253-DJWBm_In.js +6 -0
  125. package/dist/140_/350/261/253-DJWBm_In.js.map +1 -0
  126. package/dist/140_/350/264/265-BDGfR20s.js +6 -0
  127. package/dist/140_/350/264/265-BDGfR20s.js.map +1 -0
  128. package/dist/140_/350/265/243-COVrRPUN.js +6 -0
  129. package/dist/140_/350/265/243-COVrRPUN.js.map +1 -0
  130. package/dist/140_/350/276/275-BUN-YOpd.js +6 -0
  131. package/dist/140_/350/276/275-BUN-YOpd.js.map +1 -0
  132. package/dist/140_/351/204/202-Cal-CFv1.js +6 -0
  133. package/dist/140_/351/204/202-Cal-CFv1.js.map +1 -0
  134. package/dist/140_/351/227/275-CFO4mbFG.js +6 -0
  135. package/dist/140_/351/227/275-CFO4mbFG.js.map +1 -0
  136. package/dist/140_/351/231/225-9Q3bBxvG.js +6 -0
  137. package/dist/140_/351/231/225-9Q3bBxvG.js.map +1 -0
  138. package/dist/140_/351/235/222-DkZ2Y3hY.js +6 -0
  139. package/dist/140_/351/235/222-DkZ2Y3hY.js.map +1 -0
  140. package/dist/140_/351/242/206-Co-UB_h4.js +6 -0
  141. package/dist/140_/351/242/206-Co-UB_h4.js.map +1 -0
  142. package/dist/140_/351/262/201-CqP1XyHK.js +6 -0
  143. package/dist/140_/351/262/201-CqP1XyHK.js.map +1 -0
  144. package/dist/140_/351/273/221-CYdj5TYf.js +6 -0
  145. package/dist/140_/351/273/221-CYdj5TYf.js.map +1 -0
  146. package/dist/blue-DbOV5aNY.js +6 -0
  147. package/dist/blue-DbOV5aNY.js.map +1 -0
  148. package/dist/config/platesInfo.d.ts +14 -0
  149. package/dist/green-CxNHC5qT.js +6 -0
  150. package/dist/green-CxNHC5qT.js.map +1 -0
  151. package/dist/index.d.ts +9 -0
  152. package/dist/index.js +255 -0
  153. package/dist/index.js.map +1 -0
  154. package/dist/main.d.ts +1 -0
  155. package/dist/utils/imageProcess.d.ts +23 -0
  156. package/package.json +29 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/config/platesInfo.ts","../src/utils/imageProcess.ts","../src/index.ts"],"sourcesContent":["interface PlateInfo {\r\n plateImage: string\r\n fontColor: string\r\n fonts: Array<{\r\n width: number\r\n height: number\r\n left: number\r\n top: number\r\n }> \r\n}\r\nexport type Colors = 'green' | 'blue'\r\ntype PlatesInfo = Record<Colors, PlateInfo>\r\n\r\nexport const platesInfo: PlatesInfo = {\r\n green: {\r\n plateImage: 'green',\r\n fontColor: '#000000',\r\n fonts: [\r\n {\r\n \"width\": 0.0929,\r\n \"height\": 0.6204,\r\n \"left\": 0.0328,\r\n \"top\": 0.1852\r\n },\r\n {\r\n \"width\": 0.0874,\r\n \"height\": 0.6296,\r\n \"left\": 0.1475,\r\n \"top\": 0.1852\r\n },\r\n {\r\n \"width\": 0.0902,\r\n \"height\": 0.6296,\r\n \"left\": 0.3361,\r\n \"top\": 0.1852\r\n },\r\n {\r\n \"width\": 0.0902,\r\n \"height\": 0.6296,\r\n \"left\": 0.4490,\r\n \"top\": 0.1852\r\n },\r\n {\r\n \"width\": 0.0874,\r\n \"height\": 0.6296,\r\n \"left\": 0.5519,\r\n \"top\": 0.1852\r\n },\r\n {\r\n \"width\": 0.0874,\r\n \"height\": 0.6296,\r\n \"left\": 0.6612,\r\n \"top\": 0.1852\r\n },\r\n {\r\n \"width\": 0.0902,\r\n \"height\": 0.6296,\r\n \"left\": 0.7678,\r\n \"top\": 0.1852\r\n },\r\n {\r\n \"width\": 0.0902,\r\n \"height\": 0.6296,\r\n \"left\": 0.8770,\r\n \"top\": 0.1852\r\n }\r\n ]\r\n },\r\n blue: {\r\n plateImage: 'blue',\r\n fontColor: '#ffffff',\r\n fonts: [\r\n {\r\n \"width\": 0.1042,\r\n \"height\": 0.7396,\r\n \"left\": 0.0357,\r\n \"top\": 0.1302\r\n },\r\n {\r\n \"width\": 0.1042,\r\n \"height\": 0.7396,\r\n \"left\": 0.1619,\r\n \"top\": 0.1302\r\n },\r\n {\r\n \"width\": 0.0893,\r\n \"height\": 0.7396,\r\n \"left\": 0.3461,\r\n \"top\": 0.1302\r\n },\r\n {\r\n \"width\": 0.1004,\r\n \"height\": 0.7396,\r\n \"left\": 0.4741,\r\n \"top\": 0.1302\r\n },\r\n {\r\n \"width\": 0.0938,\r\n \"height\": 0.7396,\r\n \"left\": 0.6139,\r\n \"top\": 0.1302\r\n },\r\n {\r\n \"width\": 0.0938,\r\n \"height\": 0.7396,\r\n \"left\": 0.7479,\r\n \"top\": 0.1302\r\n },\r\n {\r\n \"width\": 0.1004,\r\n \"height\": 0.7396,\r\n \"left\": 0.8818,\r\n \"top\": 0.1302\r\n }\r\n ]\r\n }\r\n}","export interface Rgb {\n r: number\n g: number\n b: number\n}\n\nexport interface KeyOptions {\n /** 亮度 <= solid 的像素完全不透明(字身) */\n solid?: number\n /** 亮度 >= clear 的像素完全透明(背景) */\n clear?: number\n}\n\n/**\n * 把「黑字白底」的原图转成「指定颜色 + 透明背景」,并保留原图边缘的灰度过渡。\n *\n * @param imageData getImageData() 的结果,原地修改\n * @param fontColor 目标字色\n */\nexport function keyBlackToAlpha(imageData: ImageData, fontColor: Rgb, options: KeyOptions = {}) {\n const { solid = 64, clear = 208 } = options\n const { r, g, b } = fontColor\n const data = imageData.data\n const span = clear - solid\n\n for (let i = 0; i < data.length; i += 4) {\n // 感知亮度:JPEG 压缩后的边缘噪点用亮度判断比逐通道阈值稳\n const lum = 0.299 * data[i] + 0.587 * data[i + 1] + 0.114 * data[i + 2]\n\n let coverage: number\n if (lum <= solid) {\n coverage = 1\n } else if (lum >= clear) {\n coverage = 0\n } else {\n coverage = (clear - lum) / span\n }\n\n // 所有像素(包括全透明的)都写成字色,\n // 缩放时插值不会从背景色里带出灰边或白边\n data[i] = r\n data[i + 1] = g\n data[i + 2] = b\n data[i + 3] = Math.round(coverage * data[i + 3])\n }\n}\n\nexport function hexToRgb(hex: string) {\n // 去掉 # 号\n let color = hex.replace('#', '');\n \n // 处理简写(如 #f00 → #ff0000)\n if (color.length === 3) {\n color = color.split('').map(c => c + c).join('');\n }\n \n // 位运算提取 RGB\n const num = parseInt(color, 16);\n const r = (num >> 16) & 255;\n const g = (num >> 8) & 255;\n const b = num & 255;\n \n return { r, g, b };\n}","import { platesInfo, type Colors } from './config/platesInfo'\r\nimport { keyBlackToAlpha, hexToRgb } from './utils/imageProcess'\r\n\r\nexport class PlateRenderer {\r\n element: HTMLElement\r\n plateColor: Colors\r\n plateNumber: String\r\n\r\n constructor(plateNumber: string, plateColor: Colors, el: string | HTMLElement) {\r\n let element: HTMLElement\r\n if (typeof el === 'string') {\r\n const _el = document.getElementById(el)\r\n if (!_el) {\r\n throw new Error(`Element with ID \"${el}\" not found in DOM`)\r\n }\r\n element = _el\r\n } else {\r\n element = el\r\n }\r\n\r\n this.plateColor = plateColor\r\n this.element = element\r\n this.plateNumber = plateNumber\r\n }\r\n\r\n static async create(plateNumber: string, plateColor: Colors, el: string | HTMLElement) {\r\n const plateRenderer = new PlateRenderer(plateNumber, plateColor, el)\r\n const element = plateRenderer.element\r\n const canvas = document.createElement('canvas')\r\n const canvasWidth = element.offsetWidth\r\n const canvasHeight = canvasWidth * 0.2915\r\n canvas.width = canvasWidth\r\n canvas.height = canvasHeight\r\n const ctx = canvas.getContext('2d')\r\n const img = new Image()\r\n const plateImageModule = await import(`./assets/plate/${plateColor}.png`)\r\n img.src = plateImageModule.default\r\n img.onload = function() {\r\n ctx?.drawImage(img, 0, 0, canvasWidth, canvasHeight)\r\n element.appendChild(canvas)\r\n }\r\n\r\n const plateInfo = platesInfo[plateColor]\r\n\r\n ;[...plateNumber].forEach(async (char, index) => {\r\n //单个字符信息\r\n const fontInfo = plateInfo.fonts[index]\r\n if (!fontInfo) return\r\n\r\n const img = new Image()\r\n const charModule = await import(`./assets/font/140_${char}.jpg`)\r\n img.src = charModule.default\r\n img.onload = () => {\r\n plateRenderer.extractFontToCanvas(img, canvas, plateInfo.fontColor, canvasWidth * fontInfo.width, canvasHeight * fontInfo.height, canvasWidth * fontInfo.left, canvasHeight * fontInfo.top)\r\n }\r\n })\r\n }\r\n\r\n extractFontToCanvas(img: HTMLImageElement, targetCanvas: HTMLCanvasElement, fontColor: string, width?: number, height?: number, x?: number, y?: number) {\r\n width = width || img.width\r\n height = height || img.height\r\n\r\n const tempCanvas = document.createElement('canvas');\r\n tempCanvas.width = img.naturalWidth || img.width;\r\n tempCanvas.height = img.naturalHeight || img.height;\r\n const tempCtx = tempCanvas.getContext('2d');\r\n if (!tempCtx) throw new Error('Canvas 2D context not supported')\r\n tempCtx.drawImage(img, 0, 0);\r\n\r\n // 黑字白底 → 字色 + 透明背景,灰边保留为半透明\r\n const imageData = tempCtx.getImageData(0, 0, tempCanvas.width, tempCanvas.height);\r\n keyBlackToAlpha(imageData, hexToRgb(fontColor));\r\n tempCtx.putImageData(imageData, 0, 0);\r\n\r\n const ctx = targetCanvas.getContext('2d');\r\n if (!ctx) throw new Error('Canvas 2D context not supported')\r\n ctx.imageSmoothingEnabled = true;\r\n ctx.imageSmoothingQuality = 'high';\r\n ctx.drawImage(tempCanvas, x || 0, y || 0, width, height);\r\n }\r\n}"],"mappings":"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"}
package/dist/main.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ export interface Rgb {
2
+ r: number;
3
+ g: number;
4
+ b: number;
5
+ }
6
+ export interface KeyOptions {
7
+ /** 亮度 <= solid 的像素完全不透明(字身) */
8
+ solid?: number;
9
+ /** 亮度 >= clear 的像素完全透明(背景) */
10
+ clear?: number;
11
+ }
12
+ /**
13
+ * 把「黑字白底」的原图转成「指定颜色 + 透明背景」,并保留原图边缘的灰度过渡。
14
+ *
15
+ * @param imageData getImageData() 的结果,原地修改
16
+ * @param fontColor 目标字色
17
+ */
18
+ export declare function keyBlackToAlpha(imageData: ImageData, fontColor: Rgb, options?: KeyOptions): void;
19
+ export declare function hexToRgb(hex: string): {
20
+ r: number;
21
+ g: number;
22
+ b: number;
23
+ };
package/package.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "plate-renderer",
3
+ "version": "0.0.3",
4
+ "type": "module",
5
+ "module": "./dist/index.js",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "scripts": {
15
+ "dev": "vite",
16
+ "build": "tsc && vite build",
17
+ "preview": "vite preview",
18
+ "build:es": "vite build --config vite.config.es.ts",
19
+ "build:umd": "vite build --config vite.config.umd.ts"
20
+ },
21
+ "devDependencies": {
22
+ "typescript": "~6.0.2",
23
+ "vite": "^8.1.1",
24
+ "vite-plugin-dts": "^5.0.3"
25
+ },
26
+ "files": [
27
+ "dist"
28
+ ]
29
+ }