当前位置:网站首页>PHP 海报二维码合成
PHP 海报二维码合成
2022-07-28 21:54:00 【小洪帽i】
组合参数方法:
/**
* [user_qrcode 参数组合]
* @param [type] $bgImg [背景图]
* @param [type] $codeImg [二维码]
* @param string $name [名称]
* @param string $remask [备注]
* @param string $content [描述]
* @param integer $key [生成二维码名称表示]
* @return [type] [description]
*/
public function user_qrcode($bgImg,$codeImg,$name="我是小洪帽",$remask="邀请您加入XXX 购买有惊喜",$content="长按识别或扫描二维码进入",$key=0){
$config = array(
'text'=>array(
array(
'text'=>$name,
'left'=>250,
'top'=>815,
'fontPath'=>'/public/upload/ttf/simhei.ttf', //字体文件需要增加去下载引入使用
'fontSize'=>22, //字号
'fontColor'=>'0,0,0', //字体颜色
'angle'=>0,
'text-aligin' => 'left'
),
array(
'text'=>$remask,
'left'=>250,
'top'=>860,
'fontPath'=>'/public/upload/ttf/simhei.ttf', //字体文件需要增加去下载引入使用
'fontSize'=>18, //字号
'fontColor'=>'143,143,143', //字体颜色
'angle'=>0,
'text-aligin' => 'left'
),
array(
'text'=>'—— '.$content.' ——',
'left'=>0,
'right'=>0,
'top'=>970,
'fontPath'=>'/public/upload/ttf/simhei.ttf', //字体文件需要增加去下载引入使用
'fontSize'=>16, //字号
'fontColor'=>'169,169,169', //字体颜色
'angle'=>0,
'text-aligin' => 'center' //字体居中,只有center有效果,其他无
)
),
'image'=>array(
array(
'url'=>$codeImg, //图片资源路径
'stream'=>0,
'left'=>50,
'top'=>740,
'right'=>0,
'bottom'=>0,
'width'=>180,
'height'=>180,
'opacity'=>100
),
),
'background'=>$bgImg,
);
$filename = "/public/upload/share_code/".time().rand(0000,9999).$num.".png";
return $this->createPoster($config,$filename);
}海报合成方法
/**
* 生成宣传海报
* @param array 参数,包括图片和文字
* @param string $filename 生成海报文件名,不传此参数则不生成文件,直接输出图片
* @return [type] [description]
*/
public function createPoster($config=array(),$filename=""){
//如果要看报什么错,可以先注释调这个header
if(empty($filename)) header("content-type: image/png");
$imageDefault = array(
'left'=>0,
'top'=>0,
'right'=>0,
'bottom'=>0,
'width'=>100,
'height'=>100,
'opacity'=>100
);
$textDefault = array(
'text'=>'',
'left'=>0,
'top'=>0,
'fontSize'=>32, //字号
'fontColor'=>'255,255,255', //字体颜色
'angle'=>0,
);
$background = $config['background'];//海报最底层得背景
//背景方法
$backgroundInfo = getimagesize($background);
$backgroundFun = 'imagecreatefrom'.image_type_to_extension($backgroundInfo[2], false);
$background = $backgroundFun($background);
$backgroundWidth = imagesx($background); //背景宽度
$backgroundHeight = imagesy($background) + 300; //背景高度,这里增加300的高度,底部白色区域
$imageRes = imageCreatetruecolor($backgroundWidth,$backgroundHeight);
$color = imagecolorallocate($imageRes, 255, 255, 255);
imagefill($imageRes, 0, 0, $color);
// imageColorTransparent($imageRes, $color); //颜色透明
imagecopyresampled($imageRes,$background,0,0,0,0,imagesx($background),imagesy($background),imagesx($background),imagesy($background));
//处理了图片
if(!empty($config['image'])){
foreach ($config['image'] as $key => $val) {
$val = array_merge($imageDefault,$val);
$info = getimagesize($val['url']);
$function = 'imagecreatefrom'.image_type_to_extension($info[2], false);
if($val['stream']){ //如果传的是字符串图像流
$info = getimagesizefromstring($val['url']);
$function = 'imagecreatefromstring';
}
$res = $function($val['url']);
$resWidth = $info[0];
$resHeight = $info[1];
//建立画板 ,缩放图片至指定尺寸
$canvas=imagecreatetruecolor($val['width'], $val['height']);
imagefill($canvas, 0, 0, $color);
//关键函数,参数(目标资源,源,目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h)
imagecopyresampled($canvas, $res, 0, 0, 0, 0, $val['width'], $val['height'],$resWidth,$resHeight);
$val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']) - $val['width']:$val['left'];
$val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']) - $val['height']:$val['top'];
//放置图像
imagecopymerge($imageRes,$canvas, $val['left'],$val['top'],$val['right'],$val['bottom'],$val['width'],$val['height'],$val['opacity']);//左,上,右,下,宽度,高度,透明度
}
}
//处理文字
if(!empty($config['text'])){
foreach ($config['text'] as $key => $val) {
$val = array_merge($textDefault,$val);
list($R,$G,$B) = explode(',', $val['fontColor']);
$fontColor = imagecolorallocate($imageRes, $R, $G, $B);
if($val['text-aligin'] == 'center'){
$fontBox = imagettfbbox($val['fontSize'], 0, $val['fontPath'], $val['text']);//获取文字所需的尺寸大小
//垂直水平居中
//imagettftext($imageRes, $val['fontSize'], $val['angle'], ceil(($backgroundWidth - $fontBox[2]) / 2), ceil(($backgroundHeight - $fontBox[1] - $fontBox[7]) / 2), $fontColor, $val['fontPath'], $val['text']);
//水平居中
imagettftext($imageRes, $val['fontSize'], $val['angle'], ceil(($backgroundWidth - $fontBox[2]) / 2), $val['top'], $fontColor, $val['fontPath'], $val['text']);
}else{
$val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']):$val['left'];
$val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']):$val['top'];
imagettftext($imageRes,$val['fontSize'],$val['angle'],$val['left'],$val['top'],$fontColor,$val['fontPath'],$val['text']);
}
}
}
//生成图片
if(!empty($filename)){
$res = imagepng($imageRes,ROOT_PATH.$filename); //保存到本地
imagedestroy($imageRes);
if(!$res) return false;
return $filename;
}else{
imagepng ($imageRes); //在浏览器上显示
imagedestroy($imageRes);
}
}效果图:

边栏推荐
- Combination of smart TV and applet
- 电脑不知卸载什么,打不开计算器无法编辑截图功能打不开txt文件等等解决方案之一
- 事件抽取文献整理(2018)
- 超参数优化(网格搜索和贝叶斯优化)
- OpenCV宏定义
- 利用递归和链表头插法实现链表成组的翻转——LeetCode25 K个一组翻转链表
- Function function
- 苹果官网正在更新维护 Apple Store,国行 iPhone 13 / Pro 等产品将最高优惠 600 元
- Read the recent trends of okaleido tiger and tap the value and potential behind it
- MySQL functions
猜你喜欢

控件 圆角描边 MaterialShapeDrawable

宝塔 phpmyadmin未授权访问漏洞

深度剖析集成学习Xgboost
![[self] - brush questions array](/img/a9/d12c41183df6961b2e9dd7cb49dfec.png)
[self] - brush questions array

ACM SIGIR 2022 | 美团技术团队精选论文解读

2022g3 boiler water treatment test simulation 100 questions simulation test platform operation

解决线程安全问题&&单例模式

Wechat applet development ④

22牛客多校day1 I - Chiitoitsu 概论dp

剑指 Offer 64. 求1+2+…+n,逻辑运算符短路效应
随机推荐
How to open a profitable gym? I tell you from one year's experience that don't fall in love
(22) two permutation (DP), package delivery (greedy)
Pagoda phpMyAdmin unauthorized access vulnerability
Classic topological sorting problem -- leetcode207 curriculum +leetcode210 curriculum II
【自】-刷题-峰值
解决线程安全问题&&单例模式
金仓数据库 KingbaseES 与 Oracle 的兼容性说明(3. 常用函数)
事件抽取文献整理(2008-2017)
mongodb索引添加、查看、导出、删除
金仓数据库 KingbaseES V8.3至V8.6迁移最佳实践(2. KingbaseES V8.3和 V8.6 兼容性)
Few people can really play in the "aftermarket" of the whole house intelligent fire collection
搭载新一代超安全蜂窝电池,思皓爱跑上市13.99万元起售
2022年R2移动式压力容器充装考题模拟考试平台操作
编译原理研究性学习专题 2——递归下降语法分析设计原理与实现
电脑不知卸载什么,打不开计算器无法编辑截图功能打不开txt文件等等解决方案之一
Manufacturing steps of interactive slide screen in exhibition hall
XML modeling
【自】-刷题-数组
Custom MVC principle and framework
Codeforces Round #810 (Div. 2) A - C