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之第五天
Oct 09 PHP
PHP 七大优势分析
Jun 23 PHP
php与php MySQL 之间的关系
Jul 17 PHP
超级实用的7个PHP代码片段分享
Jan 05 PHP
优化PHP代码技巧的小结
Jun 02 PHP
php设置session值和cookies的学习示例
Mar 21 PHP
php实现压缩多个CSS与JS文件的方法
Nov 11 PHP
php相对当前文件include其它文件的方法
Mar 13 PHP
PHP7.0安装笔记整理
Aug 28 PHP
使用PHPExcel导出Excel表
Sep 08 PHP
PHP使用ajax的post方式下载excel文件简单示例
Aug 06 PHP
laravel实现查询最后执行的一条sql语句的方法
Oct 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
yii实现创建验证码实例解析
2014/07/31 PHP
PHP使用递归生成文章树
2015/04/21 PHP
php实现文本数据导入SQL SERVER
2015/05/17 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
不同浏览器的怪癖小结
2010/07/11 Javascript
表单JS弹出填写提示效果代码
2011/04/16 Javascript
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
2013/04/07 Javascript
Javascript之this关键字深入解析
2013/11/12 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
微信小程序switch组件使用详解
2018/01/31 Javascript
函数式编程入门实践(一)
2019/04/20 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
2019/06/18 jQuery
vue使用recorder.js实现录音功能
2019/11/22 Javascript
python 字典(dict)按键和值排序
2016/06/28 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
关于python字符串方法分类详解
2019/08/20 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
解决Django响应JsonResponse返回json格式数据报错问题
2020/08/09 Python
德国综合购物网站:OTTO
2018/11/13 全球购物
体育教育个人自荐信范文
2013/12/01 职场文书
应届毕业生求职信
2014/05/26 职场文书
学校班班通实施方案
2014/06/11 职场文书
计算机多媒体专业自荐信
2014/07/04 职场文书
2014年党课学习心得体会
2014/07/08 职场文书
关于环保的活动方案
2014/08/25 职场文书
校庆团日活动总结
2014/08/28 职场文书
文员岗位职责
2015/02/04 职场文书
本科毕业论文致谢词
2015/05/14 职场文书
五年级语文教学反思
2016/03/03 职场文书
Win11黑色桌面背景怎么办?Win11黑色壁纸解决方法汇总
2022/04/05 数码科技