海报生成,画布与底图合并
问题:订单信息过多,在海报上出现文字溢出(文字显示不全)情况
解决:创建一个画布(按照订单信息的多少设置可变的高度),然后与海报合并,最后加入二维码与文字水印
不创建画布:
public function watermark(){
header('content-type: image/png');
//订单信息
$elements = [['k'=>'姓名','v'=>'张三'],['k'=>'手机号码','v'=>'18900000000']];
$count = count($elements);
//底图
$basemap = "https://s1.ax1x.com/2020/07/30/auWo8A.png";
$dst_im = imagecreatefrompng($basemap);
//图片水印 - 二维码
$qrcode = "https://s1.ax1x.com/2020/07/30/au4C7T.png";
$src_im = imagecreatefrompng($qrcode);
imagecopyresampled($dst_im, $src_im, 290, 300, 0, 0, 620, 620, imagesx($src_im), imagesy($src_im));
//文字水印
$black = imagecolorallocate($dst_im, 0, 0, 0);
imagettftext($dst_im, 34, 0, 160, 1300, $black, public_path('static/ttf/apple.ttf'), '企业名称');
imagettftext($dst_im, 34, 0, 380, 1300, $black, public_path('static/ttf/apple.ttf'), '北京每天开心有限公司');
imagettftext($dst_im, 34, 0, 160, 1380, $black, public_path('static/ttf/apple.ttf'), '订单编号');
imagettftext($dst_im, 34, 0, 380, 1380, $black, public_path('static/ttf/apple.ttf'), '202010011598346274532');
imagettftext($dst_im, 34, 0, 160, 1460, $black, public_path('static/ttf/apple.ttf'), '订单价格');
imagettftext($dst_im, 34, 0, 380, 1460, $black, public_path('static/ttf/apple.ttf'), '¥1000.00');
imagettftext($dst_im, 34, 0, 160, 1540, $black, public_path('static/ttf/apple.ttf'), '优惠金额');
imagettftext($dst_im, 34, 0, 380, 1540, $black, public_path('static/ttf/apple.ttf'), '¥10.00');
if($elements) {
$y = 1620;
foreach ($elements as $item) {
imagettftext($dst_im, 34, 0, 160, $y, $black, public_path('static/ttf/apple.ttf'), $item['k']);
imagettftext($dst_im, 34, 0, 380, $y, $black, public_path('static/ttf/apple.ttf'), $item['v']);
$y = $y+80;
}
}
imagepng($dst_im);
imagedestroy($dst_im);
}
创建画布后:
public function watermark(){
header('content-type: image/png');
//订单信息
//$elements = [['k'=>'姓名','v'=>'张三'],['k'=>'手机号码','v'=>'18900000000']];
$elements = [['k'=>'姓名','v'=>'张三'],['k'=>'手机号码','v'=>'18900000000'],['k'=>'邮箱','v'=>'18900000000@qq.com'],['k'=>'微信','v'=>'zhangsan007']];
$count = count($elements);
//底图
$basemap = "https://s1.ax1x.com/2020/07/30/auWo8A.png";
$basemap_im = imagecreatefrompng($basemap);
//新建画布
$width = imagesx($basemap_im);
$height = $count>2 ? imagesy($basemap_im)+($count-2)*80 : imagesy($basemap_im);
$dst_im = imagecreatetruecolor($width, $height);
//给画布分配颜色
$white = imagecolorallocate($dst_im, 255, 255, 255);
//给画布填充颜色
imagefill($dst_im, 0, 0, $white);
//*********重点:将画布与底图合并为一张图************
imagecopymerge($dst_im, $basemap_im, 0, 0, 0, 0, imagesx($basemap_im), imagesy($basemap_im), 100);
//图片水印 - 二维码
$qrcode = "https://s1.ax1x.com/2020/07/30/au4C7T.png";
$src_im = imagecreatefrompng($qrcode);
imagecopyresampled($dst_im, $src_im, 290, 300, 0, 0, 620, 620, imagesx($src_im), imagesy($src_im));
//文字水印
$black = imagecolorallocate($dst_im, 0, 0, 0);
imagettftext($dst_im, 34, 0, 160, 1300, $black, public_path('static/ttf/apple.ttf'), '企业名称');
imagettftext($dst_im, 34, 0, 380, 1300, $black, public_path('static/ttf/apple.ttf'), '北京每天开心有限公司');
imagettftext($dst_im, 34, 0, 160, 1380, $black, public_path('static/ttf/apple.ttf'), '订单编号');
imagettftext($dst_im, 34, 0, 380, 1380, $black, public_path('static/ttf/apple.ttf'), '202010011598346274532');
imagettftext($dst_im, 34, 0, 160, 1460, $black, public_path('static/ttf/apple.ttf'), '订单价格');
imagettftext($dst_im, 34, 0, 380, 1460, $black, public_path('static/ttf/apple.ttf'), '¥1000.00');
imagettftext($dst_im, 34, 0, 160, 1540, $black, public_path('static/ttf/apple.ttf'), '优惠金额');
imagettftext($dst_im, 34, 0, 380, 1540, $black, public_path('static/ttf/apple.ttf'), '¥10.00');
if($elements) {
$y = 1620;
foreach ($elements as $item) {
imagettftext($dst_im, 34, 0, 160, $y, $black, public_path('static/ttf/apple.ttf'), $item['k']);
imagettftext($dst_im, 34, 0, 380, $y, $black, public_path('static/ttf/apple.ttf'), $item['v']);
$y = $y+80;
}
}
imagepng($dst_im);
imagedestroy($dst_im);
}