【发布时间】:2020-03-08 14:41:27
【问题描述】:
目标:我正在寻求将图像添加到 FabricJS 组或矩形对象,并让图像保持其原始纵横比和中心适合其父宽度/高度。
我不希望显示图像溢出,但会在以下示例中将溢出显示为不透明的绿色:
风景图片示例:
如果是横向图像,它会缩放到最大高度,然后根据宽度放置将自身居中:
由于我不是在寻找要显示的图像溢出,因此最终产品应如下所示:
人像图片示例:
同样,如果图像是纵向的,图像的宽度会缩放 100%,但高度会居中:
然后否定溢出,这就是我正在寻找的最终产品:
到目前为止,这是我的堆栈闪电战:https://stackblitz.com/edit/angular-gpfkkw
基本情况代码如下:
this.canvas = new fabric.Canvas('canvas');
var rect = new fabric.Rect({
left: 100,
top: 50,
width: 450,
height: 200,
fill: '#e3e3e3',
});
var rectGroup = new fabric.Group([rect], {
name: 'Rectangle',
});
this.canvas.add(rectGroup);
fabric.Image.fromURL('https://placehold.it/888x500&text=16:9', (img) => {
let bounds = rectGroup.getBoundingRect();
const scaleFactor = Math.min(
Math.min(bounds.width / img.width),
Math.min(bounds.height / img.height)
);
img.scale(scaleFactor);
img.set({
top: bounds.top + Math.max(bounds.height - img.height * scaleFactor, 0)/2,
left: bounds.left + Math.max(bounds.width - img.width * scaleFactor, 0)/2,
});
rectGroup.addWithUpdate(img);
this.canvas.renderAll();
}
这显然不是正确的解决方案,而是一个开始。有什么建议吗?
【问题讨论】:
标签: html5-canvas fabricjs