php实现背景图上添加圆形logo图标的方法


Posted in PHP onNovember 17, 2016

本文实例讲述了php实现背景图上添加圆形logo图标的方法。分享给大家供大家参考,具体如下:

说一下步骤:

总共分 3 步:

1. 压缩logo 成固定大小的方形图片
2. 将logo 转成圆形logo
3. 将logo与背景图合并

废话不多说,直接上代码:

<?php
/**
 * 作者:friker
 * 开发时间:20160516
 * 功能:图片处理
 *
 */
class ImageController extends CI_Controller{
  public function __construct()
  {
    parent::__construct();
    date_default_timezone_set('Asia/Shanghai');
    error_reporting( E_ALL&~E_NOTICE&~E_WARNING);
    $this->load->library('curl');
  }
  /**
   * @todo : 本函数用于 将方形的图片压缩后
   *     再裁减成圆形 做成logo
   *     与背景图合并
   * @return 返回url
   */
  public function index(){
    //头像
    $headimgurl = 'a.jpg';
    //背景图
    $bgurl = './aa.png';
    $imgs['dst'] = $bgurl;
    //第一步 压缩图片
    $imggzip = $this->resize_img($headimgurl);
    //第二步 裁减成圆角图片
    $imgs['src'] = $this->test($imggzip);
    //第三步 合并图片
    $dest = $this->mergerImg($imgs);
  }
  public function resize_img($url,$path='./'){
    $imgname = $path.uniqid().'.jpg';
    $file = $url;
    list($width, $height) = getimagesize($file); //获取原图尺寸
    $percent = (110/$width);
    //缩放尺寸
    $newwidth = $width * $percent;
    $newheight = $height * $percent;
    $src_im = imagecreatefromjpeg($file);
    $dst_im = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresized($dst_im, $src_im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    imagejpeg($dst_im, $imgname); //输出压缩后的图片
    imagedestroy($dst_im);
    imagedestroy($src_im);
    return $imgname;
  }
  //第一步生成圆角图片
  public function test($url,$path='./'){
    $w = 110; $h=110; // original size
    $original_path= $url;
    $dest_path = $path.uniqid().'.png';
    $src = imagecreatefromstring(file_get_contents($original_path));
    $newpic = imagecreatetruecolor($w,$h);
    imagealphablending($newpic,false);
    $transparent = imagecolorallocatealpha($newpic, 0, 0, 0, 127);
    $r=$w/2;
    for($x=0;$x<$w;$x++)
      for($y=0;$y<$h;$y++){
        $c = imagecolorat($src,$x,$y);
        $_x = $x - $w/2;
        $_y = $y - $h/2;
        if((($_x*$_x) + ($_y*$_y)) < ($r*$r)){
          imagesetpixel($newpic,$x,$y,$c);
        }else{
          imagesetpixel($newpic,$x,$y,$transparent);
        }
      }
    imagesavealpha($newpic, true);
    // header('Content-Type: image/png');
    imagepng($newpic, $dest_path);
    imagedestroy($newpic);
    imagedestroy($src);
    unlink($url);
    return $dest_path;
  }
  //php 合并图片
  public function mergerImg($imgs,$path='./') {
    $imgname = $path.rand(1000,9999).uniqid().'.jpg';
    list($max_width, $max_height) = getimagesize($imgs['dst']);
    $dests = imagecreatetruecolor($max_width, $max_height);
    $dst_im = imagecreatefrompng($imgs['dst']);
    imagecopy($dests,$dst_im,0,0,0,0,$max_width,$max_height);
    imagedestroy($dst_im);
    $src_im = imagecreatefrompng($imgs['src']);
    $src_info = getimagesize($imgs['src']);
    imagecopy($dests,$src_im,270,202,0,0,$src_info[0],$src_info[1]);
    imagedestroy($src_im);
    // var_dump($imgs);exit;
    // header("Content-type: image/jpeg");
    imagejpeg($dests,$imgname);
    // unlink($imgs['dst']);
    unlink($imgs['src']);
    return $imgname;
  }
}

结果展示:

php实现背景图上添加圆形logo图标的方法

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php 多线程上下文中安全写文件实现代码
Dec 28 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
Oct 19 PHP
PHP之数组学习
May 29 PHP
php获得url参数中具有&amp;的值的方法
Mar 05 PHP
php中出现空白页的原因及解决方法汇总
Jul 08 PHP
在Debian系统下配置LNMP的教程
Jul 09 PHP
php生成二维码
Aug 10 PHP
Yii编程开发常见调用技巧集锦
Jul 15 PHP
Yii框架数据模型的验证规则rules()被执行的方法
Dec 02 PHP
phpinfo无法显示的原因及解决办法
Feb 15 PHP
阿里对象存储OSS在laravel框架中的使用方法
Oct 13 PHP
PHP如何通过date() 函数格式化显示时间
Nov 13 PHP
PHP解压ZIP文件到指定文件夹的方法
Nov 17 #PHP
PHP版单点登陆实现方案的实例
Nov 17 #PHP
php实现URL加密解密的方法
Nov 17 #PHP
PHP读取zip文件的方法示例
Nov 17 #PHP
php安装php_rar扩展实现rar文件读取和解压的方法
Nov 17 #PHP
php arsort 数组降序排序详细介绍
Nov 17 #PHP
php array_values 返回数组的值实例详解
Nov 17 #PHP
You might like
php高级编程-函数-郑阿奇
2011/07/04 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
php实现在服务器上创建目录的方法
2015/03/16 PHP
php实现中文转数字
2016/02/18 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
PHP $O00OO0=urldecode &amp; eval 解密,记一次商业源码的去后门
2020/09/13 PHP
PHP sdk实现在线打包代码示例
2020/12/09 PHP
浅谈重写window对象的方法
2014/12/29 Javascript
jQuery中prependTo()方法用法实例
2015/01/08 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
JS中判断null的方法分析
2016/11/21 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
vue iview组件表格 render函数的使用方法详解
2018/03/15 Javascript
利用js实现前后台传送Json的示例代码
2018/03/29 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
vue选项卡切换登录方式小案例
2019/09/27 Javascript
vue实现动态表格提交参数动态生成控件的操作
2020/11/09 Javascript
[50:38]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第二场 3月7日
2021/03/11 DOTA
Python简单实现enum功能的方法
2016/04/25 Python
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
深入理解Django-Signals信号量
2019/02/19 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
2020/03/09 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
python如何对链表操作
2020/10/10 Python
Python classmethod装饰器原理及用法解析
2020/10/17 Python
关于canvas绘制模糊问题的解决方法
2019/09/24 HTML / CSS
毕业实习个人鉴定范文
2013/12/10 职场文书
2014年后备干部工作总结
2014/12/08 职场文书
放假通知怎么写
2015/08/18 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
Python初学者必备的文件读写指南
2021/06/23 Python