php图片合成处理(PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例)
类别:编程学习 浏览量:2005
时间:2021-10-24 10:46:37 php图片合成处理
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例本文实例讲述了PHP使用 Imagick 扩展实现图片合成,圆角处理功能。分享给大家供大家参考,具体如下:
需求:为用户生成特定的二维码 ,拉取用户的微信头像 和特定的背景图合成一张用户专属海报
方法:采用PHP的Imagick扩展功能对图片进行合成处理。对微信头像进行圆角处理,然后压缩图片的质量
1. 根据微信用户特定id生成专属二维码
|
public static function getTicket( $scene_id ) { $qrcode = '{"expire_seconds": 2592000, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": $scene_id }}}' ; //二维码信息 $access_token = self::getToken(); //公众号token,这个要获取自己公众号的 $getticket_url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=$access_token" ; $ticketinfo = self::request_by_curl( $getticket_url , $qrcode ); return $ticketinfo [ 'ticket' ]; //专属二维码的ticken } public static function request_by_curl( $remote_server , $post_string = '' ) { $ch = curl_init(); curl_setopt( $ch , CURLOPT_URL, $remote_server ); curl_setopt( $ch , CURLOPT_RETURNTRANSFER, true); curl_setopt( $ch , CURLOPT_CUSTOMREQUEST, "POST" ); curl_setopt( $ch , CURLOPT_POSTFIELDS, $post_string ); curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt( $ch , CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt( $ch , CURLOPT_FOLLOWLOCATION, 1); curl_setopt( $ch , CURLOPT_AUTOREFERER, 1); curl_setopt( $ch , CURLOPT_HTTPHEADER, array ( "Expect: " )); curl_setopt( $ch , CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)' ); $content = curl_exec( $ch ); curl_close( $ch ); $reArr =json_decode( $content ,true); return $reArr ; } |
2、 合成海报
|
public function CompositeImage ( $ticket , $wxnick , $userId ) { $Qrcode = new Imagick( "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=$ticket" ); $Qrcode ->setImageResolution(0.1,0.3); //设置图片分辨率 $QrcodeWH = $Qrcode ->getImageGeometry(); //获取源图片宽和高 if ( $QrcodeWH [ 'width' ]>200) { $QrcodeW [ 'width' ] = 200; $QrcodeH [ 'height' ] = $QrcodeW [ 'width' ]/ $QrcodeWH [ 'width' ]* $QrcodeWH [ 'height' ]; } else { $QrcodeW [ 'width' ] = $QrcodeWH [ 'width' ]; $QrcodeH [ 'height' ] = $QrcodeWH [ 'height' ]; } $Qrcode ->thumbnailImage( $QrcodeW [ 'width' ], $QrcodeWH [ 'height' ], true ); //按照选定的比例进行缩放 // 预先下载微信头像,再生成合成信息 $curl = curl_init( $wxnick ); $wxnickpath = "upload/wxnick/" . $userId . ".jpg" ; curl_setopt( $curl ,CURLOPT_RETURNTRANSFER,1); $imageData = curl_exec( $curl ); curl_close( $curl ); $tp = @ fopen ( $wxnickpath , 'a' ); fwrite( $tp , $imageData ); fclose( $tp ); $weixin = new Imagick( $wxnickpath ); $weixin ->setImageResolution(0.1,0.3); $weixin ->roundCorners(360,360); //圆角处理 $wxWH = $weixin ->getImageGeometry(); if ( $wxWH [ 'width' ]>200) { $wxW [ 'width' ] = 200; $wxH [ 'height' ] = $wxW [ 'width' ]/ $wxWH [ 'width' ]* $wxWH [ 'height' ]; } else { $wxW [ 'width' ] = $wxWH [ 'width' ]; $wxH [ 'height' ] = $wxWH [ 'height' ]; } $weixin ->thumbnailImage( $wxW [ 'width' ], $wxWH [ 'height' ], true ); //等比例缩放 //创建一个Imagick对象,同时获取要处理的背景图 /data/wenda/htdocs/upload $poster = new Imagick( "/data/wenda/htdocs/upload/poster.png" ); $posterWH = $poster ->getImageGeometry(); $posterW [ 'width' ] = $posterWH [ 'width' ]; $posterH [ 'height' ] = $posterWH [ 'height' ]; // 按照缩略图大小创建一个有颜色的图片 $canvas = new Imagick(); $canvas ->newImage( $posterW [ 'width' ], $posterH [ 'height' ], 'black' , 'jpg' ); //二维码 微信头像 背景 合成 $poster ->compositeImage( $Qrcode ,Imagick::COMPOSITE_OVER,275,960); $poster ->compositeImage( $weixin ,Imagick::COMPOSITE_OVER,275,402); $canvas ->compositeImage( $poster , imagick::COMPOSITE_OVER, 0, 0); $canvas ->setImageCompressionQuality(60); //压缩质量 $canvas ->writeImage( "/upload/poster/$userId.jpg" ); //生成图片 return $canvas ; //返回图片流信息 } header( "Content-Type: image/jpg" ); //输出图片 $posterimg = $this ->CompositeImage( $Fticket , $Fwnick , $userId ); echo $posterimg //输出图片 |
希望本文所述对大家PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/hxmandzzx/article/details/52794357
您可能感兴趣
- php性能优化的思路和步骤(FastCGI轻松搞定IIS7.5+PHP5.6.0环境)
- thinkphp5对接支付宝扫码支付(ThinkPHP框架下整合支付宝支付功能图文教程)
- php如何发邮件(PHP示例演示发送邮件给某个邮箱)
- php-fpm配置文件在哪里(PHP-FPM 设置多pool及配置文件重写操作示例)
- php中isset函数有什么功能(PHP中的empty、isset、isnull的区别与使用实例)
- thinkphp静态怎么设置(浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法)
- thinkphp从模板自定义标签(Thinkphp5.0框架视图view的循环标签用法示例)
- python微信红包分配(PHP切割整数工具类似微信红包金额分配的思路详解)
- phpstudy使用教程学习(phpStudy 2016 使用教程详解支持PHP7)
- phpstudy8.0使用教程视频(phpstudy v8.1 Apache伪静态配置图文教程)
- php redis应用场景(PHP商品秒杀问题解决方案实例详解mysql与redis)
- php系统化框架教程(PHP+swoole+linux实现系统监控和性能优化操作示例)
- php项目开发实例(php项目中类的自动加载实例讲解)
- phpmysql怎么搭建(PHP使用PDO、mysqli扩展实现与数据库交互操作详解)
- php一直提示错误(关于php开启错误提示的总结)
- phpstudy的mysql无法启动(Windows系统下解决PhPStudy MySQL启动失败问题)
- 河南尉氏县因地制宜发展果蔬种植 水坡镇绿宝甜瓜变 金瓜(河南尉氏县因地制宜发展果蔬种植)
- 谢广坤,你这么欺负谢腾飞,良心不会痛吗(你这么欺负谢腾飞)
- 乡村爱情15 宋晓峰怀疑自己孩子,腾飞与姜奶奶亲子鉴定出结果(宋晓峰怀疑自己孩子)
- 《乡村爱情13》开播,新版刘能以假乱真,编剧思维进入瓶颈(新版刘能以假乱真)
- 当年的 白洋淀战神 练肌肉 嘎子哥也成为行走的荷尔蒙(当年的白洋淀战神)
- 肌肉小子陈康, 亚洲巨兽 黄哲勋,哪个才是你的菜(肌肉小子陈康亚洲巨兽)
热门推荐
- react app框架(浅谈React原生APP更新)
- js数组排序有哪些(js将多维数组转为一维数组后去重排序)
- 将SQL Server数据迁移到MySQL的常见工具
- php 静态方法(PHP的静态方法与普通方法用法实例分析)
- web服务器配置怎么选才是合适的呢(个人web服务器要用哪种服务器比较好?)
- linux部署tomcat项目(阿里云服务器linux系统搭建Tomcat部署Web项目)
- html标签的嵌套规则
- ftp上传文件权限设置(FTP二进制上传是什么意思?设置并使用二进制BINARY上传?)
- docker容器启动执行多条命令(详解Shell脚本控制docker容器启动顺序)
- css3水平移动效果(利用css3 translate完美实现表头固定效果)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9