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

news2024/9/27 20:35:34

背景需求:

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

我查看文件夹,发现前期没有生成过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 = 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

在制作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=10


import random
import math
from PIL import Image, ImageDraw, ImageFont

path = 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=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 + 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

    target_number = i
    target_count = 0

    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)

            # 在圆圈内绘制随机生成的阿拉伯数字
            if target_count < sz:
                number = target_number
                target_count += 1
            else:
                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(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 datetime

s=[[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个格子,两个数字都写4
            cell_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图任务卡.pdf
    file_merger.close()
        # doc.Close()

    # # print('----------第5步:删除临时文件夹------------')    
    import shutil
    shutil.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学具销售中,为客户提供更多服务,满足实际需求,也是一种优化学具的方式,

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

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

相关文章

猫头虎分享已解决Bug:npm warn old lockfile Could not fetch metadata for yallist@3.1.1

&#x1f42f;猫头虎分享已解决Bug&#xff1a;npm warn old lockfile Could not fetch metadata for yallist3.1.1 今天有粉丝问猫哥&#xff1a;“&#x1f42f;猫头虎&#xff0c;我在使用 npm 安装依赖时遇到了一个错误提示 Could not fetch metadata for yallist3.1.1&am…

凿岩机械液压比例多路阀控制器

工程机械应用的BEUEC比例放大器控制比例多路阀主要应用于以下几大类设备中&#xff1a; 1. 挖掘机械&#xff1a;包括挖掘机、挖掘装载机、挖掘船等&#xff0c;主要用于挖掘土壤、煤和矿石等物料。 2. 铲土运输机械&#xff1a;如推土机、铲运机、装载机等&#xff0c;主要用…

亚马逊测评,容易掉评是什么原因,怎么解决

大家好&#xff0c;今天来深入探讨如何有效提升亚马逊测评中的留评率&#xff0c;并解析那些导致评论掉落或难以留下的常见原因&#xff0c;以便采取针对性的策略来优化这一过程。作为卖家&#xff0c;提升留评率无疑是提升产品曝光度和销量的关键一环。 亚马逊测评掉评与留评…

【机器学习】目标分类算法概述

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 目标分类算法概述传统机器学习方法支持向量机(SVM)决策树和随机森林特征提取 基…

docker_阿里云镜像仓库

1.创建个人实例 登录阿里云——控制台——容器镜像服务——创建个人版实例 2.设置密码 设置后可在终端复制上图2测试 [rootserver ~]# sudo docker login --usernameyou_aliyun_name crpi-8y14tvgewmc6tisz.cn-hangzhou.personal.cr.aliyuncs.com Password: WARNING! Your …

Linux环境下安装python

Linux 环境下安装python 以下是在Linux环境下安装Python - 3.9.4.tgz的详细步骤&#xff1a;1. 下载Python - 3.9.4.tgz&#xff08;如果未下载&#xff09;2.解压文件3.安装依赖项&#xff08;如果需要&#xff09;4.配置和编译5.安装6.创建一个别名&#xff08;alias&#xf…

中国车主,撑起天猫又一个万亿赛道

"今年双十一&#xff0c;预计会有超过1亿消费者来淘宝天猫汽车类目消费。3~5年之后&#xff0c;天猫汽车有望冲刺为阿里继大服饰、大快消、家装家电等之后又一个GMV&#xff08;商品成交总额&#xff09;破万亿的品类。" 淘天集团汽车事业部总经理、天猫养车总裁无封…

UART配置流程

S3C2440A 的通用异步收发器&#xff08;UART&#xff09;配有3 个独立异步串行I/O&#xff08;SIO&#xff09;端口&#xff0c;每个都可以是基于中断或基于DMA 模式的操作。换句话说&#xff0c;UART 可以通过产生中断或DMA 请求来进行CPU 和UART 之间的数据传输。UART 通过使…

网络安全 DVWA通关指南 DVWA Weak Session IDs(弱会话)

DVWA Weak Session IDs&#xff08;弱会话&#xff09; 文章目录 DVWA Weak Session IDs&#xff08;弱会话&#xff09;Low LevelMedium LevelHigh LevelImpossible Level 参考文献 WEB 安全靶场通关指南 相关阅读 Brute Force (爆破) Command Injection&#xff08;命令注入…

Kafka学习笔记(一)Kafka基准测试、幂等性和事务、Java编程操作Kafka

文章目录 前言4 Kafka基准测试4.1 基于1个分区1个副本的基准测试4.2 基于3个分区1个副本的基准测试4.3 基于1个分区3个副本的基准测试5 Java编程操作Kafka5.1 引入依赖5.2 向Kafka发送消息5.3 从Kafka消费消息5.4 异步使用带有回调函数的生产消息6 幂等性6.1 幂等性介绍6.2 Kaf…

【linux】linux中如何通过Logstash处理、结合logrotate分割日志

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

盘点:App 移动自动化测试工具

App移动端测试工具非常多&#xff0c;首先 区分 Android 和 iOS&#xff0c;以及 harmonyos 平台&#xff0c;每个平台下都有自己的自动化测试工具。自动化工具又区分 调试工具、monkey 工具、UI自动化工具。 本文就来盘点以下&#xff0c;当下主流的app自动化测试工具。 Andr…

文档信息提取系统源码分享

文档信息提取检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

客户服务升级指南:如何以细节赢得客户忠诚

在当今这个竞争激烈的市场环境中&#xff0c;客户忠诚度已成为企业生存与发展的关键所在。而要想赢得并维持客户的忠诚&#xff0c;仅凭优质的产品或服务已远远不够&#xff0c;更需要企业在客户服务上下足功夫&#xff0c;从每一个细节入手&#xff0c;打造超越客户期待的服务…

C++简单缓冲区类设计

目录 1.引言 2.静态缓冲区 3.动态缓冲区 4.数据引用类 5.自动数据引用类 6.几种缓冲区的类关系图 7.注意事项 8.完整代码 1.引言 在C中&#xff0c;设计静态和动态缓冲区类时&#xff0c;需要考虑的主要差异在于内存管理的方式。静态缓冲区类通常使用固定大小的内存区域…

【机器学习案列】基于随机森林和xgboost的二手车价格回归预测

一、项目分析 1.1 项目任务 kaggle二手车价格回归预测项目&#xff0c;目的根据各种属性预测二手车的价格。 1.2 评估准则 评估的标准是均方根误差&#xff1a; 1.3 数据介绍 数据连接https://www.kaggle.com/competitions/playground-series-s4e9/data?selecttrain.csv 其…

基于 Java Swing 实现的超级玛丽游戏

一、项目概述 > 这是一个基于 Java Swing 的游戏项目&#xff0c;旨在实现一个支持自定义地图的超级玛丽游戏。 > 游戏画面精美&#xff0c;包含多种功能和亮点&#xff0c;如地图编辑器、不同状态的马里奥、多种怪物和道具等。 二、项目演示 > 地图编辑器 > …

Mac写入U盘文件如何跨平台使用 Mac电脑怎么把U盘文件传送到电脑 mac怎么用u盘拷贝文件

不知道你在使用Mac电脑拷贝文件的时候有没有遇到过无法写入U盘的问题&#xff0c;这通常是由于Mac和Windows之间的兼容问题引起的。下面我将为大家详细介绍Mac写入U盘文件如何跨平台使用以及Mac如何将U盘文件复制到电脑。 一、Mac写入U盘文件如何跨平台使用 在Mac电脑上将文件…

MySQL第11讲--多表查询的介绍

文章目录 前言多表关系多表查询概述多表查询的分类连接查询内链接外链接自连接 联合查询子查询标量子查询列子查询行子查询表子查询 前言 在MySQL第10讲–约束的介绍中讲了数据库的几种约束条件&#xff1a;非空约束、唯一约束、主键约束、外键约束、检查约束、默认约束。下图对…

数字人实战第六天——DH_live 训练自己的数字人

一、简介 数字人是一种基于人工智能和数字化技术构建的虚拟人物或代理&#xff0c;能够进行人类式的交互和沟通。这些技术主要包括&#xff1a; 人工智能&#xff08;AI&#xff09;&#xff1a;AI 是数字人的核心&#xff0c;包括自然语言处理&#xff08;NLP&#xff09;、机…