使用PHP添加圆形头像

时间:2021-08-24 02:22:19

首先来看一下PHP怎样生成一个圆形透明的图片

 1     function circle($url){
 2 
 3         $w = 430;  $h=430; // original size
 4 
 5         $path = dirname(__FILE__).'/';
 6 
 7         $dest_path=$path.time().'.jpg';
 8 
 9         $src = imagecreatefromstring(file_get_contents($url)); //获取资源文件
10 
11         $newpic = imagecreatetruecolor($w,$h); 
12         //建立的是一幅大小为 x和 y的黑色图像(默认为黑色),如想改变背景颜色则需要用填充颜色函数imagefill($img,0,0,$color);
13         // $img = imagecreatetruecolor(100,100);    //创建真彩图像资源
14         // $color = imagecolorAllocate($img,200,200,200);   //分配一个灰色
15         // imagefill($img,0,0,$color);
16 
17 
18         // 启用混色模式
19         imagealphablending($newpic,false); //设定图像的混色模式
20 
21         //imagealphablending() 允许在真彩色图像上使用两种不同的绘画模式。
22         // 在混色(blending)模式下,alpha 通道色彩成分提供给所有的绘画函数,例如 imagesetpixel() 决定底层的颜色应在何种程度上被允许照射透过。作为结果,GD 自动将该点现有的颜色和画笔颜色混合,并将结果储存在图像中。结果的像素是不透明的。
23         // 在非混色模式下,画笔颜色连同其 alpha 通道信息一起被拷贝,替换掉目标像素。混色模式在画调色板图像时不可用。
24         // 如果 blendmode 为 TRUE,则启用混色模式,否则关闭。成功时返回 TRUE, 或者在失败时返回 FALSE。
25 
26 
27         $transparent = imagecolorallocatealpha($newpic, 233, 40, 59, 0);
28 
29         //imagecolorallocatealpha(resource $image , int $red , int $green , int $blue, int $alpha )
30         // $image 图像资源,通过创造的图像功能,如,一返回imagecreatetruecolor()。
31         // $red 红色分量的价值。
32         // $green 价值的绿色成分。
33         // $blue 蓝色成分的价值。
34         // $alpha 一个介于0和127的价值。 0表示完全不透明,而127表示完全透明。
35 
36 
37         $r=$w/2;
38         for($x=0;$x<$w;$x++)
39             for($y=0;$y<$h;$y++){
40                 $c = imagecolorat($src,$x,$y);
41                 $_x = $x - $w/2;
42                 $_y = $y - $h/2;
43                 if((($_x*$_x) + ($_y*$_y)) < ($r*$r)){
44                     imagesetpixel($newpic,$x,$y,$c);
45                 }else{
46                     imagesetpixel($newpic,$x,$y,$transparent);
47                     //imagesetpixel() 在 image 图像中用 color 颜色在 x,y 坐标(图像左上角为 0,0)上画一个点。
48                 }
49             }
50 
51         //imagesavealpha() 设置标记以在保存 PNG 图像时保存完整的 alpha 通道信息(与单一透明色相反)
52         imagesavealpha($newpic, true);
53         // header('Content-Type: image/png');
54         imagepng($newpic, $dest_path);
55         imagedestroy($newpic);
56         imagedestroy($src);
57 
58         // unlink() 函数删除文件。
59         // 若成功,则返回 true,失败则返回 false。
60         // unlink($url);
61 
62         return $dest_path;
63 
64     }