PHP 海报二维码合成

article/2025/8/22 1:14:57

组合参数方法:


/*** [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);}  }

效果图:

 


http://chatgpt.dhexx.cn/article/pSK3dQwE.shtml

相关文章

vue两张图片合成一张(海报二维码合成工具)

公司要经常换海报&#xff0c;一个海报要不同的二维码&#xff0c;做一个工具解决一下。 效果图如下 二维码图片的位置和海报大小可以随意调整 直接放代码&#xff1a; <template><div class"all-tool"><div :style"bgStyle" class"…

【Web技术】961- 3分钟搞定海报合成

背景 在推广业务中&#xff0c;常常会遇到合成带二维码海报分享功能&#xff0c;并且为了推广力度&#xff0c;需要同时在APP、WEB、小程序都有此功能加大曝光&#xff0c;各端都需要单独编写&#xff0c;复用能力差&#xff0c;效率低。本身合成海报业务并无难度&#xff0c;在…

如何合成动态海报?手把手教你一键在线合成gif海报

相信大家在平时都见过那种gif动态海报图片吧&#xff01;是不是觉得只有专业的设计师才能制作呢&#xff1f;其实&#xff0c;这种gif动态海报制作起来非常的简单&#xff0c;只需要准备几张图片尺寸相同图文内容不同的图片&#xff0c;再使用**在线动画制作**工具&#xff0c;…

波束形成MATLAB代码

常规的波束形成方法 clc; clear; close all;fs 1000; c 150; N 128; f 100; lambda c / f; d 0.5 * lambda; theta 1: 1: 180; t (0:1:1000-1) / fs;A zeros(1, length(theta)); A(5) 5; A(20) 4; A(25) 5; A(50) 3; % 在这四个方向上有目标 S zeros(length(th…

相移波束形成算法的MATLAB仿真

仿真结果如下&#xff1a; 部分核心程序如下所示&#xff1a; %************************************************************************** % 相移波束形成算法 %************************************************************************** %…

【波束形成】MMSE波束形成,自适应MMSE波束形成以及自适应MBER波束形成

1.软件版本 matlab2013b 2.本算法理论知识 3.部分源码 clc; clear; close all; warning off;SNR_set [0:1:12]; BER 1; nRx 10; nTx 10; frame_length 1000; Bers []; %论文table 2 alpha [0,10,-15,30,-45,50,60,-5…

基于FPGA的波束形成verilog开发

目录 一、理论基础 二、核心程序 三、仿真测试结果 一、理论基础 根据原理可知&#xff0c;整个波束形成的基本结构框图如下图所示&#xff1a; 这里&#xff0c;我们使用的加权函数为&#xff1a; 这个模块&#xff0c;相当于上述结构的&#xff1a; 二、核心程序 timesca…

鲁棒自适应波束形成

鲁棒自适应波束形成 本文是我关于Microphone Arrays Signal Processing Techniques and Applications第五章的整理。 自适应形成其方向性的波束形成器称为自适应波束形成器。它同时进行波束控制和零位控制。然而&#xff0c;在大多数声波束形成器中&#xff0c;只有在目标DOA是…

窄带波束形成——时域与频域常规窄带波束形成

最近学习了一下《最优阵列处理技术》&#xff0c;应老师要求写一个线性均匀水听器阵列的常规波束形成&#xff0c;由于是初学者&#xff0c;写的可能会有点问题&#xff0c;欢迎大家提出修改建议和指导&#xff0c;写这个主要是记录自己的思考&#xff0c;其次是和初学者进行交…

麦克风阵列波束形成

原文转载于&#xff1a;http://blog.csdn.net/shichaog/article/details/74143427 有所修改 感谢作者 波束形成 beamforming 体现的是声源信号的空域选择性&#xff0c;许多传统波束形成方法具有线性处理结构&#xff1b; 波束形成需要考虑三个方面&#xff1a; 1.麦克风…

LMS波束形成

LMS自适应波束形成器 % 标量阵最小均方准则(LMS)自适应波束形成器(ADBF) close all; Sound_velocity1200; %声速 Frequency300; %信号频率 Sample_Frequency100Frequency; %采样频率 Array_num16; %阵元数 Array_distance1/2(Sound_velocity/Frequency); %阵元间距 Signal_Leng…

波束形成(最大信噪比准则、LCMV、MSC、LMS、RLS)

波束形成&#xff08;最大信噪比准则、LCMV、MSC、LMS、RLS&#xff09; 波束形成的基本概念 # 波束形成准则 分别对上面所阐述的最大信噪比准则&#xff0c;旁瓣对消器&#xff0c;线性最小均方误差&#xff0c;以及自适应LMS和RLS算法进行仿真。 最大信噪比准则&…

语音领域的波束形成Beamforming小结

关注、点赞、收藏是对我最大的支持&#xff0c;谢谢^v^ 目录 1. 背景介绍 2. 多通道信号的公式描述 3. 传统波束形成&#xff08;delay-and-sum和filter-and-sum&#xff09; 4. MVDR 4.1 传统MVDR 4.2 融入深度学习的MVDR 5. GEV(Generalized eigenvalue) beamformer …

空间谱专题02:波束形成(Beamforming)

作者&#xff1a;桂。 时间&#xff1a;2017-08-22 10:56:45 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/7410846.html 前言 本文主要记录常见的波束形成问题&#xff0c;可以说空间谱估计是波束形成基础上发展而来&#xff0c;在系统论述空间谱之前&#xff0c;有…

UE4 插件 简单全景播放器

UE4 插件 1分钟完成全景展示项目&#xff08;Simple panorama player and video player&#xff09; 全景图、全景视频播放器&#xff0c;附带列表和热点模板。另附带一个视频播放器。全景播放器可以使用本地资源或Web URL。 完全由蓝图实现&#xff0c;易于扩展和修改。 具有…

Android VR Player(全景视频播放器) [10]: VR全景视频渲染播放的实现(exoplayer,glsurfaceview,opengl es)

前言 此博客的大部分内容来自我的毕业设计论文&#xff0c;因此语言上会偏正式一点&#xff0c;如果您有任何问题或建议&#xff0c;欢迎留言。在此感谢实验室的聂师兄&#xff0c;全景视频render部分的代码设计主要参考了他所编写的代码来完成&#xff0c;他对视频渲染过程的…

VR+全景播放器+头控讲解-07

VR全景播放器头控讲解-01-知识储备VR全景播放器头控讲解-02-创建球体VR全景播放器头控讲解-03-渲染视频VR全景播放器头控讲解-04-滑动手势VR全景播放器头控讲解-05-伸缩画面VR全景播放器头控讲解-06-头控实现VR全景播放器头控讲解-07-分屏技术 学习目标 如何实现分屏 实现思路 …

[OpenGL]从零开始写一个Android平台下的全景视频播放器——目录

Github项目地址 为了方便没有准备好梯子的同学&#xff0c;我把项目在CSDN上打包下载&#xff0c;不过不会继续更新&#xff08;保留在初始版本&#xff09; 先放一张效果图&#xff1a; Youtube 优酷 前言 Android平台下的全景视频&#xff08;360&#xff0c;Panoram…

VR+全景播放器+头控讲解-06

VR全景播放器头控讲解-01-知识储备VR全景播放器头控讲解-02-创建球体VR全景播放器头控讲解-03-渲染视频VR全景播放器头控讲解-04-滑动手势VR全景播放器头控讲解-05-伸缩画面VR全景播放器头控讲解-06-头控实现VR全景播放器头控讲解-07-分屏技术 学习目标 掌握头控部分布局 如何检…

mxreality.js 免费开源的全景图/全景视频/VR 直播播放器介绍

[2018-10-20 重要更新]支持VR直播功能支持全景视频poster支持全景图和视频和场景之间随意切换全景模式切换回默认主视角播放列表 优点&#xff1a; 1、全景图支持全景模式和VR模式 2、支持网页端全景图补天功能&#xff0c;有效去除顶部和底部拼接留下的痕迹、做出真正完美的…