1、概述
1.1、什么是Grafika
Grafika是一个PHP图像处理库,是基于Imagick和GD,可以用于改变图片大小,剪裁,比较,添加水印等等功能。还有感知哈希,高级图像过滤,绘制贝塞尔曲线等功能,可谓非常强大。
因为世界杯活动中使用到了该库,所以本文将以世界杯活动中的使用方法和步骤走起。
1.2、优点
- 缩略图的速度非常快,质量非常高
- 支持智能剪裁
- 很好的支持GIF图片
- 5种缩略图模式
- 图像对比功能
- 图像高级过滤功能
- 图像混合
- 其他图像处理库支持的API基本都支持
2、开始开发
2.1、安装
composer require kosinix/grafika:dev-master --prefer-dist
2.2、使用常用的功能类
use Grafika\Grafika;
use Grafika\Color;
2.3、创建Editors
Grafika通过静态方法createEditor来创建一个editor。它包含所有的图片处理方法。
$editor = Grafika::createEditor();
2.4、打开模板图片
$editor->open($share_guess, './res/img/activity/worldcup/share/share_guess.jpg');
2.4、打开二维码图片
$editor->open($share_qrcode, './res/img/activity/worldcup/share/share_qrcode.jpg');
2.5、将二维码图片合成到模板图片上
$editor->blend($share_guess, $share_qrcode, 'normal', 1, 'top-left', 269, 815); // 画二维码
参数说明
- 第一个参数为模板图片
- 第二个参数为二维码图片
- 第三个参数为图片叠加模式:normal, multiply, overlay 或 screen
- 第四个参数为透明度
- 第五个参数为叠加位置,有10个选择,其中,前面9种为用户自定义叠加位置,而最后一个是智能叠加,由Grafika来判断摆放在哪里好。 top-left, top-center, top-right, center-left, center, center-right, bottom-left, bottom-center, bottom-right 和 smart
- 第六个参数为可选参数,表示图片2距离图片1左边的距离
- 第七个参数也为可选参数,表示图片2距离图片1上边的距离
2.6、将用户昵称合成到模板图片
合成文字要点
- 字体库
- 字体库是否支持字符
- 文字颜色
- 文字大小
- 文字倾斜
- 文字宽、高
- 文字居中
- 文字垂直方向定位
下面介绍如何将“ A Bin 竞猜成绩出色”,定位到模板图片的指定垂直位置并水平居中。
计算文字宽高等数据
$box = imagettfbbox(28, 3, './res/img/activity/worldcup/share/msyhbd.ttf', ' A Bin 竞猜成绩出色');
if (!$box)
return false;
$min_x = min(array($box[0], $box[2], $box[4], $box[6]));
$max_x = max(array($box[0], $box[2], $box[4], $box[6]));
$min_y = min(array($box[1], $box[3], $box[5], $box[7]));
$max_y = max(array($box[1], $box[3], $box[5], $box[7]));
$width = $max_x - $min_x; // 宽
$height = $max_y - $min_y; // 高
$top = abs($min_y); // 左下角居顶部,参照坐标(0, 0)
$left = abs($min_x); // 左下角居左侧,参照坐标(0, 0)
计算文字在模板图片上的位置
已知:模板图片宽750px,垂直方向上,从400px处开始绘制文字,且水平方向上居中。
$x = round((750 - $width) / 2); // 居左
$y = 400 + round($top / 2); // 居上
在模板图片上绘制文字
$editor->text($share_guess, ' A Bin 竞猜成绩出色', 28, $x, $y, new Color("#ffffff"), './res/img/activity/worldcup/share/msyhbd.ttf', 3);
参数说明
- 第一个参数为模板图片
- 第二个参数为将要绘制的文字
- 第三个参数为字体大小(选填)
- 第四个参数为文字的最左边距离图片最左边的距离(选填)
- 第五个参数为文字的基线到图片的最上边的距离,默认是12px,也就是文字的高度。(基线你就当做文字最下面好了)(选填)
- 第六个参数为字体颜色,Color对象,需要new Color一下,默认为黑色。(选填)
- 第七个参数为字体的完整路径,默认Sans font.(选填)
- 第八个参数为文字旋转角度,取值范围为0-359,默认为0,也就是不旋转(选填)
2.7、保存编辑好的图片
$editor->save($share_guess, './res/img/activity/worldcup/shared/test.jpg', 'jpeg', 60); // 生成图片
参数说明
当第三个参数为"jpeg"时,第四个参数有效,且能控制图片质量。
3、结束
更多用法,可以通过下面获取
- https://segmentfault.com/a/1190000007411281
- https://segmentfault.com/a/1190000007414875
- https://segmentfault.com/a/1190000007415756
- https://segmentfault.com/a/1190000007420051
字体下载