Canvas 调整大小时绘图变形 canvas
Canvas drawing gets distorted when resizing canvas
我正在使用 html5 和 javascript 在 canvas 上进行绘图。
如果我不手动设置 canvas 宽度和高度(保留默认设置),我的绘图效果很好。
但是,当我从 css 或 javascript 设置 canvas 大小时,我的绘图看起来像变形了。线条开始稍微偏离线条,线条看起来扭曲了。
这里是 mousedown 事件的代码。
if (mouseDown)
{
previousX = currentX;
previousY = currentY;
currentX = e.clientX - canvas.offsetLeft;
currentY = e.clientY - canvas.offsetTop;
ctx.beginPath();
ctx.moveTo(previousX, previousY);
ctx.lineTo(currentX, currentY);
ctx.strokeStyle = color;
ctx.lineWidth = y;
ctx.stroke();
ctx.closePath();
}
canvas API 仅适用于光栅绘图。这就是为什么它在调整大小时不保持清晰度的原因。值得期待。
如果您想生成矢量,则必须改用 SVG(可缩放矢量图形)。但是 SVG 不支持绘图。生成 SVG 基本上是通过 XML,所以它不像 canvas API 那样灵活。
这是一个库,可以帮助您完成 canvas 向量中的绘图:
"Paper.js is an open source vector graphics scripting framework that runs on top of the HTML5 Canvas."
这是另一个线程,它列举了更多选项:
HTML5 Canvas Vector Graphics?
您必须使用正确的 properties/attributes 设置 canvas 的大小。
Canvas 是带有位图的元素。如果您使用 CSS 或样式,您将只缩放元素,而不缩放位图。结果是一张模糊的图像。
通过这样做设置正确的大小(通常不需要 CSS):
<canvas width=800 height=800></canvas>
或 JavaScript:
canvas.width = 800; // example size
canvas.height = 800;
如果您使用 CSS,使用元素中的规则或样式属性来缩放 canvas,您只会将 300x150 像素的位图缩放到其他图像,这会导致质量不佳.始终缩放 位图 然后重绘(因为 canvas 将被清除)。
我正在使用 html5 和 javascript 在 canvas 上进行绘图。
如果我不手动设置 canvas 宽度和高度(保留默认设置),我的绘图效果很好。
但是,当我从 css 或 javascript 设置 canvas 大小时,我的绘图看起来像变形了。线条开始稍微偏离线条,线条看起来扭曲了。
这里是 mousedown 事件的代码。
if (mouseDown)
{
previousX = currentX;
previousY = currentY;
currentX = e.clientX - canvas.offsetLeft;
currentY = e.clientY - canvas.offsetTop;
ctx.beginPath();
ctx.moveTo(previousX, previousY);
ctx.lineTo(currentX, currentY);
ctx.strokeStyle = color;
ctx.lineWidth = y;
ctx.stroke();
ctx.closePath();
}
canvas API 仅适用于光栅绘图。这就是为什么它在调整大小时不保持清晰度的原因。值得期待。
如果您想生成矢量,则必须改用 SVG(可缩放矢量图形)。但是 SVG 不支持绘图。生成 SVG 基本上是通过 XML,所以它不像 canvas API 那样灵活。
这是一个库,可以帮助您完成 canvas 向量中的绘图:
"Paper.js is an open source vector graphics scripting framework that runs on top of the HTML5 Canvas."
这是另一个线程,它列举了更多选项:
HTML5 Canvas Vector Graphics?
您必须使用正确的 properties/attributes 设置 canvas 的大小。
Canvas 是带有位图的元素。如果您使用 CSS 或样式,您将只缩放元素,而不缩放位图。结果是一张模糊的图像。
通过这样做设置正确的大小(通常不需要 CSS):
<canvas width=800 height=800></canvas>
或 JavaScript:
canvas.width = 800; // example size
canvas.height = 800;
如果您使用 CSS,使用元素中的规则或样式属性来缩放 canvas,您只会将 300x150 像素的位图缩放到其他图像,这会导致质量不佳.始终缩放 位图 然后重绘(因为 canvas 将被清除)。