FabricJs画布转换为dataurl图像大小问题

3

我正在尝试使用canvas.toDataURL();从FabricJS画布创建图像。

我有PHP代码,可以从这个datauri写入实际的图像文件。

此函数从画布创建base64数据uri。在普通分辨率(已测试高达全高清)下,这将生成我设置的实际大小图像(50pxX50px)。但在4K分辨率下,它会生成双倍大小的图像。我尝试了设置乘数、高度和宽度选项,但没有成功。

我已经在jsfiddle上创建了一个示例

var canvas = new fabric.Canvas('myCanvas');
canvas.setHeight(50);
canvas.setWidth(50);
canvas.setBackgroundColor('rgb(59,173,160)');
// create a rectangle object
var rect = new fabric.Rect({
  left: 0,
  top: 0,
  fill: 'blue',
  width: 20,
  height: 20
});
// "add" rectangle onto canvas
canvas.add(rect);
var img = canvas.toDataURL({
  format: 'png',
  multiplier: 1,
  left: 0,
  top: 0,
  width: 50,
  height: 50
});
console.log(img);
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.3/fabric.min.js"></script>
<canvas id="myCanvas" style="border: 2px solid red;">
    Your browser does not support the HTML5 canvas tag.
</canvas>

我已经将输出显示在控制台上以供检查。
请帮我处理这个问题。
1个回答

5
你的显示器像素密度很高,这就是为什么会出现这个问题。在 developer.mozilla.org 上阅读有关设备像素比的简短主题this
你应该通过设备的像素比来除以你的宽度和高度。
尝试这个:
var ratio = window.devicePixelRatio;
var img = canvas.toDataURL(
{
    format: 'png', 
    multiplier: 1, 
    left: 0, 
    top: 0, 
    width: 50 / ratio , 
    height: 50 / ratio 
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接