实际上你裁剪了画布的渲染。
要保存裁剪区域,您必须使用Canvas.toDataURL() 方法 http://fabricjs.com/docs/fabric.Canvas.html#toDataURL,如你所见,有参数top, left, width, height
只需使用与您输入相同的内容即可ctx.rect(left, top, width, height)
它会返回一个表示裁剪区域的字符串(base64 编码)。
然后使用这个字符串作为画布的新背景图像Canvas.setBackgroundImage http://fabricjs.com/docs/fabric.Canvas.html#setBackgroundImage
您的代码应如下所示:
function crop(url, name, left, top, width, height, callback) {
var c = document.createElement('canvas')
var id = "canvas_" + name
c.id = id
var canvas = new fabric.Canvas(id)
fabric.Image.fromURL(url, function(oImg) {
oImg.set({
selectable:false,
})
canvas.setDimensions({width:oImg.width, height:oImg.height})
canvas.add(oImg)
canvas.centerObject(oImg)
canvas.renderAll()
var img = canvas.toDataURL({
format: 'image/png',
left: left,
right: right,
width: width,
height: height
})
console.log(img)
canvas.setBackgroundImage(img)
callback(img)
}, {crossOrigin: "Anonymous"})
}