本文实例讲述了php实现背景图上添加圆形logo图标的方法。分享给大家供大家参考,具体如下:
说一下步骤:
总共分 3 步:
1. 压缩logo 成固定大小的方形图片
2. 将logo 转成圆形logo
3. 将logo与背景图合并
废话不多说,直接上代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
<?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程序设计有所帮助。