当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP生成推广海报的方法分享

发布:smiling 来源: PHP粉丝网  添加日期:2021-09-12 14:56:58 浏览: 评论:0 

经常有这样的需求,就是需要在生成推广海报,包含指定的二维码,分享出去别人扫码之后就可以确定用户推荐关系。

仔细分析一下,推广海报必要的要素就是海报背景图和二维码,这两者都容易生成,但要两者结合到一起组合成为一张图二维还要可以保存到本地便于分享出去,这就是难点了,在H5中可以借助canvas画出来完成类似于截图的功能,但放到小程序里边很多局限性。那么我们直接在后台生成海报,前台直接调用。

前期准备:

1.海报背景图,背景图一般存服务器,程序本地读取;

2.推广二维码,可以是二维码图片链接,也可以是字符串图像流,如果自己生成二维码,详见:使用phpqrcode生成二维码。

方法如下:

  1. /** 
  2.  
  3. 生成宣传海报 
  4. @param array 参数,包括图片和文字 
  5. @param string $filename 生成海报文件名,不传此参数则不生成文件,直接输出图片 
  6. @return [type] [description] 
  7. */ 
  8. function createPoster($config=array(),$filename=""){ 
  9. //如果要看报什么错,可以先注释调这个header 
  10. if(emptyempty($filename)) header("content-type: image/png"); 
  11. $imageDefault = array
  12. 'left'=>0, 
  13. 'top'=>0, 
  14. 'right'=>0, 
  15. 'bottom'=>0, 
  16. 'width'=>100, 
  17. 'height'=>100, 
  18. 'opacity'=>100 
  19. ); 
  20. $textDefault = array
  21. 'text'=>''
  22. 'left'=>0, 
  23. 'top'=>0, 
  24. 'fontSize'=>32, //字号 
  25. 'fontColor'=>'255,255,255'//字体颜色 
  26. 'angle'=>0, 
  27. ); 
  28. $background = $config['background'];//海报最底层得背景 
  29. //背景方法 
  30. $backgroundInfo = getimagesize($background); 
  31. $backgroundFun = 'imagecreatefrom'.image_type_to_extension($backgroundInfo[2], false); 
  32. $background = $backgroundFun($background); 
  33. $backgroundWidth = imagesx($background); //背景宽度 
  34. $backgroundHeight = imagesy($background); //背景高度 
  35. $imageRes = imageCreatetruecolor($backgroundWidth,$backgroundHeight); 
  36. $color = imagecolorallocate($imageRes, 0, 0, 0); 
  37. imagefill($imageRes, 0, 0, $color); 
  38. // imageColorTransparent($imageRes, $color); //颜色透明 
  39. imagecopyresampled($imageRes,$background,0,0,0,0,imagesx($background),imagesy($background),imagesx($background),imagesy($background)); 
  40. //处理了图片 
  41. if(!emptyempty($config['image'])){ 
  42. foreach ($config['image'as $key => $val) { 
  43. $val = array_merge($imageDefault,$val); 
  44. $info = getimagesize($val['url']); 
  45. $function = 'imagecreatefrom'.image_type_to_extension($info[2], false); 
  46. if($val['stream']){ //如果传的是字符串图像流 
  47. $info = getimagesizefromstring($val['url']); 
  48. $function = 'imagecreatefromstring'
  49. $res = $function($val['url']); 
  50. $resWidth = $info[0]; 
  51. $resHeight = $info[1]; 
  52. //建立画板 ,缩放图片至指定尺寸 
  53. $canvas=imagecreatetruecolor($val['width'], $val['height']); 
  54. imagefill($canvas, 0, 0, $color); 
  55. //关键函数,参数(目标资源,源,目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h) 
  56. imagecopyresampled($canvas$res, 0, 0, 0, 0, $val['width'], $val['height'],$resWidth,$resHeight); 
  57. $val['left'] = $val['left']<0?$backgroundWidthabs($val['left']) - $val['width']:$val['left']; 
  58. $val['top'] = $val['top']<0?$backgroundHeightabs($val['top']) - $val['height']:$val['top']; 
  59. //放置图像 
  60. imagecopymerge($imageRes,$canvas$val['left'],$val['top'],$val['right'],$val['bottom'],$val['width'],$val['height'],$val['opacity']);//左,上,右,下,宽度,高度,透明度 
  61. //处理文字 
  62. if(!emptyempty($config['text'])){ 
  63. foreach ($config['text'as $key => $val) { 
  64. $val = array_merge($textDefault,$val); 
  65. list($R,$G,$B) = explode(','$val['fontColor']); 
  66. $fontColor = imagecolorallocate($imageRes$R$G$B); 
  67. $val['left'] = $val['left']<0?$backgroundWidthabs($val['left']):$val['left']; 
  68. $val['top'] = $val['top']<0?$backgroundHeightabs($val['top']):$val['top']; 
  69. imagettftext($imageRes,$val['fontSize'],$val['angle'],$val['left'],$val['top'],$fontColor,$val['fontPath'],$val['text']); 
  70. //生成图片 
  71. if(!emptyempty($filename)){ 
  72. $res = imagejpeg ($imageRes,$filename,90); //保存到本地 
  73. imagedestroy($imageRes); 
  74. if(!$resreturn false; 
  75. return $filename
  76. }else
  77. imagejpeg ($imageRes); //在浏览器上显示 
  78. imagedestroy($imageRes); 

使用示例一:生成带有二维码的海报

  1. //2. 在生成的二维码中加上logo(生成图片文件)  
  2. function scerweima1($url=''){  
  3. require_once 'phpqrcode.php';  
  4. $value = $url//二维码内容  
  5. $errorCorrectionLevel = 'H'//容错级别  
  6. $matrixPointSize = 6; //生成图片大小  
  7. //生成二维码图片  
  8. $filename = 'qrcode/'.microtime().'.png';  
  9. QRcode::png($value,$filename , $errorCorrectionLevel$matrixPointSize, 2);  
  10. $logo = 'qrcode/logo.jpg'//准备好的logo图片  
  11. $QR = $filename//已经生成的原始二维码图  
  12. if (file_exists($logo)) {  
  13. $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。  
  14. $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。  
  15. $QR_width = imagesx($QR); //二维码图片宽度  
  16. $QR_height = imagesy($QR); //二维码图片高度  
  17. $logo_width = imagesx($logo); //logo图片宽度  
  18. $logo_height = imagesy($logo); //logo图片高度  
  19. $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)  
  20. $scale = $logo_width/$logo_qr_width//logo的宽度缩放比(本身宽度/组合后的宽度)  
  21. $logo_qr_height = $logo_height/$scale//组合之后logo的高度  
  22. $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点  
  23. //重新组合图片并调整大小  
  24. /* 
  25.  
  26. imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中  
  27. */ 
  28. imagecopyresampled($QR$logo$from_width$from_width, 0, 0, $logo_qr_width,$logo_qr_height$logo_width$logo_height);  
  29. }  
  30. //输出图片  
  31. imagepng($QR'qrcode.png');  
  32. imagedestroy($QR);  
  33. imagedestroy($logo);  
  34. return '<img src="qrcode.png" alt="使用微信扫描支付">';  
  35. }  
  36. //调用查看结果  
  37. echo scerweima1('https://www.baidu.com'); 

使用示例二:生成带有图像,昵称和二维码的海报

  1. $config = array
  2. 'text'=>array
  3. array
  4. 'text'=>'昵称'
  5. 'left'=>182, 
  6. 'top'=>105, 
  7. 'fontPath'=>'qrcode/simhei.ttf'//字体文件 
  8. 'fontSize'=>18, //字号 
  9. 'fontColor'=>'255,0,0'//字体颜色 
  10. 'angle'=>0, 
  11. ), 
  12. 'image'=>array
  13. array
  14. 'url'=>'qrcode/qrcode.png'//图片资源路径 
  15. 'left'=>130, 
  16. 'top'=>-140, 
  17. 'stream'=>0, //图片资源是否是字符串图像流 
  18. 'right'=>0, 
  19. 'bottom'=>0, 
  20. 'width'=>150, 
  21. 'height'=>150, 
  22. 'opacity'=>100 
  23. ), 
  24. array
  25. 'url'=>'https://wx.qlogo.cn/mmopen/vi_32/DYAIOgq83eofD96opK97RXwM179G9IJytIgqXod8jH9icFf6Cia6sJ0fxeILLMLf0dVviaF3SnibxtrFaVO3c8Ria2w/0'
  26. 'left'=>120, 
  27. 'top'=>70, 
  28. 'right'=>0, 
  29. 'stream'=>0, 
  30. 'bottom'=>0, 
  31. 'width'=>55, 
  32. 'height'=>55, 
  33. 'opacity'=>100 
  34. ), 
  35. ), 
  36. 'background'=>'qrcode/bjim.jpg'
  37. ); 
  38. $filename = 'qrcode/'.time().'.jpg'
  39. //echo createPoster($config,$filename); 
  40. echo createPoster($config); 

 

Tags: PHP生成推广海报

分享到: