html2canvas-pro 1.6.7 → 2.0.1
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 +1 -0
- package/demo/image-smoothing-demo.html +256 -0
- package/demo/refactoring-test.html +602 -0
- package/dist/html2canvas-pro.esm.js +3391 -1491
- package/dist/html2canvas-pro.esm.js.map +1 -1
- package/dist/html2canvas-pro.js +3394 -1490
- package/dist/html2canvas-pro.js.map +1 -1
- package/dist/html2canvas-pro.min.js +5 -4
- package/dist/lib/__tests__/index.js +8 -2
- package/dist/lib/__tests__/index.js.map +1 -1
- package/dist/lib/config.js +72 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/core/__tests__/cache-storage.js +6 -3
- package/dist/lib/core/__tests__/cache-storage.js.map +1 -1
- package/dist/lib/core/__tests__/cache-storage.test.js +158 -0
- package/dist/lib/core/__tests__/cache-storage.test.js.map +1 -0
- package/dist/lib/core/__tests__/validator.js +296 -0
- package/dist/lib/core/__tests__/validator.js.map +1 -0
- package/dist/lib/core/cache-storage.js +130 -11
- package/dist/lib/core/cache-storage.js.map +1 -1
- package/dist/lib/core/context.js +5 -2
- package/dist/lib/core/context.js.map +1 -1
- package/dist/lib/core/debugger.js +3 -0
- package/dist/lib/core/debugger.js.map +1 -1
- package/dist/lib/core/origin-checker.js +54 -0
- package/dist/lib/core/origin-checker.js.map +1 -0
- package/dist/lib/core/performance-monitor.js +208 -0
- package/dist/lib/core/performance-monitor.js.map +1 -0
- package/dist/lib/core/validator.js +501 -0
- package/dist/lib/core/validator.js.map +1 -0
- package/dist/lib/css/index.js +4 -0
- package/dist/lib/css/index.js.map +1 -1
- package/dist/lib/css/property-descriptors/__tests__/background-tests.js +7 -1
- package/dist/lib/css/property-descriptors/__tests__/background-tests.js.map +1 -1
- package/dist/lib/css/property-descriptors/__tests__/clip-path.test.js +273 -0
- package/dist/lib/css/property-descriptors/__tests__/clip-path.test.js.map +1 -0
- package/dist/lib/css/property-descriptors/__tests__/image-rendering-integration.test.js +142 -0
- package/dist/lib/css/property-descriptors/__tests__/image-rendering-integration.test.js.map +1 -0
- package/dist/lib/css/property-descriptors/__tests__/image-rendering-performance.test.js +167 -0
- package/dist/lib/css/property-descriptors/__tests__/image-rendering-performance.test.js.map +1 -0
- package/dist/lib/css/property-descriptors/__tests__/image-rendering.test.js +61 -0
- package/dist/lib/css/property-descriptors/__tests__/image-rendering.test.js.map +1 -0
- package/dist/lib/css/property-descriptors/clip-path.js +190 -0
- package/dist/lib/css/property-descriptors/clip-path.js.map +1 -0
- package/dist/lib/css/property-descriptors/image-rendering.js +34 -0
- package/dist/lib/css/property-descriptors/image-rendering.js.map +1 -0
- package/dist/lib/css/types/__tests__/image-tests.js +7 -1
- package/dist/lib/css/types/__tests__/image-tests.js.map +1 -1
- package/dist/lib/css/types/color-math.js +26 -0
- package/dist/lib/css/types/color-math.js.map +1 -0
- package/dist/lib/css/types/color-spaces/srgb.js +6 -6
- package/dist/lib/css/types/color-spaces/srgb.js.map +1 -1
- package/dist/lib/css/types/color-utilities.js +13 -22
- package/dist/lib/css/types/color-utilities.js.map +1 -1
- package/dist/lib/dom/__tests__/dom-normalizer.test.js +113 -0
- package/dist/lib/dom/__tests__/dom-normalizer.test.js.map +1 -0
- package/dist/lib/dom/__tests__/element-container.test.js +109 -0
- package/dist/lib/dom/__tests__/element-container.test.js.map +1 -0
- package/dist/lib/dom/document-cloner.js +3 -3
- package/dist/lib/dom/document-cloner.js.map +1 -1
- package/dist/lib/dom/dom-normalizer.js +116 -0
- package/dist/lib/dom/dom-normalizer.js.map +1 -0
- package/dist/lib/dom/element-container.js +32 -15
- package/dist/lib/dom/element-container.js.map +1 -1
- package/dist/lib/dom/node-parser.js +16 -20
- package/dist/lib/dom/node-parser.js.map +1 -1
- package/dist/lib/dom/node-type-guards.js +44 -0
- package/dist/lib/dom/node-type-guards.js.map +1 -0
- package/dist/lib/dom/replaced-elements/iframe-element-container.js +5 -4
- package/dist/lib/dom/replaced-elements/iframe-element-container.js.map +1 -1
- package/dist/lib/index.js +148 -41
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/render/canvas/__tests__/background-renderer.test.js +65 -0
- package/dist/lib/render/canvas/__tests__/background-renderer.test.js.map +1 -0
- package/dist/lib/render/canvas/__tests__/border-renderer.test.js +23 -0
- package/dist/lib/render/canvas/__tests__/border-renderer.test.js.map +1 -0
- package/dist/lib/render/canvas/__tests__/effects-renderer.test.js +30 -0
- package/dist/lib/render/canvas/__tests__/effects-renderer.test.js.map +1 -0
- package/dist/lib/render/canvas/__tests__/text-renderer.test.js +310 -0
- package/dist/lib/render/canvas/__tests__/text-renderer.test.js.map +1 -0
- package/dist/lib/render/canvas/background-renderer.js +222 -0
- package/dist/lib/render/canvas/background-renderer.js.map +1 -0
- package/dist/lib/render/canvas/border-renderer.js +185 -0
- package/dist/lib/render/canvas/border-renderer.js.map +1 -0
- package/dist/lib/render/canvas/canvas-renderer.js +61 -689
- package/dist/lib/render/canvas/canvas-renderer.js.map +1 -1
- package/dist/lib/render/canvas/effects-renderer.js +94 -0
- package/dist/lib/render/canvas/effects-renderer.js.map +1 -0
- package/dist/lib/render/canvas/text-renderer.js +575 -0
- package/dist/lib/render/canvas/text-renderer.js.map +1 -0
- package/dist/lib/render/effects.js +17 -1
- package/dist/lib/render/effects.js.map +1 -1
- package/dist/lib/render/renderer-interface.js +3 -0
- package/dist/lib/render/renderer-interface.js.map +1 -0
- package/dist/lib/render/stacking-context.js +131 -0
- package/dist/lib/render/stacking-context.js.map +1 -1
- package/dist/types/config.d.ts +54 -0
- package/dist/types/core/__tests__/cache-storage.test.d.ts +1 -0
- package/dist/types/core/__tests__/validator.d.ts +1 -0
- package/dist/types/core/cache-storage.d.ts +42 -1
- package/dist/types/core/context.d.ts +5 -1
- package/dist/types/core/origin-checker.d.ts +33 -0
- package/dist/types/core/performance-monitor.d.ts +131 -0
- package/dist/types/core/validator.d.ts +132 -0
- package/dist/types/css/index.d.ts +4 -0
- package/dist/types/css/property-descriptors/__tests__/clip-path.test.d.ts +1 -0
- package/dist/types/css/property-descriptors/__tests__/image-rendering-integration.test.d.ts +1 -0
- package/dist/types/css/property-descriptors/__tests__/image-rendering-performance.test.d.ts +1 -0
- package/dist/types/css/property-descriptors/__tests__/image-rendering.test.d.ts +1 -0
- package/dist/types/css/property-descriptors/clip-path.d.ts +62 -0
- package/dist/types/css/property-descriptors/image-rendering.d.ts +8 -0
- package/dist/types/css/types/color-math.d.ts +12 -0
- package/dist/types/css/types/color-utilities.d.ts +2 -3
- package/dist/types/dom/__tests__/dom-normalizer.test.d.ts +1 -0
- package/dist/types/dom/__tests__/element-container.test.d.ts +1 -0
- package/dist/types/dom/dom-normalizer.d.ts +62 -0
- package/dist/types/dom/element-container.d.ts +20 -1
- package/dist/types/dom/node-parser.d.ts +2 -7
- package/dist/types/dom/node-type-guards.d.ts +33 -0
- package/dist/types/dom/replaced-elements/iframe-element-container.d.ts +4 -1
- package/dist/types/index.d.ts +48 -3
- package/dist/types/render/canvas/__tests__/background-renderer.test.d.ts +1 -0
- package/dist/types/render/canvas/__tests__/border-renderer.test.d.ts +1 -0
- package/dist/types/render/canvas/__tests__/effects-renderer.test.d.ts +1 -0
- package/dist/types/render/canvas/__tests__/text-renderer.test.d.ts +1 -0
- package/dist/types/render/canvas/background-renderer.d.ts +87 -0
- package/dist/types/render/canvas/border-renderer.d.ts +67 -0
- package/dist/types/render/canvas/canvas-renderer.d.ts +19 -23
- package/dist/types/render/canvas/effects-renderer.d.ts +65 -0
- package/dist/types/render/canvas/text-renderer.d.ts +75 -0
- package/dist/types/render/effects.d.ts +15 -1
- package/dist/types/render/renderer-interface.d.ts +26 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -28,6 +28,7 @@ html2canvas-pro is a fork of [niklasvh/html2canvas](https://github.com/niklasvh/
|
|
|
28
28
|
- support color function ```oklab()```
|
|
29
29
|
- support color function ```oklch()```
|
|
30
30
|
- Support object-fit of ```<img/>```
|
|
31
|
+
- **Image smoothing control** - Support CSS `image-rendering` property and global `imageSmoothing` option for pixel art and retro graphics
|
|
31
32
|
- Fixed some [issues](./CHANGELOG.md)
|
|
32
33
|
|
|
33
34
|
If you found this helpful, don't forget to
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Image Smoothing Demo - html2canvas-pro</title>
|
|
7
|
+
<style>
|
|
8
|
+
body {
|
|
9
|
+
font-family: Arial, sans-serif;
|
|
10
|
+
max-width: 1200px;
|
|
11
|
+
margin: 20px auto;
|
|
12
|
+
padding: 20px;
|
|
13
|
+
}
|
|
14
|
+
.demo-section {
|
|
15
|
+
margin-bottom: 40px;
|
|
16
|
+
border: 1px solid #ddd;
|
|
17
|
+
padding: 20px;
|
|
18
|
+
border-radius: 8px;
|
|
19
|
+
}
|
|
20
|
+
.demo-grid {
|
|
21
|
+
display: grid;
|
|
22
|
+
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
23
|
+
gap: 20px;
|
|
24
|
+
margin-top: 20px;
|
|
25
|
+
}
|
|
26
|
+
.demo-item {
|
|
27
|
+
border: 1px solid #ccc;
|
|
28
|
+
padding: 10px;
|
|
29
|
+
text-align: center;
|
|
30
|
+
}
|
|
31
|
+
.pixel-art {
|
|
32
|
+
width: 100px;
|
|
33
|
+
height: 100px;
|
|
34
|
+
background: linear-gradient(45deg, #ff0000 25%, #00ff00 25%, #00ff00 50%, #0000ff 50%, #0000ff 75%, #ffff00 75%);
|
|
35
|
+
margin: 10px auto;
|
|
36
|
+
}
|
|
37
|
+
.pixelated {
|
|
38
|
+
image-rendering: pixelated;
|
|
39
|
+
image-rendering: -webkit-optimize-contrast;
|
|
40
|
+
image-rendering: crisp-edges;
|
|
41
|
+
}
|
|
42
|
+
.smooth {
|
|
43
|
+
image-rendering: smooth;
|
|
44
|
+
}
|
|
45
|
+
.auto {
|
|
46
|
+
image-rendering: auto;
|
|
47
|
+
}
|
|
48
|
+
button {
|
|
49
|
+
background: #007bff;
|
|
50
|
+
color: white;
|
|
51
|
+
border: none;
|
|
52
|
+
padding: 10px 20px;
|
|
53
|
+
border-radius: 4px;
|
|
54
|
+
cursor: pointer;
|
|
55
|
+
margin: 5px;
|
|
56
|
+
}
|
|
57
|
+
button:hover {
|
|
58
|
+
background: #0056b3;
|
|
59
|
+
}
|
|
60
|
+
.output {
|
|
61
|
+
margin-top: 20px;
|
|
62
|
+
border: 1px solid #ddd;
|
|
63
|
+
padding: 10px;
|
|
64
|
+
background: #f5f5f5;
|
|
65
|
+
}
|
|
66
|
+
canvas {
|
|
67
|
+
border: 1px solid #999;
|
|
68
|
+
display: block;
|
|
69
|
+
margin: 10px auto;
|
|
70
|
+
}
|
|
71
|
+
</style>
|
|
72
|
+
</head>
|
|
73
|
+
<body>
|
|
74
|
+
<h1>Image Smoothing Demo</h1>
|
|
75
|
+
<p>This demo shows how html2canvas-pro handles different image-rendering CSS properties and global imageSmoothing options.</p>
|
|
76
|
+
|
|
77
|
+
<div class="demo-section">
|
|
78
|
+
<h2>Test 1: CSS image-rendering Property</h2>
|
|
79
|
+
<p>These images use different CSS <code>image-rendering</code> values:</p>
|
|
80
|
+
<div class="demo-grid" id="css-demo">
|
|
81
|
+
<div class="demo-item">
|
|
82
|
+
<h3>pixelated</h3>
|
|
83
|
+
<div class="pixel-art pixelated"></div>
|
|
84
|
+
<p>CSS: <code>image-rendering: pixelated</code></p>
|
|
85
|
+
</div>
|
|
86
|
+
<div class="demo-item">
|
|
87
|
+
<h3>crisp-edges</h3>
|
|
88
|
+
<div class="pixel-art" style="image-rendering: crisp-edges;"></div>
|
|
89
|
+
<p>CSS: <code>image-rendering: crisp-edges</code></p>
|
|
90
|
+
</div>
|
|
91
|
+
<div class="demo-item">
|
|
92
|
+
<h3>smooth (default)</h3>
|
|
93
|
+
<div class="pixel-art smooth"></div>
|
|
94
|
+
<p>CSS: <code>image-rendering: smooth</code></p>
|
|
95
|
+
</div>
|
|
96
|
+
<div class="demo-item">
|
|
97
|
+
<h3>auto</h3>
|
|
98
|
+
<div class="pixel-art auto"></div>
|
|
99
|
+
<p>CSS: <code>image-rendering: auto</code></p>
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
<button onclick="renderCssDemo()">Render with CSS Properties</button>
|
|
103
|
+
<div class="output" id="css-output"></div>
|
|
104
|
+
</div>
|
|
105
|
+
|
|
106
|
+
<div class="demo-section">
|
|
107
|
+
<h2>Test 2: Global imageSmoothing Option</h2>
|
|
108
|
+
<p>Same image rendered with different global options:</p>
|
|
109
|
+
<div class="demo-grid" id="global-demo">
|
|
110
|
+
<div class="demo-item">
|
|
111
|
+
<h3>Original</h3>
|
|
112
|
+
<div class="pixel-art"></div>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
<button onclick="renderWithSmoothing()">Render with Smoothing (default)</button>
|
|
116
|
+
<button onclick="renderWithoutSmoothing()">Render without Smoothing</button>
|
|
117
|
+
<button onclick="renderWithQuality()">Render with High Quality</button>
|
|
118
|
+
<div class="output" id="global-output"></div>
|
|
119
|
+
</div>
|
|
120
|
+
|
|
121
|
+
<div class="demo-section">
|
|
122
|
+
<h2>Test 3: Low Resolution Image Upscaling</h2>
|
|
123
|
+
<p>A small pixel art image upscaled to show the smoothing difference:</p>
|
|
124
|
+
<div class="demo-grid" id="upscale-demo">
|
|
125
|
+
<div class="demo-item">
|
|
126
|
+
<h3>8x8 Pixel Art</h3>
|
|
127
|
+
<canvas id="small-pixel-art" width="8" height="8"></canvas>
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
<button onclick="renderUpscaleSmooth()">Upscale with Smoothing</button>
|
|
131
|
+
<button onclick="renderUpscalePixelated()">Upscale Pixelated</button>
|
|
132
|
+
<div class="output" id="upscale-output"></div>
|
|
133
|
+
</div>
|
|
134
|
+
|
|
135
|
+
<script src="../dist/html2canvas-pro.js"></script>
|
|
136
|
+
<script>
|
|
137
|
+
// Create a simple pixel art on canvas
|
|
138
|
+
function createPixelArt() {
|
|
139
|
+
const canvas = document.getElementById('small-pixel-art');
|
|
140
|
+
const ctx = canvas.getContext('2d');
|
|
141
|
+
const colors = ['#ff0000', '#00ff00', '#0000ff', '#ffff00', '#ff00ff', '#00ffff', '#ffffff', '#000000'];
|
|
142
|
+
|
|
143
|
+
for (let y = 0; y < 8; y++) {
|
|
144
|
+
for (let x = 0; x < 8; x++) {
|
|
145
|
+
ctx.fillStyle = colors[(x + y) % colors.length];
|
|
146
|
+
ctx.fillRect(x, y, 1, 1);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
createPixelArt();
|
|
151
|
+
|
|
152
|
+
async function renderCssDemo() {
|
|
153
|
+
const element = document.getElementById('css-demo');
|
|
154
|
+
const output = document.getElementById('css-output');
|
|
155
|
+
output.innerHTML = '<p>Rendering with CSS image-rendering properties...</p>';
|
|
156
|
+
|
|
157
|
+
try {
|
|
158
|
+
const canvas = await html2canvas(element, { logging: true });
|
|
159
|
+
output.innerHTML = '<h3>Result:</h3>';
|
|
160
|
+
output.appendChild(canvas);
|
|
161
|
+
console.log('CSS demo rendered successfully');
|
|
162
|
+
} catch (error) {
|
|
163
|
+
output.innerHTML = `<p style="color: red;">Error: ${error.message}</p>`;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
async function renderWithSmoothing() {
|
|
168
|
+
const element = document.getElementById('global-demo');
|
|
169
|
+
const output = document.getElementById('global-output');
|
|
170
|
+
output.innerHTML = '<p>Rendering with smoothing enabled (default)...</p>';
|
|
171
|
+
|
|
172
|
+
try {
|
|
173
|
+
const canvas = await html2canvas(element, {
|
|
174
|
+
imageSmoothing: true,
|
|
175
|
+
logging: true
|
|
176
|
+
});
|
|
177
|
+
output.innerHTML = '<h3>Result (smoothing=true):</h3>';
|
|
178
|
+
output.appendChild(canvas);
|
|
179
|
+
} catch (error) {
|
|
180
|
+
output.innerHTML = `<p style="color: red;">Error: ${error.message}</p>`;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
async function renderWithoutSmoothing() {
|
|
185
|
+
const element = document.getElementById('global-demo');
|
|
186
|
+
const output = document.getElementById('global-output');
|
|
187
|
+
output.innerHTML = '<p>Rendering without smoothing (pixelated)...</p>';
|
|
188
|
+
|
|
189
|
+
try {
|
|
190
|
+
const canvas = await html2canvas(element, {
|
|
191
|
+
imageSmoothing: false,
|
|
192
|
+
logging: true
|
|
193
|
+
});
|
|
194
|
+
output.innerHTML = '<h3>Result (smoothing=false):</h3>';
|
|
195
|
+
output.appendChild(canvas);
|
|
196
|
+
} catch (error) {
|
|
197
|
+
output.innerHTML = `<p style="color: red;">Error: ${error.message}</p>`;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
async function renderWithQuality() {
|
|
202
|
+
const element = document.getElementById('global-demo');
|
|
203
|
+
const output = document.getElementById('global-output');
|
|
204
|
+
output.innerHTML = '<p>Rendering with high quality smoothing...</p>';
|
|
205
|
+
|
|
206
|
+
try {
|
|
207
|
+
const canvas = await html2canvas(element, {
|
|
208
|
+
imageSmoothing: true,
|
|
209
|
+
imageSmoothingQuality: 'high',
|
|
210
|
+
logging: true
|
|
211
|
+
});
|
|
212
|
+
output.innerHTML = '<h3>Result (quality=high):</h3>';
|
|
213
|
+
output.appendChild(canvas);
|
|
214
|
+
} catch (error) {
|
|
215
|
+
output.innerHTML = `<p style="color: red;">Error: ${error.message}</p>`;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
async function renderUpscaleSmooth() {
|
|
220
|
+
const canvas = document.getElementById('small-pixel-art');
|
|
221
|
+
const output = document.getElementById('upscale-output');
|
|
222
|
+
output.innerHTML = '<p>Upscaling with smoothing...</p>';
|
|
223
|
+
|
|
224
|
+
try {
|
|
225
|
+
const result = await html2canvas(canvas.parentElement, {
|
|
226
|
+
imageSmoothing: true,
|
|
227
|
+
scale: 4,
|
|
228
|
+
logging: true
|
|
229
|
+
});
|
|
230
|
+
output.innerHTML = '<h3>Result (smooth, 4x scale):</h3>';
|
|
231
|
+
output.appendChild(result);
|
|
232
|
+
} catch (error) {
|
|
233
|
+
output.innerHTML = `<p style="color: red;">Error: ${error.message}</p>`;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
async function renderUpscalePixelated() {
|
|
238
|
+
const canvas = document.getElementById('small-pixel-art');
|
|
239
|
+
const output = document.getElementById('upscale-output');
|
|
240
|
+
output.innerHTML = '<p>Upscaling without smoothing (pixelated)...</p>';
|
|
241
|
+
|
|
242
|
+
try {
|
|
243
|
+
const result = await html2canvas(canvas.parentElement, {
|
|
244
|
+
imageSmoothing: false,
|
|
245
|
+
scale: 4,
|
|
246
|
+
logging: true
|
|
247
|
+
});
|
|
248
|
+
output.innerHTML = '<h3>Result (pixelated, 4x scale):</h3>';
|
|
249
|
+
output.appendChild(result);
|
|
250
|
+
} catch (error) {
|
|
251
|
+
output.innerHTML = `<p style="color: red;">Error: ${error.message}</p>`;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
</script>
|
|
255
|
+
</body>
|
|
256
|
+
</html>
|