FabricJs canvas 到 dataurl 图像大小问题

Dee*_*kal 3 html canvas fabricjs

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

我有 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);
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

我有控制台输出,以便您可以检查。

请在这件事上给予我帮助。

Obs*_*ver 5

您有高像素密度的显示器,这就是您遇到此问题的原因。请在developer.mozilla.org 上阅读 有关设备像素比的简短主题

您应该将宽度和高度除以设备的像素比。

尝试这个:

var ratio = window.devicePixelRatio;
var img = canvas.toDataURL(
{
    format: 'png', 
    multiplier: 1, 
    left: 0, 
    top: 0, 
    width: 50 / ratio , 
    height: 50 / ratio 
});
Run Code Online (Sandbox Code Playgroud)