我有一个HTML画布元素,当用户调整屏幕大小时它会被重新调整大小。
canvas.height = pageHeight();
canvas.width = pageWidth();
实际的调整大小功能正常,但它会清空画布。
我想保留画布内的内容。有没有其他方法可以改变画布元素的大小,或者有没有一种方式可以存储内容,然后将其重新绘制到画布上?
我有一个HTML画布元素,当用户调整屏幕大小时它会被重新调整大小。
canvas.height = pageHeight();
canvas.width = pageWidth();
你需要使用CSS调整画布大小或者在调整大小后重新绘制画布。
如果你想保存画布的内容并重新绘制它,我能想到以下几种选项:
context.getImageData
获取整个画布,调整画布大小,然后使用context.putImageData
在新比例下重新绘制它。Image
对象,将其源设置为canvas.toDataUrl()
的结果,调整画布大小,然后以新比例绘制图像。context.setScale(xscale, yscale)
并调用你最初用于绘制画布的任何函数。假设你正确设置了xscale
和yscale
,它将自动缩放所有内容至新的大小。context.drawImage(oldCanvas, ...)
来将旧画布复制到新画布上。然后你可以用新画布替换旧画布。如果你曾经在画布上绘制来自其他域的图像或者你的实现不支持,前两种选项都无法使用。
在我看来,选项3(在新比例下重新绘制图像)是最好的选择,如果可能的话。它是唯一一个可以保持线条完全平滑和清晰的选项,并且它总是可行的(假设你仍然有生成图像所需的所有信息)。