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 相关文章推荐
探讨file_get_contents与curl效率及稳定性的分析
Jun 06 PHP
PHP中的str_repeat函数在JavaScript中的实现
Sep 16 PHP
php+mysql数据库实现无限分类的方法
Dec 12 PHP
PHP判断一个字符串是否是回文字符串的方法
Mar 23 PHP
PHP、Java des加密解密实例
Apr 27 PHP
php使用Imagick生成图片的方法
Jul 31 PHP
php如何实现只替换一次或N次
Oct 29 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
Nov 02 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
Nov 16 PHP
关于PHP通用返回值设置方法
Mar 31 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
Mar 18 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
Sep 04 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迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
2019/02/15 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
js实现简单模态窗口,背景灰显
2008/11/14 Javascript
Javascript的一种模块模式
2010/09/08 Javascript
js如何设置在iframe框架中指定div不显示
2013/12/04 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
jquery自动填充勾选框即把勾选框打上true
2014/03/24 Javascript
Javascript URI 解析介绍
2015/03/15 Javascript
浅析JavaScript中的事件机制
2015/06/04 Javascript
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
微信小程序getPhoneNumber获取用户手机号
2017/09/29 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
2019/02/13 Javascript
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
Python 网页解析HTMLParse的实例详解
2017/08/10 Python
Python面向对象之继承代码详解
2018/01/29 Python
win10下tensorflow和matplotlib安装教程
2018/09/19 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
基于YUV 数据格式详解及python实现方式
2019/12/09 Python
Python pandas如何向excel添加数据
2020/05/22 Python
eDreams澳大利亚:预订机票、酒店和度假产品
2017/04/19 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
农村婚礼证婚词
2014/01/08 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
退货证明模板
2015/06/23 职场文书
初级职称评定工作总结
2015/08/13 职场文书
田径运动会广播稿
2015/08/19 职场文书
小学语文继续教育研修日志
2015/11/13 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书
MySQL中utf8mb4排序规则示例
2021/08/02 MySQL
微信小程序调用python模型
2022/04/21 Python