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 和 MySQL 基础教程(一)
Oct 09 PHP
PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
Jan 30 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
关于PHP堆栈与列队的学习
Jun 21 PHP
PHP 验证码不显示只有一个小红叉的解决方法
Sep 30 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
PHP易混淆函数的区别及用法汇总
Nov 22 PHP
php HTML无刷新提交表单
Apr 05 PHP
100多行PHP代码实现socks5代理服务器[2]
May 05 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
Laravel框架实现利用监听器进行sql语句记录功能
Jun 06 PHP
Yii框架日志操作图文与实例详解
Sep 09 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
推荐一篇入门级的Class文章
2007/03/19 PHP
检测png图片是否完整的php代码
2010/09/06 PHP
PHP SEO优化之URL优化方法
2011/04/21 PHP
php笔记之:AOP的应用
2013/04/24 PHP
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
ThinkPHP中RBAC类的四种用法分析
2014/11/24 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
浅谈PHP array_search 和 in_array 函数效率问题
2019/10/15 PHP
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
Javascript倒计时代码
2010/08/12 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
2011/12/08 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
Vue函数式组件的应用实例详解
2019/08/30 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
浅谈Python peewee 使用经验
2017/10/20 Python
在Python中定义一个常量的方法
2018/11/10 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
html5教程画矩形代码分享
2013/12/04 HTML / CSS
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
PHP如何删除一个Cookie值
2012/11/15 面试题
介绍下static、final、abstract区别
2015/01/30 面试题
测绘工程系学生的自我评价
2013/11/30 职场文书
党员自我对照检查材料
2014/08/19 职场文书
学生偷窃检讨书
2014/09/25 职场文书
2016新年致辞
2015/08/01 职场文书
golang 实现并发求和
2021/05/08 Golang
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL