如何通过干预/图像在书面文字中提出文字?

时间:2019-07-13 06:59:00

标签: laravel laravel-5 laravel-5.8 intervention

在我的Laravel 5.8应用程序中,使用"intervention/image": "^2.4"库和类似以下的CSS:

    .banner_image {
        border-radius: 20%;
        border-style: outset;

        -webkit-border-radius: 20%;
        -moz-border-radius: 20%;
        -webkit-box-shadow: #000 0 2px 10px;
        -moz-box-shadow: #000 0 2px 10px;

        padding: 8px;
        box-shadow: 0px 0px 20px #b4b4b4;

        border-top:none;
        border-left:none;
        border-right:solid 2px #dddddd;
        border-bottom:solid 2px #dddddd;
    }

我根据db中带有标题,文本和徽标图像的行生成横幅:https://prnt.sc/oefaev

我使用了类似的文本方法

$img->text($banner_short_descr, 20 /* x */, 150 /* y */, function($font) use($text_color) {
    $font->file( public_path('fonts/roboto/Roboto_regular.ttf') );
    $font->size(24);
    $font->color($text_color);
});

现在我需要添加2个功能:

  1. 抬起横幅文本并为其添加一些阴影。
  2. 抬高整个横幅的边框。如果可能,请设置多个外部/内部边界

我该怎么做?

1 个答案:

答案 0 :(得分:0)

方法 1 - 最佳方法:

在src/Intervention/Image/Font.php里面 第419行 将 imagettftext 更改为 imagettfstroketext

就是这样:

$stroke_color = imagecolorallocate($image->resource, 0, 0, 0);
imagettfstroketext($image->resource, $this->getPointSize(), $this->angle, $posx, $posy, $color, $stroke_color, $this->file, $this->text,2);

并添加此功能:

function imagettfstroketext(&$image, $size, $angle, $x, $y, &$textcolor, &$strokecolor, $fontfile, $text, $px) {
    for($c1 = ($x-abs($px)); $c1 <= ($x+abs($px)); $c1++)
        for($c2 = ($y-abs($px)); $c2 <= ($y+abs($px)); $c2++)
            $bg = imagettftext($image, $size, $angle, $c1, $c2, $strokecolor, $fontfile, $text);
   return imagettftext($image, $size, $angle, $x, $y, $textcolor, $fontfile, $text);
}

方法二

<块引用>

使用已经有阴影效果的字体

方法 3

<块引用>

绘制两次文本

   $img->text($banner_short_descr, 20 /* x */, 150 /* y */, function($font) use($shadow_color) {
            $font->file( public_path('fonts/roboto/Roboto_regular.ttf') );
            $font->size(24);
            $font->color($shadow_color);
        });
       $img->text($banner_short_descr, 23 /* x */, 153 /* y */, function($font) use($text_color) {
            $font->file( public_path('fonts/roboto/Roboto_regular.ttf') );
            $font->size(24);
            $font->color($text_color);
        });

最好的结果是方法 1