干预/图像更改文字大小/字体中间短语

时间:2016-10-08 20:47:07

标签: intervention

我有这个图像,我想放置右对齐文本,但文本形成如下:

  • 标签,尺寸非常小,内容固定
  • 一个值,可以改变长度(0到100之间的整数)

目前,我设法进行了两次text次调用,但是当值长度发生变化时,两个tex重叠。

有没有办法告诉干预/图像改变字体&大小的中间短语?或者我的方法是坏的?

编辑#1:

我目前的代码:

<?php
/**
 * StackOverflow test
 *
 * @param  int                  $int
 * @return Intervention\Image
 */
public function stackOverflow($int)
{
    $img = Image::canvas(200, 50, '#FF0000');

    $img->text('Label', 130, 30, function ($font) {
        $font->file(resource_path('assets/fonts/futura-medium.ttf'));
        $font->size(18);
    });

    $img->text($int, 190, 30, function ($font) {
        $font->file(resource_path('assets/fonts/futura-medium.ttf'));
        $font->size(30);
        $font->align('right');
    });

    return $img->response('png');
}

$ int参数为10,显示正确:

Two-digit int is okay

当$ int参数超过99时,该数字与标签重叠:

With a three-digit number, it overlaps the label

当$ int参数低于10时,标签离它的值太远了:

enter image description here

我想找到一种方法将标签保持在整数值的相同距离(也许通过知道显示后的整数宽度?)

编辑#2

检查字符串长度是一种解决方法,但是当我使用非固定宽度字体时,结果仍然不一致:

With narrow numbers, the label is far from them

With wide numbers, the label is very near

1 个答案:

答案 0 :(得分:0)

干预图片文字有回调功能,可让您进行一些微调,以便用于标签:

$img->text('The label', 20, 50);

此方法可以回调您的值,也可以使用此方法:

$img->text('Te value', 0, 0, function($font) {
    $font->file('fonts/fontawesome-webfont.ttf');
    $font->size(24);
    $font->color('#fdf6e3');
    $font->align('center');  //left, right or center. 
    $font->valign('top');    //top, bottom or middle. 
    $font->angle(45);
});

您可以使用所有选项,也可以只使用您需要的选项。

通过这种方式,您可以在定位文本时获得更多控制权。

我希望这会帮助你。我正在使用这种方法干预codeigniter

编辑:关注您发布的评论和其他信息。

检查值的长度并将其分配给变量:

请注意,我只添加了一些虚构的位置值。

if(strlen($int) == 1){
   $pos = 195;  // this is the position of your label you need to adjust it
}elseif(strlen($int) == 2){
   $pos = 190;  //pos label you need to adjust it
}elseif(strlen($int) == 3){
   $pos = 185;  //pos label you need to adjust it
}

将变量传递给标签$ img-&gt; text();

$img->text('The label', $pos, 30, function($font) {

标签将根据您的价值长度动态定位。