php教程

超轻量级php框架startmvc

php实现背景图上添加圆形logo图标的方法

更新时间:2020-03-15 02:44:40 作者:startmvc
本文实例讲述了php实现背景图上添加圆形logo图标的方法。分享给大家供大家参考,具体如

本文实例讲述了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图标