( element: HTMLElement, paddingV: number = 0, paddingH: number = 0 )
| 4 | * 将 DOM 元素转换为 canvas |
| 5 | */ |
| 6 | export async function captureElementToCanvas( |
| 7 | element: HTMLElement, |
| 8 | paddingV: number = 0, |
| 9 | paddingH: number = 0 |
| 10 | ): Promise<HTMLCanvasElement> { |
| 11 | const canvas = await html2canvas(element, { |
| 12 | backgroundColor: '#ffffff', |
| 13 | scale: 2, |
| 14 | logging: false, |
| 15 | useCORS: true |
| 16 | }) |
| 17 | |
| 18 | if (paddingV === 0 && paddingH === 0) { |
| 19 | return canvas |
| 20 | } |
| 21 | |
| 22 | // Create a new canvas with padding |
| 23 | const paddedCanvas = document.createElement('canvas') |
| 24 | paddedCanvas.width = canvas.width + 2 * paddingH |
| 25 | paddedCanvas.height = canvas.height + 2 * paddingV |
| 26 | const ctx = paddedCanvas.getContext('2d') |
| 27 | |
| 28 | if (!ctx) { |
| 29 | throw new Error('Failed to get 2D context') |
| 30 | } |
| 31 | |
| 32 | // Fill the background |
| 33 | ctx.fillStyle = '#ffffff' |
| 34 | ctx.fillRect(0, 0, paddedCanvas.width, paddedCanvas.height) |
| 35 | |
| 36 | // Draw the original canvas with padding |
| 37 | ctx.drawImage(canvas, paddingH, paddingV) |
| 38 | |
| 39 | return paddedCanvas |
| 40 | } |
| 41 | |
| 42 | /** |
| 43 | * 将 canvas 转换为 blob |
no test coverage detected