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
解决中英文字符串长度问题函数
Jan 16 PHP
php模板原理讲解
Nov 13 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
Dec 25 PHP
php判断数组元素中是否存在某个字符串的方法
Jun 14 PHP
文件上传之SWFUpload插件(代码)
Jul 30 PHP
Zend Framework开发入门经典教程
Mar 23 PHP
header与缓冲区之间的深层次分析
Jul 30 PHP
PHP中功能强大却很少使用的函数实例小结
Nov 10 PHP
PHP 500报错的快速解决方法
Dec 14 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
php类自动装载、链式操作、魔术方法实现代码
Jul 23 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 空格,换行,跳格使用说明
2009/12/18 PHP
php中static静态变量的使用方法详解
2010/06/04 PHP
CI框架简单邮件发送类实例
2016/05/18 PHP
Laravel5.5新特性之友好报错以及展示详解
2017/08/13 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
JS定时关闭窗口的实例
2013/05/22 Javascript
JS画5角星方法介绍
2013/09/17 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
js正则表达exec与match的区别说明
2014/01/29 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
2015/11/18 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
javascript实现2016新年版日历
2016/01/25 Javascript
JavaScript 闭包机制详解及实例代码
2016/10/10 Javascript
JS实现仿PS的调色板效果完整实例
2016/12/21 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
vue图片加载失败时用默认图片替换的方法
2019/08/29 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
python版DDOS攻击脚本
2019/06/12 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
Python自动化导出zabbix数据并发邮件脚本
2019/08/16 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
python使用openpyxl操作excel的方法步骤
2020/05/28 Python
python进度条显示之tqmd模块
2020/08/22 Python
python操作toml文件的示例代码
2020/11/27 Python
Django如何重置migration的几种情景
2021/02/24 Python
Notino法国:购买香水和化妆品
2019/04/15 全球购物
镇创先争优活动总结
2014/08/28 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python