【Canvas与艺术】新制无底图安布雷拉暗黑系桌面(1920*1080)

【主要变化】

1.去掉底图,改为金丝正六边形组合而成的网格;

2.将安布雷拉标志调暗;

【成图】

【代码】

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head><title>使用HTML5/Canvas绘制无底图安布雷拉桌面</title><style type="text/css">.centerlize{margin:0 auto;width:1200px;}</style></head><body οnlοad="init();"><div class="centerlize"><canvas id="myCanvas" width="12px" height="12px" style="border:1px dotted black;">如果看到这段文字说您的浏览器尚不支持HTML5 Canvas,请更换浏览器再试.</canvas></div></body>
</html>
<script type="text/javascript">
<!--
/*****************************************************************
* 将全体代码(从<!DOCTYPE到script>)拷贝下来,粘贴到文本编辑器中,
* 另存为.html文件,再用chrome浏览器打开,就能看到实现效果。
******************************************************************/// canvas的绘图环境
var ctx;// 高宽
const WIDTH=1920;
const HEIGHT=1080;// 舞台对象
var stage;//-------------------------------
// 初始化
//-------------------------------
function init(){// 获得canvas对象var canvas=document.getElementById('myCanvas');  canvas.width=WIDTH;canvas.height=HEIGHT;// 初始化canvas的绘图环境ctx=canvas.getContext('2d');  ctx.translate(WIDTH/2,HEIGHT/2);// 原点平移// 准备stage=new Stage();    stage.init();// 开幕animate();
}// 播放动画
function animate(){    stage.update();    stage.paintBg(ctx);stage.paintFg(ctx);     // 循环if(true){//sleep(100);window.requestAnimationFrame(animate);   }
}// 舞台类
function Stage(){// 初始化this.init=function(){}// 更新this.update=function(){    }// 画背景this.paintBg=function(ctx){ctx.clearRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);// 清屏    }// 画前景this.paintFg=function(ctx){// 黑底ctx.fillStyle = "black";ctx.fillRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);// 金丝正六边形网格底var r=6;        for(var i=0;i<200;i++){for(var j=0;j<120;j++){var x=i*r*Math.sqrt(3)-WIDTH/2;var y=j*r*3/2-HEIGHT/2;if(j%2==0){x-=r;}drawSixgon(ctx,x,y,r);ctx.lineWidth=2;ctx.lineCap="round";ctx.strokeStyle="rgb(255,215,0)";ctx.stroke();}}// 中心稍亮背景渐黑的半透明蒙版var rgnt=ctx.createRadialGradient(0,0,0,0,0,WIDTH/2);rgnt.addColorStop(0,"rgba(35,35,35,0.77)");rgnt.addColorStop(1,"rgba(1,1,1,0.88)");ctx.fillStyle=rgnt;ctx.fillRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);// 八片红白相间伞叶const radius=200;for(var i=0;i<8;i++){var start=i*Math.PI/4+Math.PI/8;var ptStart=createPt(radius*Math.cos(start),radius*Math.sin(start));var end=start+Math.PI/4;var ptEnd=createPt(radius*Math.cos(end),radius*Math.sin(end));var ptArc=createPt(ptStart.x+ptEnd.x,ptStart.y+ptEnd.y);ctx.beginPath();ctx.moveTo(0,0);ctx.lineTo(ptStart.x,ptStart.y);ctx.arc(ptArc.x,ptArc.y,radius,end-Math.PI,start-Math.PI,true);ctx.closePath();ctx.fillStyle=(i%2==1)?"rgb(174,0,0)":"rgb(208,208,208)";ctx.fill();ctx.lineWidth=8;ctx.lineJoin="round";ctx.strokeStyle="black";ctx.stroke();}// 中心文字writeText(ctx,0,280,"Umbrella Corporation","48px consolas","lightgreen");writeText(ctx,0,330,"OUR BUSINESS IS LIFE ITSELF.","28px consolas","rgb(224,224,224)");writeText(ctx,WIDTH/2-30,HEIGHT/2-5,"逆火原创","8px consolas","white");// 版权}
}// 绘制尖朝上的正六边形,是drawPolygon的套娃函数
function drawSixgon(ctx,x,y,r){ctx.save();ctx.translate(x,y);ctx.rotate(Math.PI/2);drawPolygon(ctx,6,0,0,r);ctx.restore();
}/*----------------------------------------------------------
函数:绘制正多边形
n:正多边形的边数
x:正多边形中心的横坐标
y:正多边形中心的纵坐标
r:正多边形中心到顶点的距离
----------------------------------------------------------*/
function drawPolygon(ctx,n,x,y,r){var polyArr=[];for(var i=0;i<n;i++){var theta=Math.PI*2/n*i;var pt={};pt.x=r*Math.cos(theta)+x;pt.y=r*Math.sin(theta)+y;polyArr.push(pt);}ctx.beginPath();for(let i=0;i<polyArr.length;i++){ctx.lineTo(polyArr[i].x,polyArr[i].y);}ctx.closePath();
}/*----------------------------------------------------------
函数:创建一个二维坐标点
x:横坐标
y:纵坐标
Pt即Point
----------------------------------------------------------*/
function createPt(x,y){var retval={};retval.x=x;retval.y=y;return retval;
}/*----------------------------------------------------------
函数:延时若干毫秒
milliseconds:毫秒数
----------------------------------------------------------*/
function sleep(milliSeconds) {const date = Date.now();let currDate = null;while (currDate - date < milliSeconds) {currDate = Date.now();} 
}/*----------------------------------------------------------
函数:书写文字
ctx:绘图上下文
x:横坐标
y:纵坐标
text:文字
font:字体
color:颜色
----------------------------------------------------------*/
function writeText(ctx,x,y,text,font,color){ctx.save();ctx.textBaseline="bottom";ctx.textAlign="center";ctx.font = font;ctx.fillStyle=color;ctx.fillText(text,x,y);ctx.restore();
}/*-------------------------------------------------------------
我和女儿说:
如果谈朋友,决定发生关系前必须陪同男方去体检,
并第一时间查验男方的体检报告;
如果要结婚需要男方提供无犯罪证明,并和父母一起提供征信报告。
先小人后君子是必要的,否则悔之晚矣!
--------------------------------------------------------------*/
//-->
</script>

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/6125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入学习@TableField注解:MyBatis-Plus中的字段映射技术解析

深入学习TableField注解&#xff1a;MyBatis-Plus中的字段映射技术解析 一、 介绍1、TableField注解的作用2、TableField注解的属性3、实际应用场景4、注意事项5、示例代码6、结论 一、 介绍 在基于Java的持久化框架中&#xff0c;实体类的字段映射到数据库表的列是一个基本操…

力扣HOT100 - 78. 子集

解题思路&#xff1a; class Solution {public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> lists new ArrayList<>(); // 解集lists.add(new ArrayList<Integer>()); // 首先将空集加入解集中for(int i 0; i < n…

Mac 安装 JDK21 流程

一、下载JDK21 访问Oracle官方网站或选择OpenJDK作为替代品。Oracle JDK从11版本开始是商业的&#xff0c;可能需要支付费用。OpenJDK是一个免费开源选项。 Oracle JDK官方网站&#xff1a;Oracle JDK Downloads OpenJDK官方网站&#xff1a;OpenJDK Downloads 这里以JDK21为…

大模型部署之前端页面编写框架,我选streamlit

简介 Streamlit是一个开源的Python库,它让数据科学家和开发者可以快速创建和分享美观的,交互式的Web应用。无需拥有前端开发经验,任何人都可以使用Streamlit将数据脚本转换为分享给非技术用户的交互式Web应用。它简化了Web应用的开发流程,让开发者能够专注于数据和业务逻辑…

FP16、BF16、INT8、INT4精度模型加载所需显存以及硬件适配的分析

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

EDA(一)Verilog

EDA&#xff08;一&#xff09;Verilog Verilog是一种用于电子系统设计自动化&#xff08;EDA&#xff09;的硬件描述语言&#xff08;HDL&#xff09;&#xff0c;主要用于设计和模拟电子系统&#xff0c;特别是在集成电路&#xff08;IC&#xff09;和印刷电路板&#xff08;…

Apache RocketMQ知识点表格总结及示例

RocketMQ的使用大概还是四五年前的时候&#xff0c;最近几年参与的项目基本上都是使用的RabbitMQ,就我个人来说&#xff0c;我也更喜欢使用RabbitMQ&#xff0c;不过消息队列的功能都差不多&#xff0c;大同小异。原理也类似。我喜欢使用RabbitMQ&#xff0c;是因为RabbitMQ安装…

Linux / Ubuntu 备份数据

Linux / Ubuntu 备份数据 需要备份的文件tar 工具备份/打包过程恢复/解包过程 流程自动化start_backup.shserver_backup.sh 同步发布在个人笔记Linux / Ubuntu 备份数据 需要备份的文件 对于我们的 linux 服务器&#xff08;当然也适用于桌面端&#xff09;&#xff0c;时常进…

CogVLM/CogAgent环境搭建推理测试

引子 对于多模态大语言模型&#xff0c;一直没有怎么接触。刚巧一朋友有问到这方面的问题&#xff0c;也就顺手调研下。智谱AI的东西一直以来&#xff0c;还是很不错的。ChatGLM的忠实fans&#xff0c;看到白嫖网站github上有他们开源的多模态CogVLM/CogAgent&#xff0c;那就…

C语言:文件操作(中)

片头 嗨&#xff01;小伙伴们&#xff0c;大家好&#xff01;在上一篇中&#xff0c;我们学习了C语言&#xff1a;文件操作&#xff08;上&#xff09;&#xff0c;在这一篇中&#xff0c;我们将继续学习文件操作&#xff0c;准备好了吗&#xff1f;Ready Go ! ! ! 文件的顺序…

Linux下top命令指标说明

目录 Linux下top命令指标说明1. 概览2. CPU利用率3. 内存利用率4. 进程信息 Linux下top命令指标说明 在Linux系统中&#xff0c;top 命令是一个用于实时监视系统运行状态的工具。通过 top 命令&#xff0c;我们可以了解系统的负载情况、CPU利用率、内存使用情况以及各个进程的…

ubuntu修改/etc/resolve.conf总是被重置

ubuntu修改/etc/resolve.conf总是被重置 其实处理来很简单&#xff0c;根据英文提示删除/etc/resolve.conf,那是一个软链接&#xff0c;重新创建/etc/resolve.conf rm /etc/resolve.conf vi /etc/resolve.conf 添加nameserver 223.5.5.5

短视频素材去哪里搬运?短视频素材有哪些类型?

在这个数字化和视觉传达至关重要的时代&#xff0c;选择合适的视频素材对于提升视频内容的吸引力和观众参与度至关重要。无论您是一名广告制片人、社交媒体经理还是独立视频制作者&#xff0c;以下这些精选的视频素材网站将为您提供从高清视频到特效资源的全面支持&#xff0c;…

【Qt】Qt输出多页pdf

Qt输出多页 pdf 2. 代码 QFile pdfFile("./tmp.pdf");pdfFile.open(QIODevice::WriteOnly);QPdfWriter *pPdfWriter new QPdfWriter(&pdfFile);pPdfWriter->setResolution(300);pPdfWriter->setPageSize(QPageSize(QPageSize::A4));pPdfWriter->setPag…

7.k8s中的名称空间namespace

目录 一、Namespace(命名空间) 二、查看系统的名称空间 1.查看系统中的名称空间列表 2.单独查看一个名称空间下的对应资源 三、名称空间的管理 1.创建名称空间 1.1响应式创建 1.2声明式创建 2.删除名称空间 四、资源引用名称空间 一、Namespace(命名空间) 命名空间(Name…

深入解析算法效率核心:时间与空间复杂度概览及优化策略

算法复杂度&#xff0c;即时间复杂度与空间复杂度&#xff0c;衡量算法运行时资源消耗。时间复杂度反映执行时间随数据规模增长的关系&#xff0c;空间复杂度表明额外内存需求。优化策略&#xff0c;如选择合适数据结构、算法改进、循环展开等&#xff0c;对于提升程序效率、减…

如何用 Redis 实现延迟队列?

延迟队列是一种常见的消息队列模式&#xff0c;用于处理需要延迟执行的任务或消息。Redis 是一种快速、开源的键值对存储数据库&#xff0c;具有高性能、持久性和丰富的数据结构&#xff0c;因此很适合用于实现延迟队列。在这篇文章中&#xff0c;我们将详细讨论如何使用 Redis…

树莓派控制步进电机(下):软件编程

目录 说明 软件编程 树莓派的RPI编程 基本测试程序 参考文献 说明 在上一篇博文中我们介绍了树莓派控制步进电机所需要的硬件连接&#xff0c;本篇博文主要介绍软件编程。这里我们使用的是树莓派4B开发板&#xff0c;步进电机为6线两相步进电机&#xff0c;驱动器采用的是…

TypeScript 的 interface

在TypeScript&#xff08;TS&#xff09;中&#xff0c;interface 是一个非常核心的概念&#xff0c;用于定义类型结构。它帮助开发者为对象、函数参数或者返回值等设定一种结构化的类型规范。接口允许你定义一个蓝图&#xff0c;描述一个对象应该具有的形状&#xff08;属性和…

【More Effective C++】条款25:将构造函数和非成员函数虚拟化

构造函数虚化&#xff1a; NewsLetter构造函数&#xff0c;能根据不同数据建立不同类型的对象&#xff0c;行为与构造函数相似&#xff1b; class NLComponent {}; class TextBlock: public NLComponent {}; class Graphic: public NLComponent {}; class NewsLetter { publi…