在我的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个功能:
我该怎么做?
答案 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