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 xml文件操作代码(一)
Mar 20 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
Dec 06 PHP
PHP基于数组实现的分页函数实例
Aug 20 PHP
PHP页面实现定时跳转的方法
Oct 31 PHP
php实现购物车功能(下)
Jan 05 PHP
PHP Ajax实现无刷新附件上传
Aug 17 PHP
PHP经典算法集锦【经典收藏】
Sep 14 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
Nov 20 PHP
PHP简单实现正则匹配省市区的方法
Apr 13 PHP
php引用和拷贝的区别知识点总结
Sep 23 PHP
php+iframe 实现上传文件功能示例
Mar 04 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采集相关教程之一 CURL函数库
2010/02/15 PHP
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
PHP控制反转(IOC)和依赖注入(DI)
2017/03/13 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
jQuery中wrapAll()方法用法实例
2015/01/16 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
vue基于element的区间选择组件
2018/09/07 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
微信小程序利用for循环解决内容变更问题
2020/03/05 Javascript
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
python操作xml文件详细介绍
2014/06/09 Python
Python中给List添加元素的4种方法分享
2014/11/28 Python
mac 安装python网络请求包requests方法
2018/06/13 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
python多线程与多进程及其区别详解
2019/08/08 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
python pprint模块中print()和pprint()两者的区别
2020/02/10 Python
如何让python的运行速度得到提升
2020/07/08 Python
美国在线印刷公司:PsPrint
2017/10/12 全球购物
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
Linux如何为某个操作添加别名
2013/03/01 面试题
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
建筑工程技术应届生求职信
2013/11/17 职场文书
土木工程专业个人求职信
2013/12/30 职场文书
教育技术学专业职业规划书
2014/03/03 职场文书
服务口号大全
2014/06/11 职场文书
2016大学迎新晚会开场白
2015/11/24 职场文书
纯CSS实现酷炫的霓虹灯效果
2021/04/13 HTML / CSS
MySQL连接查询你真的学会了吗?
2021/06/02 MySQL