前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用php实现背景图上添加圆形logo

使用php实现背景图上添加圆形logo

作者头像
沈唁
发布2018-05-24 15:51:40
1.7K0
发布2018-05-24 15:51:40
举报
文章被收录于专栏:沈唁志沈唁志

使用 php 实现背景图上添加圆形 logo,说一下步骤,总共分 3 步:

  1. 压缩 logo 成固定大小的方形图片
  2. 将 logo 转成圆形 logo
  3. 将 logo 与背景图合并

废话不多说,直接上代码:

代码语言:javascript
复制
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;  
    }  
}  

效果如题图。当然没有外围的光圈啦,需要自己加。

沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:使用php实现背景图上添加圆形logo

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图片处理
图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档