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的日期处理函数及uchome的function_coomon中日期处理函数的研究
Jan 12 PHP
应用开发中涉及到的css和php笔记分享
Aug 02 PHP
通过php快速统计某个数据库中每张表的数据量
Sep 04 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
Sep 07 PHP
基于php下载文件的详解
Jun 02 PHP
使用session判断用户登录用户权限(超简单)
Jun 08 PHP
PHP与Java进行通信的实现方法
Oct 21 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
Jun 10 PHP
PHP框架Laravel插件Pagination实现自定义分页
Apr 22 PHP
PDO::getAvailableDrivers讲解
Jan 28 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
Apr 14 PHP
tp5.1 框架数据库高级查询技巧实例总结
May 25 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 PDO fetch 模式各种参数的输出结果一览
2015/01/07 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
javascript cookies操作集合
2010/04/12 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
javascript中checkbox使用方法简单实例演示
2015/11/17 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
微信小程序 教程之wxapp 视图容器 view
2016/10/19 Javascript
jquery插件bootstrapValidator数据验证详解
2016/11/09 Javascript
JavaScript实现时间表动态效果
2017/07/15 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
js实现div色块碰撞
2020/01/16 Javascript
Vue 中使用 typescript的方法详解
2020/02/17 Javascript
针对Vue路由history模式下Nginx后台配置操作
2020/10/22 Javascript
Python中pygame安装方法图文详解
2015/11/11 Python
Python微信库:itchat的用法详解
2017/08/14 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
css3媒体查询中device-width和width的区别详解
2020/03/27 HTML / CSS
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
Gretna Green中文官网:苏格兰格林小镇
2019/10/16 全球购物
给校长的建议书300字
2014/05/16 职场文书
高考标语大全
2014/06/05 职场文书
2014年食堂工作总结
2014/11/20 职场文书
优秀团队申报材料
2014/12/26 职场文书
小学数学教师研修感悟
2015/11/18 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫
Oracle锁表解决方法的详细记录
2022/06/05 Oracle
Python实战实现爬取天气数据并完成可视化分析详解
2022/06/16 Python