php制作圆形用户头像的实例_自定义封装类源代码
发布时间 - 2026-01-11 03:17:14 点击率:次思路

使用图层的方法设计,共需要创建3个图像层
1.底层:最后生成的图像
2.真实用户头像:作为中间层,用户上传的真实头像图片
3.圆形蒙版:作为最上层,在蒙版中绘制圆形,并设置为透明
如图:
代码如下:
主功能类 avatar.class.php
<?php
class avatar
{
private $fileName; //文件的绝对路径(或基于最终调用文件的相对路径)
private $rgb; //颜色索引(数组 array(255,255,0) 或 16进制值 ffff00/#ffff00/ff0/#ff0)
private $size; //图像大小
private $imgInfo; //图像信息
/**
* 初始化
* Enter description here ...
* @param string $fileName 文件的绝对路径(或基于最终调用文件的相对路径)
* @param mixed $rgb 颜色索引(数组 array(255,255,0) 或 16进制值 ffff00/#ffff00/ff0/#ff0)
* @param int $size 图像大小
*/
public function __construct($fileName, $rgb, $size)
{
$this->fileName = $fileName;
if(is_array($rgb)){
$this->rgb = $rgb; //rgb颜色数组 array(255,255,0)
}else{
//有的人喜欢带#号
$rgb = trim($rgb, '#');
//处理缩写形式
if (strlen($rgb)==3){
$_tmp = $rgb[0].$rgb[0].$rgb[1].$rgb[1].$rgb[2].$rgb[2];
$rgb = $_tmp;
}
$this->rgb = $this->createRGB($rgb); //16进制值 ffff00
}
$this->size = $size;
$this->imgInfo = getimagesize($this->fileName);
if(!$this->imgInfo){
throw Exception("无法读取图像文件");
}
if(!in_array($this->imgInfo[2], array(2,3))){
//仅允许jpg和png
throw Exception("图像格式不支持");
}
}
/**
* 显示图像
* Enter description here ...
*/
public function show()
{
header("content-type:image/png");
$shadow = $this->createshadow(); //遮罩图片
//创建一个方形图片
$imgbk = imagecreatetruecolor($this->size, $this->size); //目标图片
switch ($this->imgInfo[2]){
case 2:
$imgfk = imagecreatefromjpeg($this->fileName); //原素材图片
break;
case 3:
$imgfk = imagecreatefrompng($this->fileName); //原素材图片
default:
return ;
break;
}
$realSize = $this->imgInfo[0]<$this->imgInfo[1]? $this->imgInfo[0] : $this->imgInfo[1];
imagecopyresized($imgbk, $imgfk, 0, 0, 0, 0, $this->size, $this->size, $realSize, $realSize);
imagecopymerge($imgbk, $shadow, 0, 0, 0, 0, $this->size, $this->size, 100);
//创建图像
imagepng($imgbk);
//销毁资源
imagedestroy($imgbk);
imagedestroy($imgfk);
imagedestroy($shadow);
}
/**
* 创建一个圆形遮罩
* Enter description here ...
* @param array 10进制颜色数组
*/
private function createshadow()
{
$img = imagecreatetruecolor($this->size, $this->size);
imageantialias($img, true); //开启抗锯齿
$color_bg = imagecolorallocate($img, $this->rgb[0], $this->rgb[1], $this->rgb[2]); //背景色
$color_fg = imagecolorallocate($img, 0, 0, 0); //前景色,主要用来创建圆形
imagefilledrectangle($img, 0, 0, 200, 200, $color_bg);
imagefilledarc($img, 100, 100, 200, 200, 0, 0, $color_fg, IMG_ARC_PIE);
imagecolortransparent($img, $color_fg); //将前景色转换为透明
return $img;
}
/**
* 将字符形式16进制串转为10进制
* Enter description here ...
* @param $str
*/
private function getIntFromHexStr($str)
{
$format = '0123456789abcdef';
$sum = 0;
for($i=strlen($str)-1, $c=0, $j=0; $i>=$c; $i--,$j++){
$index = strpos($format, $str[$i]);//strpos从0计算
$sum+=$index * pow(16,$j);
}
return $sum;
}
/**
* 将16进制颜色转为10进制颜色值数组(RGB)
* Enter description here ...
* @param $str 16进制串(如:ff9900)
*/
private function createRGB($str)
{
$rgb = array();
if(strlen($str) != 6){
$rgb[] = 0xff;
$rgb[] = 0xff;
$rgb[] = 0xff;
return $rgb; //默认白色
}
$rgb[] = $this->getIntFromHexStr(substr($str, 0, 2));
$rgb[] = $this->getIntFromHexStr(substr($str, 2, 2));
$rgb[] = $this->getIntFromHexStr(substr($str, 4, 2));
return $rgb;
}
}
以上这篇php制作圆形用户头像的实例_自定义封装类源代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# php制作圆形用户头像
# php绘制圆形的方法
# 给大家
# 创建一个
# 前景色
# 中间层
# 希望能
# 自定义
# 不支持
# 如图
# 这篇
# 有的人
# 设置为
# 转换为
# 图层
# 小编
# 源代码
# 大家多多
# 背景色
# 版中
# 上传
# 最上层
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在阿里云服务器自主搭建网站?
Python进程池调度策略_任务分发说明【指导】
公司网站制作价格怎么算,公司办个官网需要多少钱?
如何快速搭建高效可靠的建站解决方案?
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
如何在IIS中新建站点并配置端口与IP地址?
Laravel怎么使用Intervention Image库处理图片上传和缩放
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
Laravel如何实现用户密码重置功能?(完整流程代码)
在centOS 7安装mysql 5.7的详细教程
创业网站制作流程,创业网站可靠吗?
如何制作一个表白网站视频,关于勇敢表白的小标题?
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
在线制作视频的网站有哪些,电脑如何制作视频短片?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
Android滚轮选择时间控件使用详解
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
Linux后台任务运行方法_nohup与&使用技巧【技巧】
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
如何在IIS中新建站点并解决端口绑定冲突?
JavaScript如何实现继承_有哪些常用方法
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
Java遍历集合的三种方式
如何快速生成高效建站系统源代码?
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
如何安全更换建站之星模板并保留数据?
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
详解Android中Activity的四大启动模式实验简述
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
linux写shell需要注意的问题(必看)
制作企业网站建设方案,怎样建设一个公司网站?
Laravel如何记录自定义日志?(Log频道配置)
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
如何挑选优质建站一级代理提升网站排名?
C#如何调用原生C++ COM对象详解
Laravel如何使用Sanctum进行API认证?(SPA实战)
JS实现鼠标移上去显示图片或微信二维码
网站制作免费,什么网站能看正片电影?
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】

