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.
- package/README.md +42 -0
- package/dist/140_0-P4kPL3qg.js +6 -0
- package/dist/140_0-P4kPL3qg.js.map +1 -0
- package/dist/140_1-DTCEP18C.js +6 -0
- package/dist/140_1-DTCEP18C.js.map +1 -0
- package/dist/140_2-jCbTymCM.js +6 -0
- package/dist/140_2-jCbTymCM.js.map +1 -0
- package/dist/140_3-DVPX5swr.js +6 -0
- package/dist/140_3-DVPX5swr.js.map +1 -0
- package/dist/140_4-CY3aiRoa.js +6 -0
- package/dist/140_4-CY3aiRoa.js.map +1 -0
- package/dist/140_5-CaYieX8z.js +6 -0
- package/dist/140_5-CaYieX8z.js.map +1 -0
- package/dist/140_6-RoEaG1mC.js +6 -0
- package/dist/140_6-RoEaG1mC.js.map +1 -0
- package/dist/140_7-LcqrVA6X.js +6 -0
- package/dist/140_7-LcqrVA6X.js.map +1 -0
- package/dist/140_8-ODrXpep4.js +6 -0
- package/dist/140_8-ODrXpep4.js.map +1 -0
- package/dist/140_9-JwkcXozu.js +6 -0
- package/dist/140_9-JwkcXozu.js.map +1 -0
- package/dist/140_A-CXkIw5WE.js +6 -0
- package/dist/140_A-CXkIw5WE.js.map +1 -0
- package/dist/140_B-Disv-WCR.js +6 -0
- package/dist/140_B-Disv-WCR.js.map +1 -0
- package/dist/140_C-B1INaeP8.js +6 -0
- package/dist/140_C-B1INaeP8.js.map +1 -0
- package/dist/140_D-CmQhgtVf.js +6 -0
- package/dist/140_D-CmQhgtVf.js.map +1 -0
- package/dist/140_E-CnmM7mgG.js +6 -0
- package/dist/140_E-CnmM7mgG.js.map +1 -0
- package/dist/140_F-m6iwrBy1.js +6 -0
- package/dist/140_F-m6iwrBy1.js.map +1 -0
- package/dist/140_G-uR9QE4Su.js +6 -0
- package/dist/140_G-uR9QE4Su.js.map +1 -0
- package/dist/140_H-nJkstUeX.js +6 -0
- package/dist/140_H-nJkstUeX.js.map +1 -0
- package/dist/140_J-G5MYpmYx.js +6 -0
- package/dist/140_J-G5MYpmYx.js.map +1 -0
- package/dist/140_K-ByWSsRGa.js +6 -0
- package/dist/140_K-ByWSsRGa.js.map +1 -0
- package/dist/140_L-D25verQ5.js +6 -0
- package/dist/140_L-D25verQ5.js.map +1 -0
- package/dist/140_M-Bal3rxCL.js +6 -0
- package/dist/140_M-Bal3rxCL.js.map +1 -0
- package/dist/140_N-axDnHiDN.js +6 -0
- package/dist/140_N-axDnHiDN.js.map +1 -0
- package/dist/140_P-CQiovL9o.js +6 -0
- package/dist/140_P-CQiovL9o.js.map +1 -0
- package/dist/140_Q-BYOFbTka.js +6 -0
- package/dist/140_Q-BYOFbTka.js.map +1 -0
- package/dist/140_R-Bpf0qwjS.js +6 -0
- package/dist/140_R-Bpf0qwjS.js.map +1 -0
- package/dist/140_S-DgN1PKgi.js +6 -0
- package/dist/140_S-DgN1PKgi.js.map +1 -0
- package/dist/140_T-BBb0sue1.js +6 -0
- package/dist/140_T-BBb0sue1.js.map +1 -0
- package/dist/140_U-DpGlbFk5.js +6 -0
- package/dist/140_U-DpGlbFk5.js.map +1 -0
- package/dist/140_V-CoAf3jFC.js +6 -0
- package/dist/140_V-CoAf3jFC.js.map +1 -0
- package/dist/140_W-D2zLOs7z.js +6 -0
- package/dist/140_W-D2zLOs7z.js.map +1 -0
- package/dist/140_X-XGOqDUpP.js +6 -0
- package/dist/140_X-XGOqDUpP.js.map +1 -0
- package/dist/140_Y-BFe_xB7m.js +6 -0
- package/dist/140_Y-BFe_xB7m.js.map +1 -0
- package/dist/140_Z-CIa6xvYU.js +6 -0
- package/dist/140_Z-CIa6xvYU.js.map +1 -0
- package/dist/140_/344/272/221-kgdmbX-K.js +6 -0
- package/dist/140_/344/272/221-kgdmbX-K.js.map +1 -0
- package/dist/140_/344/272/254-C8KyFk2Z.js +6 -0
- package/dist/140_/344/272/254-C8KyFk2Z.js.map +1 -0
- package/dist/140_/344/275/277-DtqoHEFk.js +6 -0
- package/dist/140_/344/275/277-DtqoHEFk.js.map +1 -0
- package/dist/140_/345/206/200-C0v5IzOg.js +6 -0
- package/dist/140_/345/206/200-C0v5IzOg.js.map +1 -0
- package/dist/140_/345/220/211-DKiyMBdo.js +6 -0
- package/dist/140_/345/220/211-DKiyMBdo.js.map +1 -0
- package/dist/140_/345/255/246-DE_uqkJx.js +6 -0
- package/dist/140_/345/255/246-DE_uqkJx.js.map +1 -0
- package/dist/140_/345/256/201-BOWus8aO.js +6 -0
- package/dist/140_/345/256/201-BOWus8aO.js.map +1 -0
- package/dist/140_/345/267/235-D62FOQbo.js +6 -0
- package/dist/140_/345/267/235-D62FOQbo.js.map +1 -0
- package/dist/140_/346/214/202-BtmqLukI.js +6 -0
- package/dist/140_/346/214/202-BtmqLukI.js.map +1 -0
- package/dist/140_/346/226/260-CO8Y7gZS.js +6 -0
- package/dist/140_/346/226/260-CO8Y7gZS.js.map +1 -0
- package/dist/140_/346/231/213-c8Qu7FUY.js +6 -0
- package/dist/140_/346/231/213-c8Qu7FUY.js.map +1 -0
- package/dist/140_/346/241/202-CMPgmxCR.js +6 -0
- package/dist/140_/346/241/202-CMPgmxCR.js.map +1 -0
- package/dist/140_/346/262/252-DBux4eNb.js +6 -0
- package/dist/140_/346/262/252-DBux4eNb.js.map +1 -0
- package/dist/140_/346/264/245-DFSGUpVY.js +6 -0
- package/dist/140_/346/264/245-DFSGUpVY.js.map +1 -0
- package/dist/140_/346/265/231-DFu_rWY1.js +6 -0
- package/dist/140_/346/265/231-DFu_rWY1.js.map +1 -0
- package/dist/140_/346/270/235-DuxEwn1O.js +6 -0
- package/dist/140_/346/270/235-DuxEwn1O.js.map +1 -0
- package/dist/140_/346/270/257-CHojvW9O.js +6 -0
- package/dist/140_/346/270/257-CHojvW9O.js.map +1 -0
- package/dist/140_/346/271/230-Cdv-oyzI.js +6 -0
- package/dist/140_/346/271/230-Cdv-oyzI.js.map +1 -0
- package/dist/140_/346/276/263-DFRB-Yn2.js +6 -0
- package/dist/140_/346/276/263-DFRB-Yn2.js.map +1 -0
- package/dist/140_/347/220/274-CQm-WC1u.js +6 -0
- package/dist/140_/347/220/274-CQm-WC1u.js.map +1 -0
- package/dist/140_/347/224/230-BUkPIiZ8.js +6 -0
- package/dist/140_/347/224/230-BUkPIiZ8.js.map +1 -0
- package/dist/140_/347/232/226-9fopHcW7.js +6 -0
- package/dist/140_/347/232/226-9fopHcW7.js.map +1 -0
- package/dist/140_/347/262/244-2ns8bhVd.js +6 -0
- package/dist/140_/347/262/244-2ns8bhVd.js.map +1 -0
- package/dist/140_/350/213/217-EUfraRZi.js +6 -0
- package/dist/140_/350/213/217-EUfraRZi.js.map +1 -0
- package/dist/140_/350/222/231-CkJ-t9wg.js +6 -0
- package/dist/140_/350/222/231-CkJ-t9wg.js.map +1 -0
- package/dist/140_/350/227/217-Dq5D6Lv3.js +6 -0
- package/dist/140_/350/227/217-Dq5D6Lv3.js.map +1 -0
- package/dist/140_/350/255/246-H0oi8otX.js +6 -0
- package/dist/140_/350/255/246-H0oi8otX.js.map +1 -0
- package/dist/140_/350/261/253-DJWBm_In.js +6 -0
- package/dist/140_/350/261/253-DJWBm_In.js.map +1 -0
- package/dist/140_/350/264/265-BDGfR20s.js +6 -0
- package/dist/140_/350/264/265-BDGfR20s.js.map +1 -0
- package/dist/140_/350/265/243-COVrRPUN.js +6 -0
- package/dist/140_/350/265/243-COVrRPUN.js.map +1 -0
- package/dist/140_/350/276/275-BUN-YOpd.js +6 -0
- package/dist/140_/350/276/275-BUN-YOpd.js.map +1 -0
- package/dist/140_/351/204/202-Cal-CFv1.js +6 -0
- package/dist/140_/351/204/202-Cal-CFv1.js.map +1 -0
- package/dist/140_/351/227/275-CFO4mbFG.js +6 -0
- package/dist/140_/351/227/275-CFO4mbFG.js.map +1 -0
- package/dist/140_/351/231/225-9Q3bBxvG.js +6 -0
- package/dist/140_/351/231/225-9Q3bBxvG.js.map +1 -0
- package/dist/140_/351/235/222-DkZ2Y3hY.js +6 -0
- package/dist/140_/351/235/222-DkZ2Y3hY.js.map +1 -0
- package/dist/140_/351/242/206-Co-UB_h4.js +6 -0
- package/dist/140_/351/242/206-Co-UB_h4.js.map +1 -0
- package/dist/140_/351/262/201-CqP1XyHK.js +6 -0
- package/dist/140_/351/262/201-CqP1XyHK.js.map +1 -0
- package/dist/140_/351/273/221-CYdj5TYf.js +6 -0
- package/dist/140_/351/273/221-CYdj5TYf.js.map +1 -0
- package/dist/blue-DbOV5aNY.js +6 -0
- package/dist/blue-DbOV5aNY.js.map +1 -0
- package/dist/config/platesInfo.d.ts +14 -0
- package/dist/green-CxNHC5qT.js +6 -0
- package/dist/green-CxNHC5qT.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +255 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +1 -0
- package/dist/utils/imageProcess.d.ts +23 -0
- 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
|
+
}
|