Canvas 高质量绘制图像 - Javascript
Canvas drawImage with high quality - Javascript
我正在使用 konva.js 在 HTML Canvas 上绘制元素。当用户在 canvas 中完成其设计时,可以将创作导出为 PDF 文件。在这种情况下,我的 HTML 结构如下:
- a div "canvas" 追加所有 canvas
- a div "canvas0/canvas1" 等等追加每个 konva-canvas
- 自动生成的div“konvajs-content”
- 最后,多个 canvas 取决于层数
因此,要导出 PDF,我必须遍历每个 div“canvas + 数字”,然后遍历每个 canvas 子节点以使用 getContext('2d' ) 和 drawImage 函数用每个 canvas 的内容绘制图像(希望这个描述不会太混乱...)。
好吧,我可以根据绘制的 canvas 数量导出多页 pdf,但是从 canvas 绘制的图像质量很差。最后,我的疑问是,如何才能导出更高质量的文件?
我有一个提高分辨率的小窍门。
step 1
像这样使 canvas 大两倍:
canvas.width=innerWidth*2;
canvas.height=innerHeight*2;
step 2
要使 canvas 覆盖整个宽度,请像这样从 css 设置其宽度和高度:
canvas{ width:100%; }
就是这样。最后你将图像分辨率加倍,并确保你在 css 中使用 width:100%;
而不是在 html.
中使用它的属性
希望对你有用。
如果您正在使用 Konva
,您应该使用其方法进行导出。
stage.toDataURL()
如果您想提高输出图像的质量,可以使用 pixelRatio
属性。
// it will produce 4x bigger image
stage.toDataURL({ pixelRatio: 2})
https://konvajs.org/docs/data_and_serialization/High-Quality-Export.html
我正在使用 konva.js 在 HTML Canvas 上绘制元素。当用户在 canvas 中完成其设计时,可以将创作导出为 PDF 文件。在这种情况下,我的 HTML 结构如下:
- a div "canvas" 追加所有 canvas
- a div "canvas0/canvas1" 等等追加每个 konva-canvas
- 自动生成的div“konvajs-content”
- 最后,多个 canvas 取决于层数
因此,要导出 PDF,我必须遍历每个 div“canvas + 数字”,然后遍历每个 canvas 子节点以使用 getContext('2d' ) 和 drawImage 函数用每个 canvas 的内容绘制图像(希望这个描述不会太混乱...)。
好吧,我可以根据绘制的 canvas 数量导出多页 pdf,但是从 canvas 绘制的图像质量很差。最后,我的疑问是,如何才能导出更高质量的文件?
我有一个提高分辨率的小窍门。
step 1
像这样使 canvas 大两倍:
canvas.width=innerWidth*2;
canvas.height=innerHeight*2;
step 2
要使 canvas 覆盖整个宽度,请像这样从 css 设置其宽度和高度:
canvas{ width:100%; }
就是这样。最后你将图像分辨率加倍,并确保你在 css 中使用 width:100%;
而不是在 html.
希望对你有用。
如果您正在使用 Konva
,您应该使用其方法进行导出。
stage.toDataURL()
如果您想提高输出图像的质量,可以使用 pixelRatio
属性。
// it will produce 4x bigger image
stage.toDataURL({ pixelRatio: 2})
https://konvajs.org/docs/data_and_serialization/High-Quality-Export.html