对齐组对象中的图像和文本

Aligning Image and Text in a Group Object

本文关键字:图像 文本 对象 对齐      更新时间:2023-09-26

尝试创建一个包含图像和文本对象的组对象。这有点像一个图标后面跟着文字。无法正确对齐对象。我可以手动设置左侧、顶部和调整它们,但文本、字体等可能会在运行时更改。

当字体/文本长度发生变化时,对齐方式会再次混乱。是否有任何方法可以确保文本始终在图像之后开始(无论文本长度、字体等)

如果没有内置结构可以做到这一点,有没有解决问题的方法?这是我尝试过的代码和下面的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);
});

http://jsfiddle.net/gCpnz/

你很接近。。。只需确保将text.top属性设置为等于一半图像高度+一半文本高度。同上,带文本左

创建文本对象后,可以使用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);
});

这是一个难题:

http://jsfiddle.net/m1erickson/5Wzvg/