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 相关文章推荐
如何将数据从文本导入到mysql
Oct 09 PHP
php adodb介绍
Mar 19 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
Jan 14 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
May 29 PHP
PHP缓存集成库phpFastCache用法
Dec 15 PHP
php从给定url获取文件扩展名的方法
Mar 14 PHP
php实现window平台的checkdnsrr函数
May 27 PHP
PHP编程中的__clone()方法使用详解
Nov 27 PHP
php数据访问之增删改查操作
May 09 PHP
ThinkPHP实现分页功能
Apr 28 PHP
php实现页面纯静态的实例代码
Jun 21 PHP
PHP不使用内置函数实现字符串转整型的方法示例
Jul 03 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+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
2011/11/02 PHP
php 使用GD库为页面增加水印示例代码
2014/03/24 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
使用JavaScript switch case 另类写法
2010/03/14 Javascript
指定位置如果有图片显示图片,无图片显示广告的JS
2010/06/05 Javascript
分享10篇优秀的jQuery幻灯片制作教程及应用案例
2011/04/16 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
JS返回只包含数字类型的数组实例分析
2016/12/16 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
介绍Python中的fabs()方法的使用
2015/05/14 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
Python走楼梯问题解决方法示例
2018/07/25 Python
pytorch: Parameter 的数据结构实例
2019/12/31 Python
python 给图像添加透明度(alpha通道)
2020/04/09 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
Python中对象的比较操作==和is区别详析
2021/02/12 Python
Python里面如何拷贝一个对象
2014/02/17 面试题
中职毕业生自我鉴定范文(3篇)
2014/09/28 职场文书
社保代办委托书怎么写
2014/10/06 职场文书
2014年图书室工作总结
2014/12/09 职场文书
求职简历自我评价2015
2015/03/10 职场文书
单位接收证明格式
2015/06/18 职场文书
银行中层干部培训心得体会
2016/01/11 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python