我正在使用 Fabric.js。当我尝试使用 canvas.toDataURL('image/png') 将画布图像发送到服务器时,大约需要 40 秒。我将其转换为 blob,但也需要 25-30 秒。当我减小画布大小时,它会减小背景图像大小,但对象(文本和图像)出现在背景图像之外(减小不成比例)。我怎样才能最大限度地减少上传时间?
问问题
2419 次
2 回答
3
您需要将当前画布的快照拍摄到具有新大小的新画布:
例如,您可以这样做。
var fabricCanvas = document.getElementById('fcanvas'); //real ID here
var scaledCanvas = document.createElement('canvas'); //off-screen canvas
scaledCanvas.width = 400; //size of new canvas, make sure they are proportional
scaledCanvas.height = 300; //compared to original canvas
// scale original image to new canvas
var ctx = scaledCanvas.getContext('2d');
ctx.drawImage(fabricCanvas, 0, 0, scaledCanvas.width, scaledCanvas.height);
//extract image
var data = scaledCanvas.toDataURL(); //no need to specify PNG as that's the def.
现在您可以上传缩小版的画布。
于 2013-06-20T20:30:09.527 回答
0
toDataURL
您可以将format
属性设置为jpeg
,这将立即降低图像大小50%
canvas.toDataURL({
'format':'jpeg'
});
如果您想要更多压缩,您可以quality
为其设置属性。
canvas.toDataURL({
'format':'jpeg'
// default value of `quality` is 1 and varies from 0..1
'quality': 0.5
});
注意:
quality
属性仅适用于jpeg
格式
于 2018-05-20T09:07:55.013 回答