当前位置: 首页 > news >正文

用 Python 绘制可爱的招财猫

  ✨个人主页欢迎您的访问 ✨期待您的三连 ✨

 ✨个人主页欢迎您的访问 ✨期待您的三连 ✨

  ✨个人主页欢迎您的访问 ✨期待您的三连✨

  ​​​​​

​​​​​​​​​

​​​​

招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中。今天,我将带你用 Python 和 matplotlib 库从零开始绘制一只可爱的卡通招财猫 🐾。

本篇博客不仅适合对 Python 绘图感兴趣的开发者,还能帮助你了解如何利用 matplotlib 绘制复杂的卡通形象。不需要额外图片资源,一切都用代码实现!

1. 为什么选择用 Python 绘制?🧧✨✨🧧

绘制卡通形象通常需要设计工具(例如 Photoshop Illustrator),但通过 Python,我们可以:

  1. 全面掌控每一部分的比例和颜色:所有几何形状均由代码生成,你可以精确调整它们的位置、大小和颜色。
  2. 程序化生成和复用:绘制的招财猫代码可以用作模板,方便生成不同样式和设计的图案。
  3. 学习数学和编程技巧:绘制图形涉及几何学、坐标系统和编程逻辑。

如果你是一个数据分析师或开发者,这个过程会让你对 matplotlib 的艺术应用有更深的体会!


2. 绘图的基本概念🧧✨✨🧧

在 Python 中,我们将使用以下方法和模块完成绘制任务:

  • matplotlib.patches 模块
    • 提供了绘制基本几何图形的功能,例如圆形、椭圆形、多边形等。
    • 通过 CircleEllipsePolygon 等来构建复杂的卡通形象。
  • matplotlib.pyplot 模块
    • 提供了绘图区域(Figure)和坐标轴(Axes)。
    • 帮助我们将图形添加到画布上,并进行整体调整。

要绘制一只完整的招财猫,我们需要将各个部分分解为基础几何形状,如下所示:

部件几何形状示例
头部和身体圆形、椭圆CircleEllipse
耳朵三角形Polygon
五官(眼、鼻、嘴)弧线和圆形ArcCircle
胡须直线plot
手和脚椭圆形Ellipse
装饰物(铃铛、卷轴等)圆形、长方形CircleFancyBboxPatch

3. 实现代码解析

以下是完整代码,按模块逐步解析。

3.1 设置绘图画布

我们首先创建绘图画布,并设置招财猫的坐标系范围。注意:需要关闭坐标轴,以便突出卡通形象。

import matplotlib.pyplot as plt
from matplotlib.patches import Circle, Ellipse, Polygon, FancyBboxPatch, Arc# 创建画布
fig, ax = plt.subplots(figsize=(6, 8))
ax.set_xlim(-10, 10)
ax.set_ylim(-12, 12)
ax.axis('off')  # 隐藏坐标轴

3.2 绘制头部和身体

招财猫的头部身体由一个大圆和一个椭圆组成。

# 绘制身体
body = Ellipse((0, -2), width=12, height=14, color='white', edgecolor='black', linewidth=2)
ax.add_patch(body)# 绘制头部
head = Circle((0, 5), radius=5, color='white', edgecolor='black', linewidth=2)
ax.add_patch(head)

3.3 绘制耳朵内部细节

耳朵由两个三角形构成,分别是外部的白色耳朵和内部的红色部分。

# 外部耳朵
left_ear = Polygon([[-4, 8], [-6, 12], [-2, 10]], closed=True, color='white', edgecolor='black', linewidth=2)
right_ear = Polygon([[4, 8], [6, 12], [2, 10]], closed=True, color='white', edgecolor='black', linewidth=2)
ax.add_patch(left_ear)
ax.add_patch(right_ear)# 内部耳朵
left_inner_ear = Polygon([[-4.5, 8.5], [-5.5, 11], [-3.5, 9.5]], closed=True, color='red', edgecolor='black', linewidth=1)
right_inner_ear = Polygon([[4.5, 8.5], [5.5, 11], [3.5, 9.5]], closed=True, color='red', edgecolor='black', linewidth=1)
ax.add_patch(left_inner_ear)
ax.add_patch(right_inner_ear)

3.4 绘制五官

招财猫的五官以弧线和圆形为主,营造出微笑的效果。

# 笑眼
left_eye = Arc((-2, 6), width=2, height=1, theta1=0, theta2=180, color='black', linewidth=2)
right_eye = Arc((2, 6), width=2, height=1, theta1=0, theta2=180, color='black', linewidth=2)
ax.add_patch(left_eye)
ax.add_patch(right_eye)# 鼻子和嘴巴
nose = Circle((0, 5), radius=0.2, color='black')
ax.add_patch(nose)
mouth_left = Arc((-0.5, 4.6), width=1, height=0.5, theta1=0, theta2=-180, color='black')
mouth_right = Arc((0.5, 4.6), width=1, height=0.5, theta1=0, theta2=-180, color='black')
ax.add_patch(mouth_left)
ax.add_patch(mouth_right)

3.5 绘制装饰物肚子文字

  • 项圈和铃铛: 
# 项圈
collar = Ellipse((0, 3.5), width=8, height=1.5, color='red', edgecolor='black', linewidth=2)
ax.add_patch(collar)# 铃铛
bell = Circle((0, 2.5), radius=0.8, color='gold', edgecolor='black', linewidth=2)
bell_inner = Circle((0, 2.5), radius=0.3, color='black')
ax.add_patch(bell)
ax.add_patch(bell_inner)
  • 红色卷轴和文字: 

# 红色卷轴
scroll = FancyBboxPatch((6, -2), width=1.5, height=5, boxstyle="round,pad=0.1", color='red', edgecolor='black', linewidth=2)
ax.add_patch(scroll)
ax.text(6.75, 0.5, "招财\n进宝", color='black', fontsize=10, ha='center', va='center', rotation=90)
  • 肚子上的“福 ”字

# 福字
ax.text(0, -3, "福", color='red', fontsize=30, ha='center', va='center')

4. 完整代码🧧✨✨🧧

将所有部分整合在一起:

import matplotlib.pyplot as plt
from matplotlib.patches import Circle, Ellipse, Polygon, FancyBboxPatch, Arcdef draw_lucky_cat():fig, ax = plt.subplots(figsize=(6, 8))ax.set_xlim(-10, 10)ax.set_ylim(-12, 12)ax.axis('off')# 绘制身体body = Ellipse((0, -2), width=12, height=14, color='white', edgecolor='black', linewidth=2)ax.add_patch(body)# 绘制头部head = Circle((0, 5), radius=5, color='white', edgecolor='black', linewidth=2)ax.add_patch(head)# 绘制耳朵left_ear = Polygon([[-4, 8], [-6, 12], [-2, 10]], closed=True, color='white', edgecolor='black', linewidth=2)right_ear = Polygon([[4, 8], [6, 12], [2, 10]], closed=True, color='white', edgecolor='black', linewidth=2)ax.add_patch(left_ear)ax.add_patch(right_ear)# 耳朵内部left_inner_ear = Polygon([[-4.5, 8.5], [-5.5, 11], [-3.5, 9.5]], closed=True, color='red', edgecolor='black', linewidth=1)right_inner_ear = Polygon([[4.5, 8.5], [5.5, 11], [3.5, 9.5]], closed=True, color='red', edgecolor='black', linewidth=1)ax.add_patch(left_inner_ear)ax.add_patch(right_inner_ear)# 绘制眼睛left_eye = Ellipse((-2, 6), width=1, height=0.5, color='black')right_eye = Ellipse((2, 6), width=1, height=0.5, color='black')ax.add_patch(left_eye)ax.add_patch(right_eye)# 绘制鼻子nose = Ellipse((0, 5), width=0.5, height=0.3, color='black')ax.add_patch(nose)# 绘制嘴巴mouth_left = Arc((-0.5, 4.5), width=1, height=0.5, theta1=0, theta2=-180, color='black')mouth_right = Arc((0.5, 4.5), width=1, height=0.5, theta1=0, theta2=-180, color='black')ax.add_patch(mouth_left)ax.add_patch(mouth_right)# 绘制胡须ax.plot([-3, -6], [5.5, 5.8], color='black', linewidth=1)ax.plot([-3, -6], [5, 5], color='black', linewidth=1)ax.plot([-3, -6], [4.5, 4.2], color='black', linewidth=1)ax.plot([3, 6], [5.5, 5.8], color='black', linewidth=1)ax.plot([3, 6], [5, 5], color='black', linewidth=1)ax.plot([3, 6], [4.5, 4.2], color='black', linewidth=1)# 绘制红色项圈collar = Ellipse((0, 3), width=8, height=2, color='red', edgecolor='black', linewidth=2)ax.add_patch(collar)# 绘制铃铛bell = Circle((0, 2.3), radius=0.8, color='gold', edgecolor='black', linewidth=2)bell_inner = Circle((0, 2.3), radius=0.3, color='black')ax.add_patch(bell)ax.add_patch(bell_inner)# 绘制左手和金币left_hand = Ellipse((-5, -2), width=3, height=6, angle=30, color='white', edgecolor='black', linewidth=2)ax.add_patch(left_hand)coin = Ellipse((-7, -1.5), width=3, height=2, color='gold', edgecolor='black', linewidth=2)ax.add_patch(coin)# 绘制右手和红色卷轴right_hand = Ellipse((5, -2), width=3, height=6, angle=-30, color='white', edgecolor='black', linewidth=2)ax.add_patch(right_hand)scroll = FancyBboxPatch((6, -2), width=1.5, height=5, boxstyle="round,pad=0.1", color='red', edgecolor='black', linewidth=2)ax.add_patch(scroll)ax.text(6.75, 0, "招财\n进宝", color='black', fontsize=10, ha='center', va='center', rotation=90)# 绘制脚left_foot = Ellipse((-3, -9), width=3, height=2, color='white', edgecolor='black', linewidth=2)right_foot = Ellipse((3, -9), width=3, height=2, color='white', edgecolor='black', linewidth=2)ax.add_patch(left_foot)ax.add_patch(right_foot)# 绘制肚子上的 "福" 字ax.text(0, -3, "福", color='red', fontsize=30, ha='center', va='center')plt.show()draw_lucky_cat()

最终效果

运行本文的代码后,我们将获得如下所示的可爱卡通招财猫:

从运行结果来看,当前绘图效果和预期的细节相去甚远,需要进一步优化来更好优化招财猫形象。以下是对代码的优化建议和改进版代码:

优化建议

  1. 头部和身体比例:目前身体和头部的比例以及位置没有调整好,应该让头部显得更大,同时调整身体位置。
  2. 耳朵和五官细节:耳朵形状可以更接近原图的尖锐感,眼睛需要弧形的笑眼,鼻子和嘴巴也需要更加拟合。
  3. 装饰物和手臂:红色项圈、铃铛以及手臂的位置要更准确,尤其是左手抱着的金币和右手的卷轴。
  4. 肚子上的福字:调整字体大小和位置,使其更贴合身体。
  5. 整体布局:对位置和比例重新调整,让招财猫整体更加协调。

改进后的代码

以下是优化版的代码,包含上述改进:

import matplotlib.pyplot as plt
from matplotlib.patches import Circle, Ellipse, Polygon, FancyBboxPatch, Arcdef draw_optimized_lucky_cat():fig, ax = plt.subplots(figsize=(6, 8))ax.set_xlim(-10, 10)ax.set_ylim(-12, 12)ax.axis('off')# 绘制身体body = Ellipse((0, -2), width=12, height=14, color='white', edgecolor='black', linewidth=2)ax.add_patch(body)# 绘制头部head = Circle((0, 5), radius=5, color='white', edgecolor='black', linewidth=2)ax.add_patch(head)# 绘制耳朵left_ear = Polygon([[-4, 8], [-6, 12], [-2, 10]], closed=True, color='white', edgecolor='black', linewidth=2)right_ear = Polygon([[4, 8], [6, 12], [2, 10]], closed=True, color='white', edgecolor='black', linewidth=2)ax.add_patch(left_ear)ax.add_patch(right_ear)# 耳朵内部left_inner_ear = Polygon([[-4.5, 8.5], [-5.5, 11], [-3.5, 9.5]], closed=True, color='red', edgecolor='black', linewidth=1)right_inner_ear = Polygon([[4.5, 8.5], [5.5, 11], [3.5, 9.5]], closed=True, color='red', edgecolor='black', linewidth=1)ax.add_patch(left_inner_ear)ax.add_patch(right_inner_ear)# 绘制笑眼left_eye = Arc((-2, 6), width=2, height=1, theta1=0, theta2=180, color='black', linewidth=2)right_eye = Arc((2, 6), width=2, height=1, theta1=0, theta2=180, color='black', linewidth=2)ax.add_patch(left_eye)ax.add_patch(right_eye)# 绘制鼻子和嘴巴nose = Circle((0, 5), radius=0.2, color='black')ax.add_patch(nose)mouth_left = Arc((-0.5, 4.6), width=1, height=0.5, theta1=0, theta2=-180, color='black')mouth_right = Arc((0.5, 4.6), width=1, height=0.5, theta1=0, theta2=-180, color='black')ax.add_patch(mouth_left)ax.add_patch(mouth_right)# 绘制胡须ax.plot([-3, -6], [5.5, 5.8], color='black', linewidth=1)ax.plot([-3, -6], [5, 5], color='black', linewidth=1)ax.plot([-3, -6], [4.5, 4.2], color='black', linewidth=1)ax.plot([3, 6], [5.5, 5.8], color='black', linewidth=1)ax.plot([3, 6], [5, 5], color='black', linewidth=1)ax.plot([3, 6], [4.5, 4.2], color='black', linewidth=1)# 绘制红色项圈collar = Ellipse((0, 3.5), width=8, height=1.5, color='red', edgecolor='black', linewidth=2)ax.add_patch(collar)# 绘制铃铛bell = Circle((0, 2.5), radius=0.8, color='gold', edgecolor='black', linewidth=2)bell_inner = Circle((0, 2.5), radius=0.3, color='black')ax.add_patch(bell)ax.add_patch(bell_inner)# 绘制左手和金币left_hand = Ellipse((-4.5, -2), width=3, height=5, angle=30, color='white', edgecolor='black', linewidth=2)ax.add_patch(left_hand)coin = Ellipse((-7, -1.5), width=3, height=2, color='gold', edgecolor='black', linewidth=2)ax.add_patch(coin)# 绘制右手和红色卷轴right_hand = Ellipse((4.5, -2), width=3, height=5, angle=-30, color='white', edgecolor='black', linewidth=2)ax.add_patch(right_hand)scroll = FancyBboxPatch((6, -2), width=1.5, height=5, boxstyle="round,pad=0.1", color='red', edgecolor='black', linewidth=2)ax.add_patch(scroll)ax.text(6.75, 0.5, "招财\n进宝", color='black', fontsize=10, ha='center', va='center', rotation=90)# 绘制脚left_foot = Ellipse((-3, -8.5), width=3, height=2, color='white', edgecolor='black', linewidth=2)right_foot = Ellipse((3, -8.5), width=3, height=2, color='white', edgecolor='black', linewidth=2)ax.add_patch(left_foot)ax.add_patch(right_foot)# 绘制肚子上的 "福" 字ax.text(0, -3, "福", color='red', fontsize=30, ha='center', va='center')plt.show()draw_optimized_lucky_cat()

改进后的效果

运行优化后的代码,你会发现:

  1. 五官更生动:笑眼、鼻子和嘴巴更符合卡通形象。
  2. 装饰完整:项圈、铃铛、金币、红色卷轴都已正确放置。
  3. 整体比例协调:身体、头部和手臂的位置调整后更加真实。
  4. 细节更加精细:如耳朵的内外填充色、肚子上的福字等。

5. 运行效果🧧✨✨🧧

运行代码后,你将看到一只生动的卡通招财猫!这只猫手持金币和红色卷轴,搭配经典的笑眼与铃铛,非常适合用于海报设计、贺卡或编程练习。


6. 总结与学习心得🧧✨✨🧧

通过这篇教程,你不仅学会了如何用 Python 绘制一只完整的卡通招财猫,还熟悉了 matplotlib.patches 模块的强大之处。试想一下,未来你可以用类似的方法绘制其他卡通形象,甚至设计属于自己的吉祥物!

“编程是一种艺术,而艺术则是程序中最可爱的部分。” ✨


下一个话题:用 Python 绘制春节对联 🌸?

相关文章:

用 Python 绘制可爱的招财猫

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​​​ ​​​​​​​​​ ​​​​ 招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常…...

Linux 获取文本部分内容

Linux获取文本部分内容 前言场景获取前几行内容获取末尾几行内容获取中间内容head 命令 tail 命令 结合sed 命令awk 命令 前言 test.log 文本内容如下: (注意:内容 a1004和a1005之间有一空行) [rootgaussdb002 tmp]# cat test.…...

01-51单片机LED与独立按键

一、单片机概述 注意:个人学习笔记,里面涉及到的C语言和进程转换相关的知识在C语言部分已经写了,这里是默认都会的状态学习单片机。 1.什么是单片机 单片机,英文Micro Controller Unit,简称MCU。其内部集成了CPU、R…...

【微服务】SpringBoot 整合Redis实现延时任务处理使用详解

目录 一、前言 二、延迟任务的高频使用场景 三、延迟任务常用解决方案 3.1 Quartz 3.2 DelayQueue 3.2.1 Timer + TimerTask 3.2.2 ScheduledExecutorService 3.3 Redis sorted set 3.4 RabbitMQ 四、Redis实现延时队列操作实战 4.1 Redis Sorted Set 概述 4.1.1 Re…...

【Java项目】基于SpringBoot的【校园交友系统】

【Java项目】基于SpringBoot的【校园交友系统】 技术简介:系统软件架构选择B/S模式、SpringBoot框架、java技术和MySQL数据库等,总体功能模块运用自顶向下的分层思想。 系统简介:系统主要包括管理员和用户。 (a) 管理员的功能主要有首页、个人…...

Elasticsearch学习(1) : 简介、索引库操作、文档操作、RestAPI、RestClient操作

目录 1.elasticsearch简介1.1.了解es1.2.倒排索引正向索引和倒排索引 1.3.es的一些概念:文档和字段;索引和映射;Mysql与ES1.4.安装es、kibana部署单点es部署kibanaIK分词器安装IK分词器与测试扩展与停用词词典总结 部署es集群 2.索引库操作2.1.mapping映…...

ls指令详讲

🏝️专栏:https://blog.csdn.net/2301_81831423/category_12872319.html 🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 目录 基本语法 常用选项详解 1. 基本选项 …...

【前端】【CSS3】基础入门知识

目录 如何学习CSS 1.1什么是CSS​编辑 1.2发展史 1.三种导入方式 1.1、行内样式 1.2、外部样式 1.3、嵌入方式 2.选择器 2.1、基本选择器 (1)元素选择器 (2)类选择器 (3)id选择器:必…...

计算机网络之---RIP协议

RIP协议的作用 RIP (Routing Information Protocol) 协议是一个基于距离矢量的路由协议,它在网络中用来动态地交换路由信息。RIP 是最早的路由协议之一,通常用于小型和中型网络中。它的工作原理简单,易于实现,但在一些大型网络中效…...

【LeetCode Hot100 贪心算法】 买卖股票的最佳时机、跳跃游戏、划分字母区间

贪心算法 买卖股票的最佳时机买卖股票的最佳时机II跳跃游戏跳跃游戏II划分字母区间 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的…...

互联网架构变迁:从 TCP/IP “呼叫” 到 NDN “内容分发” 的逐浪之旅

本文将给出关于互联网架构演进的一个不同视角。回顾一下互联网的核心理论基础产生的背景: 左边是典型的集中控制通信网络,很容易被摧毁,而右边的网络则没有单点问题,换句话说它很难被全部摧毁,与此同时,分…...

git相关操作笔记

git相关操作笔记 1. git init git init 是一个 Git 命令,用于初始化一个新的 Git 仓库。执行该命令后,Git 会在当前目录创建一个 .git 子目录,这是 Git 用来存储所有版本控制信息的地方。 使用方法如下: (1&#xff…...

jenkins 使用 ssh-agent向windows进行部署

背景: jenkins在linux的docker环境内,应用服务部署在windows。需要使用jenkins实现自动化部署。 实现方式: jenkins上构建pipeline任务,脚本如下: 遇到问题: 1、问题:jenkins 调用部署bat脚…...

MySQL入门学习笔记

第一章 数据库系统概述 数据库的4个基本概念 数据、数据库、数据库管理系统、数据库系统是与数据库技术密切相关的4个基本概念 数据 数据是数据库中存储的基本对象,描述事物的符号记录称为数据,数据的表现形式还不能完全表达其内容,需要…...

机器学习全流程解析:数据导入到服务上线全阶段介绍

目录 1. 数据导入 2. 数据预处理 3. 超参数搜索与优化 4. 模型训练 5. 模型评估 6. 模型压缩与优化 7. 模型注册与版本管理 8. 服务上线与部署 总结 1. 数据导入 数据源:数据库、文件系统、API等。数据格式:CSV、JSON、SQL 数据库表、Parquet …...

C#从“Hello World!“开始

是时候一览C#的庐山真面目了。现在,让我们从"Hello World"开始吧,出发! 1. 一个简单的C#程序 先来看一段最简单的示例代码,如代码清单2-1所示。 代码清单2-1 HelloWorldClass.cs using System;namespace Programmi…...

LVS 支持 UDP 协议代理

在现代网络架构中,负载均衡技术是保证高可用性和高性能的关键组成部分。Linux Virtual Server(LVS)作为一个高效、稳定的负载均衡解决方案,广泛应用于处理 TCP 流量的场景。然而,随着实时通信、视频流和在线游戏等应用的不断发展,UDP 协议的支持成为了 LVS 负载均衡的重要…...

【C++经典例题】求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏: 期待您的关注 题目描述: 原题链接: 求123...n_牛客题霸_牛客网 (nowcoder.com) 解题思路: …...

Rabbitmq 具体怎么做到削峰的,是丢弃部分消费吗,有的实际场景是不允许丢弃

在高并发场景中,RabbitMQ 可以通过几种策略来实现 削峰(缓解瞬时负载激增),而这些策略并不一定需要丢弃消息。在一些业务场景下,丢弃消息显然是不允许的,因此在这种情况下,可以使用以下方法来确…...

Linux渗透实战之Nullbyte靶场提权

0x1 前言 一、浅谈 哈喽师傅们,这次又到了给师傅们分享文章的时候了,这篇文章呢主要是给师傅们以vulnhub中的Nullbyte靶场来给师傅们演示下通过Hydra表单暴力破解等操作拿到账户密码,然后中间以四种sql注入的方式给大家非常详细的操作了sql…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

【单片机期末】单片机系统设计

主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...