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
第一节--面向对象编程
Nov 16 PHP
php 中文字符入库或显示乱码问题的解决方法
Apr 12 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
thinkphp四种url访问方式详解
Nov 28 PHP
composer.lock文件的作用
Feb 03 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
Mar 21 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
PHP实现字符串大小写转函数的功能实例
Feb 06 PHP
Laravel框架实现调用百度翻译API功能示例
May 30 PHP
php解压缩zip和rar压缩包文件的方法
Jul 10 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
Aug 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
用libTemplate实现静态网页的生成
2006/10/09 PHP
php数字游戏 计算24算法
2012/06/10 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
2015/01/22 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
PHP6新特性分析
2016/03/03 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
IE下写xml文件的两种方式(fso/saveAs)
2013/08/05 Javascript
node.js中的fs.exists方法使用说明
2014/12/17 Javascript
JavaScript中的变量定义与储存介绍
2014/12/31 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
2015/02/04 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
jquery+css实现简单的图片轮播效果
2017/08/07 jQuery
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
VUE前后端学习tab写法实例
2019/08/06 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
在python中使用nohup命令说明
2020/04/16 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
Python爬虫代理池搭建的方法步骤
2020/09/28 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
文明好少年事迹材料
2014/08/19 职场文书
奉献家乡演讲稿
2014/09/13 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
英语教师个人总结
2015/02/09 职场文书
2015年学校党支部工作总结
2015/04/01 职场文书
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技