Laravel 使用 intervention/image 扩展包,生成带文字的海报
上一篇是生成带二维码的海报,只不过海报背景图和二维码都是已经存在的。一般业务中二维码是动态生成的,二维码的生成可以通过一些扩展来实现,这里不再赘述。
这一篇我们专门来讲,怎么在海报上增加新的内容,比如说:<文字信息>
首先来介绍文字
文字本身都有哪些属性呢?例如:
- 文字的字体。
- 文字的大小。
- 文字的颜色。
文字相对于图片的有哪些属性呢?例如:
- 文字的内容。
- 文字的排版。
- 文字相对图片的位置。
其次根据上面的介绍来写对应的代码
设置文字的字体:从 可以使用的字体库 下载下来,将文件名修改为英文名字。
// 获取字体 .ttf 文件。 $fontPath = storage_path('font/shoujinti.TTF');
使用添加文字的方法:文档地址 Image::text
实例化图片对象
$img = Image::make('public/foo.jpg');
调用实例化对象的 text 方法。
// 使用回调函数定义详细内容 $textConent = "五花马千金裘,呼儿将出换美酒!!"; $img->text($textConent, 400, 120, function($font) { // 设置字体文件 $font->file(storage_path('font/shoujinti.ttf')); // 设置写入文字的颜色 $font->color('#FFB400'); // 16进制颜色,字母需大写。 $font->color([255, 0, 0, 1]); // 也可以 RGB 颜色。 // 设置字体水平位置 - 设置相对于给定基点的水平文本对齐方式。 // 有三个值可选,left、center、right,默认是 left $font->align('left'); // 用的不多,也不好用 // 设置字体垂直位置 - 设置相对于给定基点的垂直文本对齐方式。 // 有三个值可选,top、middle、buttom,默认是 buttom $font->valign('buttom'); // 用的不多,也不好用 // 旋转字体 - 以度为单位设置文本的旋转角度。文本将围绕垂直和水平对齐点逆时针旋转。 $font->angle(5); })
最终的代码。
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; use Intervention\Image\Facades\Image; class createPoster extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'create:poster'; /** * The console command description. * * @var string */ protected $description = '创建海报'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * 处理方法 * * @return void */ public function handle() { $this->handleMergeImage(storage_path('background.png'), storage_path('qrcode.png')); $this->info('执行完毕!'); } /** * 合并二维码到背景图片处理 * @param string $backgroundImg 背景图片链接 * @param string $qrImg 二维码图片链接 */ public function handleMergeImage($backgroundImg = '', $qrImg = '') { // 图片文件不存在跳出。 if (!is_file($backgroundImg) || !is_file($qrImg)) { return true; } // 生成随机字符串 $qrRandomStr = Str::random(11); Storage::makeDirectory('qrcode'); $qrcodeFileName = storage_path('app/public') . '/qrcode/' . $qrRandomStr . '.png'; $posterRandomStr = Str::random(11); Storage::makeDirectory('poster'); $posterFileName = storage_path('app/public') . '/poster/' . $posterRandomStr . '.png'; // 1. Image::make($qrImg) 实例化二维码图片生成对象。 // 2. resize(width, height) 调整二维码宽高, 去适应背景图片空白处大小。 // 3. save($arImg); 保存二维码到原来路径(相当于覆盖文件), 路径自己配置。 Image::make($qrImg)->resize(900, 900)->save($qrcodeFileName); // 进行图片的拼接 // 1. Image::make($backgroundImg) 实例化背景图片生成对象。 // 2. insert($qrImg, 'center', left, top) 将二维码放置背景图片中央 center,距离左边 0 像素,距离上部 450 像素,这些可根据背景图片真实大小是需要调整的。 // 3. 将拼接后的图片保存到二维码路径(相当于覆盖文件), 当然路径可以自己修改。 $image = Image::make($backgroundImg)->insert($qrcodeFileName, 'center', 0, 450); // 获取字体文件地址,文件地址须使用绝对地址 - 字体文件使用英文命名 $fontPath = storage_path('thin.ttf'); $image->text('五花马千金裘,呼儿将出换美酒!', 400, 120, function ($font) use ($fontPath) { $font->file($fontPath); // 字体文件地址 $font->size(60); // 字体大小 $font->color('#FFB400'); // $font->color([255, 0, 0, 1]); $font->align('left'); $font->valign('bottom'); $font->angle(5); }); // 将文件保存 $image->save($posterFileName); } }
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 1年前 自动加精
推荐文章: