在 canvas 中设置背景图片(fabric js)
Setting background image in canvas (fabric js)
目标 是在图像之上设置一个 canvas。 (像teespring一样制作产品模型生成器,但更简单)
Codepen: https://codepen.io/anon/pen/YmEGyW
我几乎已经达到了我想要的程度,但我有一些问题:
如果我在 canvas 上设置背景图片,我将无法保存(不知道为什么,但是当我这样做时我无法点击 "save",没有任何反应)。像这样:
const canvas = new fabric.Canvas('fCanvas', {
backgroundImage: "https://drive.google.com/uc?export=view&id=0B3ubyt3iIvkaUlpHVEpDTGhjQzg",
...
});
为了解决这个问题,我在 canvas... ,就像在 codepen 示例中一样)
我想要的是预加载背景图片而不需要上传背景图片。
我如何 在加载时加载 google 驱动器图像(下方)而不需要通过 input/form 上传?
在实践中,这将是动态的,但现在我想使用 "https://drive.google.com/uc?export=view&id=0B3ubyt3iIvkaUlpHVEpDTGhjQzg"
作为背景图像。然后可以在上面上传可缩放的图像。
我建议您使用 css 来设置背景图片。
解决方案#1
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.0.0-beta.7/fabric.min.js"></script>
<div>
<canvas id="fCanvas" width="400" height="400"></canvas>
</div>
<a id="downloadLnk" download="YourFileName.jpg">Download as image</a>
JS
const canvas = new fabric.Canvas('fCanvas');
fabric.Image.fromURL('https://picsum.photos/id/1083/200/300',
function(img) {
canvas.setBackgroundImage(img, canvas.renderAll.bind(canvas), {
scaleX: canvas.width / img.width,
scaleY: canvas.height / img.height
});
}, { crossOrigin: 'Anonymous' });
function download() {
var dt = canvas.toDataURL('image/jpeg');
this.href = dt;
};
downloadLnk.addEventListener('click', download, false);
Codepen
https://codepen.io/murli2308/pen/XvzzWz
解决方案#2
CSS
canvas {
background: url(https://picsum.photos/id/1083/200/300);
}
您可以用 class 或 id 替换 CSS 选择器。另外,您可以根据需要添加背景大小和背景位置。
查看文档 here 没有显示对我有用的选项。
var canvas = new fabric.Canvas('canvas-id');
canvas.setBackgroundImage('https://......', canvas.renderAll.bind(canvas), {
backgroundImageOpacity: 1,
backgroundImageStretch: false
});
目标 是在图像之上设置一个 canvas。 (像teespring一样制作产品模型生成器,但更简单)
Codepen: https://codepen.io/anon/pen/YmEGyW
我几乎已经达到了我想要的程度,但我有一些问题:
如果我在 canvas 上设置背景图片,我将无法保存(不知道为什么,但是当我这样做时我无法点击 "save",没有任何反应)。像这样:
const canvas = new fabric.Canvas('fCanvas', {
backgroundImage: "https://drive.google.com/uc?export=view&id=0B3ubyt3iIvkaUlpHVEpDTGhjQzg",
...
});
为了解决这个问题,我在 canvas... ,就像在 codepen 示例中一样)
我想要的是预加载背景图片而不需要上传背景图片。
我如何 在加载时加载 google 驱动器图像(下方)而不需要通过 input/form 上传?
在实践中,这将是动态的,但现在我想使用 "https://drive.google.com/uc?export=view&id=0B3ubyt3iIvkaUlpHVEpDTGhjQzg"
作为背景图像。然后可以在上面上传可缩放的图像。
我建议您使用 css 来设置背景图片。
解决方案#1
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.0.0-beta.7/fabric.min.js"></script>
<div>
<canvas id="fCanvas" width="400" height="400"></canvas>
</div>
<a id="downloadLnk" download="YourFileName.jpg">Download as image</a>
JS
const canvas = new fabric.Canvas('fCanvas');
fabric.Image.fromURL('https://picsum.photos/id/1083/200/300',
function(img) {
canvas.setBackgroundImage(img, canvas.renderAll.bind(canvas), {
scaleX: canvas.width / img.width,
scaleY: canvas.height / img.height
});
}, { crossOrigin: 'Anonymous' });
function download() {
var dt = canvas.toDataURL('image/jpeg');
this.href = dt;
};
downloadLnk.addEventListener('click', download, false);
Codepen
https://codepen.io/murli2308/pen/XvzzWz
解决方案#2
CSS
canvas {
background: url(https://picsum.photos/id/1083/200/300);
}
您可以用 class 或 id 替换 CSS 选择器。另外,您可以根据需要添加背景大小和背景位置。
查看文档 here 没有显示对我有用的选项。
var canvas = new fabric.Canvas('canvas-id');
canvas.setBackgroundImage('https://......', canvas.renderAll.bind(canvas), {
backgroundImageOpacity: 1,
backgroundImageStretch: false
});