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获取url字符串截取路径的文件名和扩展名的函数
Jan 22 PHP
php获取mysql数据库中的所有表名的代码
Apr 23 PHP
PHP读取txt文件的内容并赋值给数组的代码
Nov 03 PHP
php验证手机号码(支持归属地查询及编码为UTF8)
Feb 01 PHP
Thinkphp中的curd应用实用要点
Jan 04 PHP
php简单实现无限分类树形列表的方法
Mar 27 PHP
PHP解压tar.gz格式文件的方法
Feb 14 PHP
PHP读取Excel类文件
May 15 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
Jun 19 PHP
Redis在Laravel项目中的应用实例详解
Aug 11 PHP
PHP利用DWZ.CN服务生成短网址
Aug 11 PHP
laravel 修改.htaccess文件 重定向public的解决方法
Oct 12 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
图形数字验证代码
2006/10/09 PHP
学习php开源项目的源码指南
2014/12/21 PHP
谈谈PHP连接Access数据库的注意事项
2016/08/12 PHP
PHP会话控制实例分析
2016/12/24 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
只需五句话搞定JavaScript作用域(经典)
2016/07/26 Javascript
js阻止冒泡和默认事件(默认行为)详解
2016/10/20 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
2016/11/11 Javascript
基于Swiper实现移动端页面图片轮播效果
2017/12/28 Javascript
浅谈Postman解决token传参的问题
2018/03/31 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
Python基于scrapy采集数据时使用代理服务器的方法
2015/04/16 Python
python处理按钮消息的实例详解
2017/07/11 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
详解Python字符串切片
2019/05/20 Python
python交互模式下输入换行/输入多行命令的方法
2019/07/02 Python
Python绘制热力图示例
2019/09/27 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
材料物理专业大学毕业生求职信
2013/10/15 职场文书
空气的环保标语
2014/06/12 职场文书
精神文明建设标语
2014/06/16 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
2015国庆节感想
2015/08/04 职场文书
创业计划书之网络外卖
2019/10/31 职场文书
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL
Python四款GUI图形界面库介绍
2022/06/05 Python