最近工作需求需要生成分享图片,最初用前端js的html2canvas截图插件各种问题,而且多端还不可共用等问题
后来干脆PHP的PG库在后台生成图片,很愉快的解决了各种问题,我们要实现的效果如下图:
getimagesize 获取图片的宽高
imagecreatefromjpeg 将图片转换为图片资源型 本次用的是jpeg,更多类型还有jpg、gif等,具体请查百度
imagecreatetruecolor 按照指定宽高画一个图
imagecopyresampled 图片拷贝合并
imagettfbbox 计算文字宽高
imagettftext 将文字放到图片上
imagepng 输出图片
imagedestroy 销毁图片内存
imagecreatetruecolor 创建一块指定宽高的画布
class CreatorImg {
public $config;
/**
* CreateShareImg constructor.
*/
public function __construct() {
$this->config = array(
// 字体文件
'font_file' => 'msyh.ttf',
'font_file_bold' => 'msyh.ttf',
'logo' => 'logo.png',
'tips_text' => ' 温馨提示:喜欢长按图片识别二维码即可前往购买',
);
}
/**
* 分享图片生成
*
* @param $gData 商品数据,array
* @param $fileName string 保存文件名,默认空则直接输入图片
*/
public function createSharePng($gData, $fileName = '') {
//创建画布
$im = imagecreatetruecolor(618, 1000);
//填充画布背景色
$color = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $color);
//设定字体的颜色
$font_color_1 = ImageColorAllocate($im, 140, 140, 140);
$font_color_2 = ImageColorAllocate($im, 28, 28, 28);
$font_color_3 = ImageColorAllocate($im, 129, 129, 129);
$font_color_red = ImageColorAllocate($im, 217, 45, 32);
$fang_bg_color = ImageColorAllocate($im, 254, 216, 217);
//Logo
list($l_w, $l_h) = getimagesize($this->config['logo']);
$logoImg = @imagecreatefrompng($this->config['logo']);
imagecopyresized($im, $logoImg, 215, 28, 0, 0, 170, 70, $l_w, $l_h);
//温馨提示
imagettftext($im, 14, 0, 100, 130, $font_color_1, $this->config['font_file'], $this->config['tips_text']);
//商品图片
list($g_w