当前位置:网站首页>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);
}
}效果图:

边栏推荐
- The front mounted ADAS camera in parking increased by 54.15% year-on-year, with TOP10 suppliers taking the lead
- 集火全屋智能“后装市场”,真正玩得转的没几个
- 金仓数据库KingbaseES 客户端编程接口指南 - ODBC (2. 概述)
- 2022 simulated examination platform operation of hoisting machinery command examination questions
- 深度剖析集成学习Xgboost
- 【自】-刷题-逻辑
- 解决线程安全问题&&单例模式
- Asynchronism and synchronization of visa write and read functions by LabVIEW
- Codeforces Round #810 (Div. 2) A - C
- 搭载新一代超安全蜂窝电池,思皓爱跑上市13.99万元起售
猜你喜欢

What if win11 cannot find the DNS address? Win11 can't find DNS and can't access the web page solution

AUTOCAD——Excel表格导入CAD、CAD合并两兄弟

What's special about this wireless router, which is popular in the whole network?

1314_串口技术_RS232通信基础的信息

My second uncle is angry and swipes the screen all over the network. How can he cure my spiritual internal friction?

trivy【2】工具漏洞扫描

通过Wi-Fi 7实现极高吞吐量——洞察下一代Wi-Fi物理层
![[self] - question brushing - dynamic programming](/img/84/edc683494756d5af755204fe4f4d93.png)
[self] - question brushing - dynamic programming

How to add the index of a set in mongodb to another set in mongodb

Manufacturing steps of interactive slide screen in exhibition hall
随机推荐
Runloop principle (II)
The front mounted ADAS camera in parking increased by 54.15% year-on-year, with TOP10 suppliers taking the lead
【自】-刷题-字符串
2022g3 boiler water treatment test simulation 100 questions simulation test platform operation
二舅火了,全网刷屏,他凭什么能治好我的精神内耗?
[self] - brush questions logic
[self] - brush questions BFS
金仓数据库 KingbaseES V8.3至V8.6迁移最佳实践(2. KingbaseES V8.3和 V8.6 兼容性)
金仓数据库 KingbaseES 与 Oracle 的兼容性说明(3. 常用函数)
What is utxo?
金仓数据库KingbaseES客户端编程接口指南-ODBC(5. 开发过程)
[self] - brush questions array
Byte 8 years' experience of female test Director - for girls who want to change careers or are about to enter the testing industry
猿人学第二十题
Inspur clusterenginev4.0 remote command execution vulnerability cve-2020-21224
Asynchronism and synchronization of visa write and read functions by LabVIEW
xss.haozi.me靶场详解
[self] - question brushing - dynamic programming
With the "integration of driving and parking", freytek's high-performance domain controller leads the new track
MySQL log management, backup and recovery