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

【教学类-56-05】数感训练——数字05(指定数字出现次数,速度快)

背景需求:

昨天有客户订购“阿拉伯数字的数感训练”

我查看文件夹,发现前期没有生成过0-50的数字(只研究了学号数感训练的学具)

赶紧用之前写过的代码生成了一份

【教学类-56-01】数感训练——数字01(同样的数字涂色)-CSDN博客文章浏览阅读610次,点赞16次,收藏8次。【教学类-56-01】数感训练——数字01(同样的数字涂色)https://blog.csdn.net/reasonsummer/article/details/139016672?sharetype=blogdetail&sharerId=139016672&sharerefer=PC&sharesource=reasonsummer&spm=1011.2480.3001.8118【教学类-56-01】数感训练——数字01(同样的数字涂色)-CSDN博客文章浏览阅读610次,点赞16次,收藏8次。【教学类-56-01】数感训练——数字01(同样的数字涂色)https://blog.csdn.net/reasonsummer/article/details/139016672?sharetype=blogdetail&sharerId=139016672&sharerefer=PC&sharesource=reasonsummer&spm=1011.2480.3001.8118代码

'''
数感训练-0-10数字
AI对话大师,阿夏
2024年5月18日'''import random
import math
from PIL import Image, ImageDraw, ImageFont
import os path = r'C:\Users\jg2yXRZ\OneDrive\桌面\数字数感训练\jpg'
os.makedirs(path,exist_ok=True)
canvas_width, canvas_height = 3000, 4000  # 调整画布的宽度和高度numbers = [i for i in range(0,51)]
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 = 500font = 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)# 在左上角绘制数字1text_color = (0, 0, 0)draw.text((100, 100), fr'{i}', font=font, fill=text_color)# 生成10磅黑线白色圆圈circle_radius = 100circle_border_color = (0, 0, 0)circle_fill_color = (255, 255, 255)border_width = 10circle_distance = 60 + circle_radius * 2  # 圆圈之间的距离# 圆形于边框的距离bj=30# 存储圆圈的位置信息,用于检查是否相交circle_positions = []# 阿拉伯数字字体设置number_font_size = 150number_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 +  bjmax_x = canvas_width - circle_radius - border_width - bjmin_y = circle_radius + border_width +  bjmax_y = canvas_height - circle_radius - border_width - bjfor _ 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 = Falsefor position in circle_positions:distance = math.sqrt((x - position[0]) ** 2 + (y - position[1]) ** 2)if distance < circle_distance:is_intersect = Truebreakif not is_intersect:# 绘制外圆,边线粗细为10磅outer_circle_radius = circle_radius + border_widthouter_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_radiusinner_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 // 2number_y = y - number_height // 2draw.text((number_x, number_y), str(number), font=number_font, fill=text_color)# 将圆圈位置添加至列表circle_positions.append((x, y))# 保存为1.pngcanvas.save(path + fr'\{n:02d}.png')n+=1

在制作PDF之前,我随机抽了几张图片,想看看每张上有几个和左上角数字相同的圆圈。

检查到第4张,就发现这张没有1个圆圈数字与左上角数字相同

有仔细看了几张,同样是这个问题

天啊,我顿时慌得一比,虽然该商品便宜(1元),但是如果找不到一个相同数字,商品本身就有质量问题

赶紧疯狂问“星火讯飞”,测试了八次代码。

终于实现了想要的结果!!!

素材准备:

首先测试数感代码

然后是把图片制作PDF模版,我用了两个板式

A4一页1图

A4一页2图

代码展示(生成5个相同数字)

'''
数感训练-0-10数字
AI对话大师,阿夏
2024年5月18日数感训练-0-50数字(指定左上角数字出现的数量出现5次、10次)
AI对话大师,阿夏
2024年9月26日'''import random
import math
from PIL import Image, ImageDraw, ImageFont
import os# 重复的数量。数字出现10次
sz=10import random
import math
from PIL import Image, ImageDraw, ImageFontpath = r'C:\Users\jg2yXRZ\OneDrive\桌面\数字数感训练'
input_path=path+r'\数字'
os.makedirs(input_path,exist_ok=True)
canvas_width, canvas_height = 3000, 4000  # 调整画布的宽度和高度numbers = [i for i in range(0,51)]
print(numbers)n=0for 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 = 500font = 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)# 在左上角绘制数字1text_color = (0, 0, 0)draw.text((100, 100), fr'{i}', font=font, fill=text_color)# 生成10磅黑线白色圆圈circle_radius = 100circle_border_color = (0, 0, 0)circle_fill_color = (255, 255, 255)border_width = 10circle_distance = 60 + circle_radius * 2  # 圆圈之间的距离# 圆形于边框的距离bj=30# 存储圆圈的位置信息,用于检查是否相交circle_positions = []# 阿拉伯数字字体设置number_font_size = 150number_font = ImageFont.truetype(font_path, number_font_size)# 计算可以生成圆圈的区域范围circle_distance 加了一个园的距离,离开边框就大了min_x = circle_radius + border_width + bjmax_x = canvas_width - circle_radius - border_width - bjmin_y = circle_radius + border_width + bjmax_y = canvas_height - circle_radius - border_width - bjtarget_number = itarget_count = 0for _ 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 = Falsefor position in circle_positions:distance = math.sqrt((x - position[0]) ** 2 + (y - position[1]) ** 2)if distance < circle_distance:is_intersect = Truebreakif not is_intersect:# 绘制外圆,边线粗细为10磅outer_circle_radius = circle_radius + border_widthouter_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_radiusinner_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)# 在圆圈内绘制随机生成的阿拉伯数字if target_count < sz:number = target_numbertarget_count += 1else:number = random.choice(numbers)number_width, number_height = draw.textsize(str(number), font=number_font)number_x = x - number_width // 2number_y = y - number_height // 2draw.text((number_x, number_y), str(number), font=number_font, fill=text_color)# 将圆圈位置添加至列表circle_positions.append((x, y))# 保存为1.pngcanvas.save(input_path + fr'\{n:02d}.png')n+=1# 制作wore
import os    
from docx import Document   
import os,time
from docx import Document
from docx.shared import Cm
from docx2pdf import convert
from PyPDF2 import PdfMerger
import shutil
from datetime import datetimes=[[28.2,19.51],[19.5,14.13]]
mb=[1,2]
for x in range(len(mb)):    imagePath=path+r'\ls' os.makedirs(imagePath,exist_ok=True)file_paths = [os.path.join(input_path, file) for file in os.listdir(input_path)]# file_paths = [os.path.join(root, file) for root, dirs, files in os.walk(tii[x]) for file in files]      pic_list_six = [file_paths[i:i+mb[x]] for i in range(0, len(file_paths), mb[x])]print(pic_list_six)print(len(pic_list_six))# # print('----3、黏贴图片卡,一页1图、1页2图 一页6图-------')# 处理每一组图片for group_index, group in enumerate(pic_list_six):# 创建新的Word文档doc = Document(path + fr'\{mb[x]}图模版.docx')# print(group)# 遍历每个单元格,并插入图片for cell_index, image_file in enumerate(group):# 计算图片长宽(单位:厘米)# 插入图片到单元格table = doc.tables[0]cell = table.cell(int(cell_index /mb[x]), cell_index % mb[x])#         # 如果第一行有4个格子,两个数字都写4cell_paragraph = cell.paragraphs[0]cell_paragraph.clear()run = cell_paragraph.add_run()run.add_picture(os.path.join(image_file), width=Cm(float(s[x][1])), height=Cm(float(s[x][0])))cell_paragraph.alignment = 1  # 设置单元格中的文本居中# 保存修改后的.docx文件doc.save(imagePath + fr'\{group_index + 1:02d}页.docx')# docx 文件另存为PDF文件inputFile = imagePath + fr'\{group_index + 1:02d}页.docx'  # 要转换的文件:已存在outputFile = imagePath + fr'\{group_index + 1:02d}页.pdf'  # 要生成的文件:不存在convert(inputFile, outputFile)time.sleep(0)pdf_lst = [f for f in os.listdir(imagePath) if f.endswith('.pdf')]pdf_lst = [os.path.join(imagePath, filename) for filename in pdf_lst]pdf_lst.sort()file_merger = PdfMerger()for pdf in pdf_lst:print(pdf)file_merger.append(pdf)# file_merger.write("C:/Users/jg2yXRZ/OneDrive/桌面/描字帖/(打印合集)大班A整页描字帖2乘5加表格-4名字-({}人).pdf".format(num))file_merger.write(path+fr"\数感训练{numbers[0]}-{numbers[-1]}重复出现{sz}次(1页{mb[x]}图).pdf")# 9宫格制作2图任务卡时报错,# time.sleep(0)time.sleep(1)# 01 06图答题卡.pdf# 02 06图任务卡.pdffile_merger.close()# doc.Close()# # print('----------第5步:删除临时文件夹------------')    import shutilshutil.rmtree(imagePath) #递归删除文件夹,即:删除非空文件夹

第一次生成,大约30秒出完所有的图片

然后就是8分钟的合并PDF

用这个代码方法做的数感出图速度比学号数感的代码快多了!!!

 随机看了两份,都是个数字

发给客户

客户希望把重复数量改成10,再生成一份

出图用了30秒,速度很快

同样随机抽了两份,都是10次

发给客户

客户说要到学校打印给孩子做,而且要A4一页大纸,感觉她也想给孩子们做“学号数感练习”。

因为客户的需求,我重新制作了简易版的数字数感训练代码,发现它的生成速度比“学号数感代码”快得多。因此可以用它来优化“学号数感代码”,提升学习制作的速度。

【教学类-56-04】数感训练——数字04(中2班寻找自己的学号数字,1号-29号,出现5-10\10-15\15-20次)-CSDN博客文章浏览阅读965次,点赞22次,收藏5次。【教学类-56-04】数感训练——数字04(中2班寻找自己的学号数字,1号-29号,出现5-10\10-15\15-20次)https://blog.csdn.net/reasonsummer/article/details/141872632

通过Python学具销售中,为客户提供更多服务,满足实际需求,也是一种优化学具的方式,

相关文章:

  • 人员个体检测、PID行人检测、行人检测算法样本
  • 【VUE】状态管理:Pinia组件、Cookie组件
  • 传奇微端黑屏不更新地图?传奇微端架设教程——GOM引擎
  • 【Linux】fork入门级使用
  • MySQL --基本查询(下)
  • TypeScript 设计模式之【观察者模式】
  • 照片压缩方法分享,掌握这些小技巧轻松压缩
  • Python中的数据处理与分析:从基础到高级
  • django开发流程1
  • 图像生成大模型 Imagen:AI创作新纪元
  • 9_23_QT窗口
  • 【C/C++】【基础数论】33、算数基本定理
  • 选择租用徐州存储服务器有什么作用?
  • 数据库系列(1)常见的四种非关系型数据库(NoSQL)
  • 前端Vue学习笔记02
  • $translatePartialLoader加载失败及解决方式
  • 【译】理解JavaScript:new 关键字
  • 30秒的PHP代码片段(1)数组 - Array
  • download使用浅析
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • mac修复ab及siege安装
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Redis中的lru算法实现
  • XForms - 更强大的Form
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 浮动相关
  • 欢迎参加第二届中国游戏开发者大会
  • 如何选择开源的机器学习框架?
  • 数据可视化之 Sankey 桑基图的实现
  • 新书推荐|Windows黑客编程技术详解
  • 用 Swift 编写面向协议的视图
  • 用jQuery怎么做到前后端分离
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • (06)Hive——正则表达式
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (javaweb)Http协议
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (六)DockerCompose安装与配置
  • (六)软件测试分工
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • ***监测系统的构建(chkrootkit )
  • .net core 6 redis操作类
  • .net core使用RPC方式进行高效的HTTP服务访问
  • :class的用法及应用
  • @EnableAsync和@Async开始异步任务支持
  • @html.ActionLink的几种参数格式
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [AIGC] SpringBoot的自动配置解析
  • [bug总结]: Feign调用GET请求找不到请求体实体类
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [c#基础]值类型和引用类型的Equals,==的区别
  • [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大
  • [CentOs7]图形界面
  • [CERC2017]Cumulative Code