![](https://img-blog.csdnimg.cn/direct/b0d562bcf4324e5b994868abefa3b232.png)
背景需求:
数感训练《1-10数字🔢练习》 - 小红书#儿童专注力训练 #数感启蒙 #数学启蒙
https://www.xiaohongshu.com/discovery/item/66186e2a000000001a0146c6?app_platform=android&ignoreEngage=true&app_version=8.35.0&share_from_user_hidden=true&type=normal&author_share=1&xhsshare=WeixinSession&shareRedId=ODszMTs4Nk82NzUyOTgwNjg3OTlHS0xC&apptime=1715501410
小红书上的“数感训练”——在一堆数字圆圈里,画出和坐上叫一样的数字(涂色)
![](https://img-blog.csdnimg.cn/direct/47b60cd9ea854516b95ae715ef0c7400.png)
素材准备
![](https://img-blog.csdnimg.cn/direct/5a2316d5d0ab40fd81a31b1d4349587b.png)
代码展示
'''
数感训练-0-10数字
AI对话大师,阿夏
2024年5月18日
'''
import random
import math
from PIL import Image, ImageDraw, ImageFont
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\数字数感训练\jpg'
canvas_width, canvas_height = 3000, 4000 # 调整画布的宽度和高度
numbers = [i for i in range(0,10)]
print(numbers)
n=0
for i in numbers:
# 创建白色画布
canvas_color = (255, 255, 255)
canvas = Image.new('RGB', (canvas_width, canvas_height), canvas_color)
draw = ImageDraw.Draw(canvas)
# 字体设置
font_path = r"C:\Windows\Fonts\simhei.ttf" # 黑体字体路径,请根据实际情况修改
font_size = 500
font = ImageFont.truetype(font_path, font_size)
# 在左上角绘制阴影效果
shadow_color = (100, 100, 100)
shadow_offset = (8, 8)
draw.text((100 + shadow_offset[0], 100 + shadow_offset[1]), fr'{i}', font=font, fill=shadow_color)
# 在左上角绘制数字1
text_color = (0, 0, 0)
draw.text((100, 100), fr'{i}', font=font, fill=text_color)
# 生成10磅黑线白色圆圈
circle_radius = 100
circle_border_color = (0, 0, 0)
circle_fill_color = (255, 255, 255)
border_width = 10
circle_distance = 60 + circle_radius * 2 # 圆圈之间的距离
# 圆形于边框的距离
bj=30
# 存储圆圈的位置信息,用于检查是否相交
circle_positions = []
# 阿拉伯数字字体设置
number_font_size = 150
number_font = ImageFont.truetype(font_path, number_font_size)
# 计算可以生成圆圈的区域范围circle_distance 加了一个园的距离,离开边框就大了
# min_x = circle_radius + border_width + circle_distance
# max_x = canvas_width - circle_radius - border_width - circle_distance
# min_y = circle_radius + border_width + circle_distance
# max_y = canvas_height - circle_radius - border_width - circle_distance
min_x = circle_radius + border_width + bj
max_x = canvas_width - circle_radius - border_width - bj
min_y = circle_radius + border_width + bj
max_y = canvas_height - circle_radius - border_width - bj
for _ in range(500):
# 生成圆心位置
x = random.randint(min_x, max_x)
y = random.randint(min_y, max_y)
# 排除左上角区域
if x <= 800 and y <= 800:
continue
# 检查与已有圆圈是否相交
is_intersect = False
for position in circle_positions:
distance = math.sqrt((x - position[0]) ** 2 + (y - position[1]) ** 2)
if distance < circle_distance:
is_intersect = True
break
if not is_intersect:
# 绘制外圆,边线粗细为10磅
outer_circle_radius = circle_radius + border_width
outer_circle_bbox = (
x - outer_circle_radius, y - outer_circle_radius, x + outer_circle_radius, y + outer_circle_radius)
draw.ellipse(outer_circle_bbox, fill=circle_border_color)
# 绘制内圆,填充为白色
inner_circle_radius = circle_radius
inner_circle_bbox = (
x - inner_circle_radius, y - inner_circle_radius, x + inner_circle_radius, y + inner_circle_radius)
draw.ellipse(inner_circle_bbox, fill=circle_fill_color)
# 在圆圈内绘制随机生成的阿拉伯数字
number = random.choice(numbers)
number_width, number_height = draw.textsize(str(number), font=number_font)
number_x = x - number_width // 2
number_y = y - number_height // 2
draw.text((number_x, number_y), str(number), font=number_font, fill=text_color)
# 将圆圈位置添加至列表
circle_positions.append((x, y))
# 保存为1.png
canvas.save(path + fr'\{n:02d}.png')
n+=1
![](https://img-blog.csdnimg.cn/direct/e438a3faf42940298b6b97351f506e4f.png)
![](https://img-blog.csdnimg.cn/direct/94dfde8d465548a7b16638e741ed4de9.png)
![](https://img-blog.csdnimg.cn/direct/a33097e0ab6e4606828c68ccac86f05a.png)
![](https://img-blog.csdnimg.cn/direct/0ead221bfaa240449a0a5a04ca9f4099.png)
![](https://img-blog.csdnimg.cn/direct/d20639edd0b04846a0b04c8be07e99d2.png)
![](https://img-blog.csdnimg.cn/direct/ee12830295474f949eff42fbcdc9315b.png)
![](https://img-blog.csdnimg.cn/direct/1148b082496d4bae88120479c09e7c9b.png)
![](https://img-blog.csdnimg.cn/direct/b0d562bcf4324e5b994868abefa3b232.png)
![](https://img-blog.csdnimg.cn/direct/52bfaf2a48bd4a838d9a80e4c81f3b05.png)
![](https://img-blog.csdnimg.cn/direct/6e0b2b94d1304dc6bbf3819d95b4b4bd.png)
![](https://img-blog.csdnimg.cn/direct/c88208d3fd864a5cab1dd55e9ddcc9d1.png)
修改数字,还可以变成跟更大的数字
![](https://img-blog.csdnimg.cn/direct/4cef889de3b24147a3dc4fee600e03d6.png)
![](https://img-blog.csdnimg.cn/direct/462c111a0f58413a990e4d19b82a28ca.png)
![](https://img-blog.csdnimg.cn/direct/a2427878ca3e4951849a1e57ed5876a7.png)
![](https://img-blog.csdnimg.cn/direct/bdda73fa96174786acad3f6d5cb824cb.png)
![](https://img-blog.csdnimg.cn/direct/48152f8a4d784210963ee5f5e764fc07.png)
![](https://img-blog.csdnimg.cn/direct/f71f7f401ce04341b1900446e3c378f5.png)
![](https://img-blog.csdnimg.cn/direct/581cbd60e3844d6c9161db6362a80995.png)
![](https://img-blog.csdnimg.cn/direct/55b6c2d8771e43b1a28dd4736c2fa3f9.png)
![](https://img-blog.csdnimg.cn/direct/cf9389c0d8e944d591cab433040129c9.png)
![](https://img-blog.csdnimg.cn/direct/cc9eafac0b3c4df28d49836351089b7b.png)
![](https://img-blog.csdnimg.cn/direct/045d1d36dbfc4cc7a897fddcad01e101.png)