javascript – 如何强制imageSmoothingEnabled为false

我正在使用几个分层画布加上fabric.js画布,如下所示:

<canvas id="grid" width="1401" height="785"></canvas>
<div class="canvas-container" style="width: 1401px; height: 785px; position: relative; -webkit-user-select: none;">
  <canvas id="fabric_canvas" class="lower-canvas" width="1401" height="785" style="position: absolute; width: 1401px; height: 785px; left: 0px; top: 0px; -webkit-user-select: none;"></canvas>
  <canvas class="upper-canvas " width="1401" height="785" style="position: absolute; width: 1401px; height: 785px; left: 0px; top: 0px; -webkit-user-select: none; cursor: default;"></canvas>
</div>
<canvas id="keys" width="79" height="512"></canvas>
<canvas id="ruler" width="1024" height="50"></canvas>
<canvas class="helper" width="1401" height="785"></canvas>

所有这些画布上下文都将属性imageSmoothingEnabled设置为false但由于未知原因,始终为所有画布启用平滑并查询ctx.imageSmoothingEnabled返回true,即使它之前设置为false也是如此.

它似乎与fabric.js相关,因为当我没有初始化fabric.js画布时,imageSmoothingEnabled为false,但是一旦我初始化它,它们都被设置为true.

在Google Chrome下始终启用平滑,但在Firefox下,当我移动fabric.js画布视口(平移)或移动对象时,平滑会发生变化(开/关).

我使用此代码关闭标准画布的图像平滑(以及初始化后的fabric.js):

ctx.mozImageSmoothingEnabled    = false;
ctx.oImageSmoothingEnabled      = false;
ctx.webkitImageSmoothingEnabled = false;
ctx.msImageSmoothingEnabled     = false;
ctx.imageSmoothingEnabled       = false;

我也用它来为fabric.js画布设置图像平滑:

c_fabric = new fabric.Canvas("fabric_canvas", {
    imageSmoothingEnabled: false
});

为什么会这样?
如何禁用图像平滑效果好?

解决方法:

经过几个小时的测试和调试后,问题解决了,显然需要在每个画布调整大小后再次设置imageSmoothingEnabled属性,这样就完全没有与fabric.js相关了,当通过setDimensions更改fabric.js画布尺寸时,库应该再次设置imageSmoothingEnabled,我会提出一个补丁.

上一篇:javascript – SVG vs CANVAS(Snap.svg vs FabricJS)


下一篇:dede使用方法----调用导航