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

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

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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小白课代表

更新|PC截图工具的最佳选择。

说到截图,最常用的可能就是QQ自带的截图功能了,简单流畅能满足我们的日常需求,依附于QQ,没有特殊的需求甚至不需要其他的截图软件。

1330
来自专栏守望轩

Visual Studio 2008 每日提示(十四)

#131、你为什么会把窗体设置成为浮动(模式) 原文链接:Why you would want to make a Tool Window Floating ...

3547
来自专栏calmound

基于iframe的移动端嵌套

需求描述 上上周接到了新的项目,移动端需要做一个底部有五个导航,点击不同的导航页面主体显示不同的页面,其中两个页面是自己做,而另外三个页面是引用另外三个网址,其...

5986
来自专栏知晓程序

一键搞定!小程序调用日历本该如此简单

2504
来自专栏Java开发

WebStorm 代码提示快捷键

1.Ctrl+Shift+a调出面板 2.输入key map过滤出快捷键设计菜单 3.输入basic过滤出提示的快捷键 4.在过滤项上右键添加快捷键

1883
来自专栏计算机编程

SNS项目笔记<八>--Slides显示大图

在浏览大图的时候,我们总有些长图进行查看,在查看的过程中,我们难以一次性查看全部内容,于是我们想,如果在slides里面技能横滑切换,又能竖滑滚动查看就好了。这...

1152
来自专栏极客慕白的成长之路

图标字体应用实践

使用的时候,通过background-position调整显示的位置,如下图所示:

1742
来自专栏小俊博客

通过JS显示网站运行时间

1544
来自专栏h5

支付宝小程序弹窗插件开发|仿微信/android/ios弹窗效果

支付宝小程序弹窗交互组件和微信小程序弹窗功能都差不多,对功能有比较多的限制,尤其想要实现丰富一些的弹窗场景就只能自己写组件实现了。

6222
来自专栏静默虚空的博客

详谈如何定制自己的博客园皮肤

如果你仅仅想原封不动的使用本人的定制皮肤,而不想了解实现细节。那么你只需要完成以下几个步骤即可,后面的章节可以忽略。

4270

扫码关注云+社区

领取腾讯云代金券