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的FTP学习(二)[转自奥索]
Oct 09 PHP
php intval的测试代码发现问题
Jul 27 PHP
PHP一些常用的正则表达式字符的一些转换
Jul 29 PHP
PHP 通过Socket收发十六进制数据的实现代码
Aug 16 PHP
php单态设计模式(单例模式)实例
Nov 18 PHP
php递归创建目录的方法
Feb 02 PHP
PHP获取文件扩展名的方法实例总结
Jun 10 PHP
PHP校验15位和18位身份证号的类封装
Nov 07 PHP
浅谈PHP匿名函数和闭包
Mar 08 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
Jun 03 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
Oct 21 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 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 INI配置文件的解析实现分析
2011/01/04 PHP
Django中的cookie与session操作实例代码
2017/08/17 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
详谈Angular路由与Nodejs路由的区别
2017/03/05 NodeJs
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
Python脚本实现代码行数统计代码分享
2015/03/10 Python
python里使用正则表达式的组嵌套实例详解
2017/10/24 Python
Python利用itchat库向好友或者公众号发消息的实例
2019/02/21 Python
pygame库实现移动底座弹球小游戏
2020/04/14 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
利用 Canvas实现绘画一个未闭合的带进度条的圆环
2019/07/26 HTML / CSS
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
一份Java笔试题
2012/02/21 面试题
《小山羊和小灰兔》教学反思
2014/02/19 职场文书
《阳光》教学反思
2014/02/23 职场文书
《窗前的气球》教学反思
2014/04/07 职场文书
保险公司演讲稿
2014/09/02 职场文书
关于运动会广播稿200字
2014/10/08 职场文书
公司仓管员岗位职责
2015/04/01 职场文书
社区文明倡议书
2015/04/28 职场文书
大学运动会通讯稿
2015/07/18 职场文书
交通安全主题班会
2015/08/12 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
2022/04/11 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python