Canvas 从织物上拉丝后去除颜色会留下锯齿状的边缘

Canvas 从织物上拉丝后去除颜色会留下锯齿状的边缘,canvas,html5-canvas,png,fabricjs,antialiasing,Canvas,Html5 Canvas,Png,Fabricjs,Antialiasing,在Fabric JS画布上完成绘制后,我需要删除特定颜色,然后将结果作为png导出到API。因此,我将数据粘贴到另一个普通HTML5画布上,并使用以下功能: removeColour: (context, color, width, height) -> ctx = context widthInt = parseInt(width, 10) heightInt = parseInt(height, 10) canvasDat

在Fabric JS画布上完成绘制后,我需要删除特定颜色,然后将结果作为png导出到API。因此,我将数据粘贴到另一个普通HTML5画布上,并使用以下功能:

removeColour: (context, color, width, height) ->
        ctx = context
        widthInt = parseInt(width, 10)
        heightInt = parseInt(height, 10)
        canvasData = ctx.getImageData(0, 0, widthInt, heightInt)
        pix = canvasData.data
        i = 0
        n = pix.length
        while i < n
            if @isApprox(pix[i], color[0], 60) and @isApprox(pix[i + 1], color[1], 60) and @isApprox(pix[i + 2], color[2], 60)
                pix[i + 3] = 0  # Setting alpha to zero i.e. making it transparent
            i += 4
        ctx.putImageData canvasData, 0, 0
        return
removeColour:(上下文、颜色、宽度、高度)->
ctx=上下文
宽度int=parseInt(宽度,10)
heightInt=parseInt(高度,10)
canvasData=ctx.getImageData(0,0,widthInt,heightInt)
pix=canvasData.data
i=0
n=pix.length
而我
如果@isApprox(pix[i],color[0],60)和@isApprox(pix[i+1],color[1],60)和@isApprox(pix[i+2],color[2],60)
pix[i+3]=0#将alpha设置为零,即使其透明
i+=4
ctx.putImageData画布数据,0,0
返回
@isApprox()只是一种允许删除附近阴影的方法,否则它们将沿边缘保留

我知道这些附近的颜色是通过画布添加的,以平滑边缘,但是在删除导出的图像后,会留下可怕的锯齿线,如以下屏幕截图所示:

我认为必须有另一种选择,因为形状中的其他边缘(例如外部曲线)不是锯齿状的。只有在颜色被去除并替换为透明的地方,这种情况才会发生。(背景可见的部分。)

从中导出的画布上的源图形如下所示:

请注意,在源图中,要去除的颜色部分([232232232]或#E8E8E8)非常平滑,没有锯齿线

我在这里阅读了几乎所有的抗锯齿线程,并尝试更改
globalCompositeOperation
,但似乎没有效果

有没有办法去除锯齿状的边缘?对于绘画,我使用简单的铅笔刷在织物JS。即使画笔像矩形一样移动并且不产生曲线,也可以