看到这张图,首先被签名字体吸引了,产品设计还是很严谨滴,但是小程序canvas不支持特殊字体,这可咋搞,调研一圈之后,发现php的DG库很好用(上图就是php绘制的),那就交给万能的php喽。
废话不多说,上代码:
//主方法
function createSharePng($gData)
{
$im = imageCreateFromJPEG($gData['origin_pic']); //把传入的背景图作为画布 也支持绘制画布
//字体文件
$font_file = "/data/www/activity_pic/qianming.TTF";
//设定字体的颜色
$font_color = ImageColorAllocate($im, 28, 28, 28);
//二维码
$logoImg = @imagecreatefrompng('/data/www/activity_pic/luxuryCar/luxurycar_qrcode.png');
$qrcodeLength = 75;
imagecopyresized($im, $logoImg, 350, 590, 0, 0, $qrcodeLength, $qrcodeLength, $qrcodeLength, $qrcodeLength);
//姓名
$name = $gData['name'];
imagettftext($im, 14, -4, 120, 420, $font_color, $font_file, $name);
//乙方
$name = $gData['name'];
imagettftext($im, 18, -2, 300, 790, $font_color, $font_file, $name);
//交车时间
$cartime = $gData['cartime'];
imagettftext($im, 14, -4, 160, 630, $font_color, $font_file, $cartime);
$signtime = $gData['signtime'];
imagettftext($im, 14, -2, 320, 830, $font_color, $font_file, $signtime);
//输出图片
Header("Content-Type: image/png");
imagepng($im);
}
/**
* 从图片文件创建Image资源
* @param $file 图片文件,支持url
* @return bool|resource 成功返回图片image资源,失败返回false
*/
function createImageFromFile($file)
{
if (preg_match('/http(s)?:\/\//', $file)) {
$fileSuffix = self::getNetworkImgType($file);
} else {
$fileSuffix = pathinfo($file, PATHINFO_EXTENSION);
}
if (!$fileSuffix) return false;
switch ($fileSuffix) {
case 'jpeg':
$theImage = @imagecreatefromjpeg($file);
break;
case 'jpg':
$theImage = @imagecreatefromjpeg($file);
break;
case 'png':
$theImage = @imagecreatefrompng($file);
break;
case 'gif':
$theImage = @imagecreatefromgif($file);
break;
default:
$theImage = @imagecreatefromstring(file_get_contents($file));
break;
}
return $theImage;
}
/**
* 获取网络图片类型
* @param $url 网络图片url,支持不带后缀名url
* @return bool
*/
function getNetworkImgType($url)
{
$ch = curl_init(); //初始化curl
curl_setopt($ch, CURLOPT_URL, $url); //设置需要获取的URL
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);//设置超时
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //支持https
curl_exec($ch);//执行curl会话
$http_code = curl_getinfo($ch);//获取curl连接资源句柄信息
curl_close($ch);//关闭资源连接
if ($http_code['http_code'] == 200) {
$theImgType = explode('/', $http_code['content_type']);
if ($theImgType[0] == 'image') {
return $theImgType[1];
} else {
return false;
}
} else {
return false;
}
}
备注:
- 为了读者阅读方便,示例代码去掉了为空及规则校验,安全性考虑数据校验是必要的
- GD库链接
网友评论