尝试使用图像和文本对象创建组对象。它有点像文字后跟的图标。无法正确对齐对象。我可以手动设置左,顶部并调整它们,但文本,字体等可能会在运行时更改。
当字体/文本长度发生变化时,对齐会再次混乱。有没有办法确保文本始终在图像后开始(无论文本长度,字体等等。)
如果没有内置结构来执行此操作,是否有解决问题的解决方法?这是我试过的代码和下面的jsFiddle链接,你可以看到图像和文本是如何重叠的。感谢。
var canvas = new fabric.Canvas('canvas');
fabric.Image.fromURL('http://i.imgur.com/vews5Vd.jpg', function(img) {
var img1 = img.scale(1).set({ left: 0, top: 0 });
var text = new fabric.Text('the_text_sample', {
fontFamily: 'Arial',
fontSize:30,
left:img1.width,
top:10,
});
var group = new fabric.Group([ img1,text ], { left: 200, top: 200 });
canvas.add(group);
});
答案 0 :(得分:4)
你很接近......只需确保将text.top属性设置为等于half-image-height + half-text-height。与text.left同上。
创建文本对象后,可以使用text.getBoundingRectWidth()和text.getBoundingRectHeight()获取文本宽度/高度。
所以你的代码变成了:
var scaleFactor=1.0
var canvas = new fabric.Canvas('canvas');
fabric.Image.fromURL('http://i.imgur.com/vews5Vd.jpg', function(img) {
var img1 = img.scale(scaleFactor).set({ left: 0, top: 0 });
var text = new fabric.Text('the_text_sample', {
fontFamily: 'Arial',
fontSize:30,
});
text.set("top",img.height*scaleFactor/2+text.getBoundingRectHeight()/2);
text.set("left",-img.width*scaleFactor/2+text.getBoundingRectWidth()/2);
var group = new fabric.Group([ img1,text ], { left: 200, top: 200 });
canvas.add(group);
});
这是一个小提琴: