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 相关文章推荐
推荐文章系统(一)
Oct 09 PHP
php访问查询mysql数据的三种方法
Oct 09 PHP
模仿OSO的论坛(一)
Oct 09 PHP
将OICQ数据转成MYSQL数据
Oct 09 PHP
Godaddy空间Zend Optimizer升级方法
May 10 PHP
php编写一个简单的路由类
Apr 13 PHP
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
Mar 27 PHP
解析PHP对现有搜索引擎的调用
Jun 25 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
Aug 19 PHP
php发送与接收流文件的方法
Feb 11 PHP
php自动加载方式集合
Apr 04 PHP
PHP的PDO连接讲解
Jan 24 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 array的学习笔记
2012/05/10 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
如何使用php等比例缩放图片
2016/10/12 PHP
一个实用的php验证码类
2017/07/06 PHP
php实现等比例压缩图片
2018/07/26 PHP
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
javascript实现3D变换的立体圆圈实例
2015/08/06 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
微信小程序  wx.request合法域名配置详解
2016/11/23 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
JS Testing Properties 判断属性是否在对象里的方法
2017/10/01 Javascript
JS中Object对象的原型概念基础
2018/01/29 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
Vue动态生成表格的行和列
2019/07/18 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
vue Element左侧无限级菜单实现
2020/06/10 Javascript
关于ES6尾调用优化的使用
2020/09/11 Javascript
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
python基础之入门必看操作
2017/07/26 Python
对python生成业务报表的实例详解
2019/02/03 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
python禁用键鼠与提权代码实例
2019/08/16 Python
numpy 声明空数组详解
2019/12/05 Python
Python3爬虫RedisDump的安装步骤
2021/02/20 Python
移动端Html5中百度地图的点击事件
2019/01/31 HTML / CSS
NET程序员上机面试题
2015/05/23 面试题
运动会开幕式邀请函
2014/02/03 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书