php生成图片表格自动换行_php 实现将文本、图片写到同一张图上面以及文本的自动换行...

以laravel框架为例:

首先controller中引用ImageManager;

use Intervention\Image\ImageManager;

下面就是关键处理,

$date = date('Y年m月d日 H:i', $data['time']);

$title = $data['title'];

$content = $data['content'];

$id = $data['id'];

//原图地址-画布

$dir = env('UPLOAD_FILE_ORIGINAL_DIR', 'Thumb') . '/' .env('UPLOAD_FILE_TEMP_DIR', 'Temp');

$baseImage = 'news_base.png';

$baseFile = public_path($dir.'/'.$baseImage);

//生成图片地址

$shareImage = $dir.'/' .$id. '.png';

$shareFile = public_path($shareImage);

//插入画布的图片

$img = public_path($img);

//图片处理方法类

$manager = new ImageManager();

$fontTtf = public_path('fonts/DroidSansFallback.ttf');

$image = $manager->make($baseFile)

//insert text

->text($date, 219, 384, function ($font) {

$font->file($fontTtf);

$font->size(30);

$font->color('#FCA969');

$font->align('left');

});

//这个部分尤为重要:当文本中出现数字时,根据字符串长度换行,行末会出现多余空格,所以决定用下面的这种根据宽度实现自动换行

function autowrap($fontsize, $angle, $fontface, $string, $width) {

// 参数分别是 字体大小, 角度, 字体名称, 字符串, 预设宽度

$content = "";

// 将字符串拆分成一个个单字 保存到数组 letter 中

preg_match_all("/./u", $string, $arr);

$letter = $arr[0];

foreach($letter as $l) {

$teststr = $content.$l;

$testbox = imagettfbbox($fontsize, $angle, $fontface, $teststr);

if (($testbox[2] > $width) && ($content !== "")) {

$content .= PHP_EOL;

}

$content .= $l;

}

return $content;

}

$i=577; //top

$box = autowrap(30, 0, $fontTtf, $title, $i);

$image = $image->text($box, 113, $i, function ($font) {

$font->file(public_path('fonts/DroidSansFallback.ttf'));

$font->size(34);

$font->color('#222222');

$font->align('top');

});

//insert content

$i=715; //top

$box = autowrap(30, 0, $fontTtf, $content, $i);

$image = $image->text($box, 117, $i, function ($font) {

$font->file(public_path('fonts/DroidSansFallback.ttf'));

$font->size(30);

$font->color('#666666');

$font->align('top');

});

//insert img

$image = $image->insert($img, 'bottom-left', 115, 450);

$image->save($shareFile);

好了!到这里就实现了,如果你中间也遇到自动换行效果不是很好的时候,就好好看看标红的部分找找原因吧~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值