【发布时间】:2011-04-02 09:12:14
【问题描述】:
我有一个 HTML 画布元素,当用户调整屏幕大小时它会调整大小。
canvas.height = pageHeight();
canvas.width = pageWidth();
实际调整大小可以正常工作,但会使画布空白。
我想保留内容。是否有另一种更改画布元素大小的方法,或者有没有办法存储内容然后将它们绘制回画布?
【问题讨论】:
标签: javascript html canvas
我有一个 HTML 画布元素,当用户调整屏幕大小时它会调整大小。
canvas.height = pageHeight();
canvas.width = pageWidth();
实际调整大小可以正常工作,但会使画布空白。
我想保留内容。是否有另一种更改画布元素大小的方法,或者有没有办法存储内容然后将它们绘制回画布?
【问题讨论】:
标签: javascript html canvas
您需要使用 CSS 调整画布大小,或者在调整大小后重新绘制画布。
如果你想保存画布的内容并重新绘制它,我可以想到几个选项:
context.getImageData 抓取整个画布,调整画布大小,然后使用context.putImageData 以新的比例重新绘制。Image 对象,将源设置为canvas.toDataUrl() 的结果,调整画布大小,然后以新的比例绘制图像。context.setScale(xscale, yscale) 并调用您最初用来绘制画布的任何函数。假设您正确设置了 xscale 和 yscale,它会自动将所有内容缩放到新大小。context.drawImage(oldCanvas, ...) 将旧画布复制到新画布上。然后你可以用新的画布换掉旧画布。如果您随时将来自不同域的图像绘制到画布上,前两个选项将不起作用,并且旧实现不支持。
在我看来,如果可能的话,选项 3(以新比例重绘图像)是最好的。它是唯一能让您的线条保持完全平滑和锐利的选项,并且它始终有效(假设您仍然拥有生成图像的所有信息)。
【讨论】: