【教学类-34-09】20240310华文彩云学号拼图(3*3格子浅灰底图 深灰拼图块)(AI对话大师)

news2024/11/6 7:09:11

作品展示

背景需求:

制作了两位数的学号3*3格子,

【教学类-34-05】20230523拼图(数字学号0X-长方块拼图-双色深灰浅灰)3*3格子(中班主题《个别化拼图》偏艺术-美术)_灰底白色方块数字怎么制作-CSDN博客文章浏览阅读529次。【教学类-34-05】20230523拼图(数字学号0X-长方块拼图-双色深灰浅灰)3*3格子(中班主题《个别化拼图》偏艺术-美术)_灰底白色方块数字怎么制作https://blog.csdn.net/reasonsummer/article/details/130836791

但是中班孩子一半孩子拼起来也有困难,因为他们不知道最终的图案是什么样子的。

所以我希望做出灰色底图,让幼儿便于识别图块位置。

设计过程:

素材准备:

代码展示:

使用AI对话大师,将原来的代码输入,进行代码简化

将步骤拆开,每组代码放到AI对话大师里面,让它给出更简单的写法

全部代码

'''
浅灰色的学号拼图的底图,深灰色学号拼图的黏贴图,切成小快 华文彩云 无名字,两个表格连在一起
作者:AI对话大师、阿夏
时间:2024年3月9日
'''
print('------第1步 制作浅灰色学号图片,制作深灰色学号图片----------')

from PIL import Image, ImageDraw, ImageFont

path=r'C:\Users\jg2yXRZ\OneDrive\桌面\学号数字拼图'

# 创建白底图片
width, height = 600, 402
img = Image.new('RGB', (width, height), 'white')
draw = ImageDraw.Draw(img)

# 设置字体、字号和颜色
# font = ImageFont.truetype('c:\\windows\\fonts\\STHUPO.TTF', 350)
# 华光同心圆
# font = ImageFont.truetype('c:\\windows\\fonts\\HGTX_CNKI.TTF', 350)
# 华文琥珀STHUPO.TTF
# font = ImageFont.truetype('c:\\windows\\fonts\\STHUPO.TTF', 350)
# 华文彩云STCAIYUN.TTF
font = ImageFont.truetype('c:\\windows\\fonts\\STCAIYUN.TTF', 430)

colors =[220,100]
# = (100, 100, 170)

# 新建两个文件夹
t=['01底图浅色','02贴图深色','03底图浅色小块','04贴图深色小块']

import os
for tt in t:
    folder_path_file = path+r"\{}".format(tt)
    # 检查文件夹是否存在
    if not os.path.exists(folder_path_file):
        # 如果文件夹不存在,则新建文件夹
        os.makedirs(folder_path_file)
   
# 每张卡片上写一个1-31之间的数字
for v in range(len(colors)):
    color=(colors[v],colors[v],colors[v])    
    for i in range(1,32):
        if i==1 :            # 一共30个学号,一页2份必须双数,所以7保留
            pass
        else:
            text = str('%02d'%i)
            text_width, text_height = draw.textsize(text, font)
            # print(text_width,text_height)
            text_x = (width - text_width) //2    # 数字越小,水平靠中间
            text_y = (height - text_height) //2   # 数字越小,垂直靠中间(但是到了5000以上就不会上移了)
            draw.text((text_x, text_y), text, font=font, fill=color)
            
            # 保存图片
            img.save(path+r"\{}\{}.png".format(t[v],'%02d'%i))
                    # 清除文字
            draw.rectangle((0, 0, width, height), fill='white')

print('------第2步 把浅灰色、深灰色学号图片切割成9张----------')

from PIL import Image, ImageOps
import os
import glob
import random
# 3*3图片切割
w=3
l=3

for vv in range(int(len(t)/2)):
    # 指定文件夹路径
    folder_path = path + r"\{}".format(t[vv])  # 打开01\02文件夹
    # print(folder_path)

    # 获取文件夹中所有PNG图片的路径
    png_files = glob.glob(os.path.join(folder_path, '*.png'))

    # 逐个打开PNG图片并切割成9块小图
    for png_file in png_files:
        image = Image.open(png_file)

        # 获取图片大小
        width, height = image.size

        # 切割成9块拼图小块并保存
        count = 1
        block_width = width // w
        block_height = height // l
        for i in range(w):
            for j in range(l):
                box = (j*block_width, i*block_height, (j+1)*block_width, (i+1)*block_height)
                region = image.crop(box)
                #生成9张*30份=261图  ,生成在03 、04文件夹里。  
                region.save(path + r'\{}\{}_{}.png'.format(t[vv+2], os.path.splitext(os.path.basename(png_file))[0], count))
                count += 1


print('------第3步 把浅灰色按序填入上面9个格子,把深灰色学号图片打乱填入组成9+9一组,一页2组 36个路径----------')
# 坐标,两个表格连在一起,但是先写左侧上下的18个坐标,再写右侧上下的18个坐标
bg = []
for x in range(0, 6):
    for y in range(0, 3):       
            bg.append('{:02d}{:02d}'.format(x, y))

for x in range(0, 6):
    for y in range(3, 6):
            bg.append('{:02d}{:02d}'.format(x, y))

# print(bg) # 36


# 切割成多少份,261个元素,18个在一页上,03文件夹浅灰:前9个按顺序写入,04文件夹的深灰色:后9个打乱写入
t2=['03底图浅色小块','04贴图深色小块']
pic=[]
for t3 in t2:
    folder_path = path + r"\{}".format(t3)  # 打开01\02文件夹
    # print(folder_path)    # C:\Users\jg2yXRZ\OneDrive\桌面\学号数字拼图\03底图浅色小块  C:\Users\jg2yXRZ\OneDrive\桌面\学号数字拼图\04贴图深色小块
    # 获取文件夹中所有PNG图片的路径
    png_files = glob.glob(os.path.join(folder_path, '*.png'))
    print(len(png_files))# 272
    pic.append(png_files)
print(pic)
print(len(pic))# 2组 浅色一组 深色一组[['','','浅色261张'],['','','深色261张']]

print('---拆成9个一组-------')
smaillpic=[]
for o in range(len(pic)):    # 0,1
    g=9
#     # 假设你有一个包含261个元素的列表list1
    list1 = [i for i in range(len(pic[o]))]  # 这里只是举例,实际情况根据你的实际数据来创建列表
    # 将列表按照18个一组分割
    grouped_list = [pic[o][i:i+g] for i in range(0, len(pic[o]), g)]
    smaillpic.append(grouped_list)
# print(smaillpic)
# [[[9张],[9张],[9张],[],[],[]]]]
# print(len(smaillpic))
# 2
# 
print('---9个浅灰路径+9个深灰路径【【9个浅灰】【9个深灰】】-------')# 
path1=[]
for n in range(len(smaillpic[0])):  # 读取30组9个路径   
    #  【9个浅灰】按顺序写入
    path1.append(smaillpic[0][n])
    # 【9个深灰】打乱写入
    c=random.sample(smaillpic[1][n],9)
    path1.append(c)  
# print(path1)
# print(len(path1))30组

# 提取所有元素放在一起
all_paths = [path for sublist in path1 for path in sublist]
# # print(all_paths)
# print(len(all_paths))# 540

# 把所有内容变成36个一组
nested_paths = [all_paths[i:i+36] for i in range(0, len(all_paths), 36)]
# print(nested_paths)
# print(len(nested_paths))
# # 15组 每组里面是2个(9个浅色+9个深色)

from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Cm
from docx2pdf import convert
from PyPDF2 import PdfMerger
import os,time
import shutil

print('------第4步 36个路径写入单元格----------')

# 指定新建文件夹路径
d = path + r"\零时文件夹"

# 检查文件夹是否存在,如果不存在则新建
if not os.path.exists(d):
    os.makedirs(d)

merged_pdf = PdfMerger()

for nn in range(0, len(nested_paths)):
    doc = Document(path + r'\学号数字拼图模板 无名字.docx')
    table = doc.tables[0]

    for t, bg_value in enumerate(bg):
        pp = int(bg_value[0:2])
        qq = int(bg_value[2:4])

        k = nested_paths[nn][t]
        print(pp, qq, k)

        run = doc.tables[0].cell(pp, qq).paragraphs[0].add_run()
        run.add_picture('{}'.format(k), width=Cm(4.95), height=Cm(3.4))
        table.cell(pp, qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

    doc.save(path + r'\零时文件夹\{}.docx'.format('%02d' % nn))
    time.sleep(2)
    # docx转PDF
    inputFile = path + r"\零时文件夹\{}.docx".format('%02d' % nn)
    outputFile = path + r"\零时文件夹\{}.pdf".format('%02d' % nn)
    with open(outputFile, 'w'):
        pass
    convert(inputFile, outputFile)
    time.sleep(2)
    merged_pdf.append(outputFile)
# 合并PDF、
merged_pdf.write(path + r"\有底图的学号拼图9块({}人共{}份).pdf".format(int(len(nested_paths)*2), len(nested_paths)))
merged_pdf.close()

print('----------第4步:把都有PDF合并为一个打印用PDF------------')

# 删除临时文件夹    
shutil.rmtree(path + r"\零时文件夹")

作品展示:


教学玩法:

1、A4横板中间切开,左侧上下剪开,

2、下方的深色图块剪成9块,分别黏贴在浅色图块上

3、然后对华文彩云空心字进行涂色,装饰.

4、边缘纸条黏贴,制作口罩、小包裹

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

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

相关文章

PhantomCrawler:一款功能强大的多代理IP网站请求生成工具

关于PhantomCrawler PhantomCrawler是一款功能强大的多代理IP网站请求生成工具,该工具允许广大研究人员通过不同的代理IP地址来模拟与目标Web站点的交互行为。 PhantomCrawler基于Python、requests和BeautifulSoup实现其功能,并提供了一种简单且高效的方…

【Linux】gcc与make、makefile

文章目录 1 gcc/g1.1 预处理1.2 编译1.3 汇编1.4 链接1.4.1 静态链接1.4.2 动态链接 2 make和makefile2.1 依赖关系2.2 依赖方法2.3 伪目标 3 总结 1 gcc/g 当我们创建一个文件,并向里面写入代码,此时,我们该如何使我们的代码能够运行起来呢&…

Delphi 的Read 与Readln 的区别

结合运行窗口,你输入1 2 3 4 这是一行ReadLn在读入时把这四个数当成一行,read(a,b)只读入了前两个数:1 2,就准备读下一行了,下一行输入3,再下一行输入2,所以输出1232; Read是逐个读…

【MySQL 系列】MySQL 语句篇_DQL 语句

DQL(Data Query Language),即数据查询语言,用来查询数据记录。DQL 基本结构由 SELECT FROM、WHERE、JOIN 等子句构成。 DQL 语句并不会改变数据库,而是让数据库将查询结果发送结果集给客户端,返回的结果是一…

IDEA打开项目文件目录不见了

偶尔发生新拉下来的代码,或者旧代码修改了包名,项目名称等,idea左侧project一栏不显示代码的文件目录。例如下面此时不要慌张,不用删除项目重新拉取,通过以下方式解决: 本人尝试能够解决,如果无…

Learn OpenGL 05 变换

万向节死锁 万向节死锁(Gimbal Lock)是用欧拉角定义旋转时,产生的在某一情况下旋转轴重合导致的系统丢失自由度的情况,一种最简单的解决方式是调整三维软件中的旋转轴顺序来避免该情况发生。 也就是说当中间轴旋转至90的时候就会…

Vue+ElementUI启动vue卡死的问题

0 引言 今天&#xff0c;博主在学习vueelementui的时候遇到一个问题&#xff0c;卡了博主很久。 1 问题复现 在vue页面的<template>标签中写入两个<div>标签&#xff0c; <template><div><h1>第一个div标签</h1><el-table></…

vue学习笔记21-组件传递数据_Props

组件与组件之间不是完全独立的&#xff0c;而是有交集的&#xff0c;那就是组件与组件之间是可以传递数据的 传递数据的解决方案就是props 父级&#xff1a; 在父级中引入子集 <template><h3>Parent</h3><Child/> </template><script> i…

适配器模式已经在SpringMVC中的源码实现

介绍&#xff1a; 1、适配器模式将某个类的接口转换成客户端期望的另一种接口表示 2、目的&#xff1a;兼容性&#xff0c;让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为&#xff1a;包装器。 3、属于&#xff1a;结构型模式 4、分3类&#xff1a;1&#xff0…

方程式工具包远程溢出漏洞图形界面版V0.3(内置永恒之蓝、永恒冠军、永恒浪漫等)

Part1 前言 大家好&#xff0c;我是ABC_123。我从年前到现在&#xff0c;一直在整理曾经写过的红队工具&#xff0c;逐步把自己认为比较好用的原创工具发出来给大家用一用&#xff0c;方便大家在日常的攻防比赛、红队评估项目中解放双手&#xff0c;节省时间精力和体力。本期给…

MySQL中常用的操作语句已汇总

目录 一、库语句 1.查询现有数据库 2.创建数据库 3.选中数据库 ​编辑 4.删除数据库 二、初阶表操作 1.查看数据库现有表 2.查看表结构 3.创建表 4.删除表 5.全列查询 6.删除表2 7.修改操作 三、插入操作 1.全列插入 2.指定列插入 3.一次插入多组数据 4.插入…

SpringBoot集成netty实现websocket通信

实现推送消息给指定的用户 一、依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://m…

redis-集群 原生部署和工具自动部署

什么redis集群&#xff1f; redis集群是一个提供在多个redis节点之间共享数据的程序集。它并不像redis主从复制模式那样仅提供一个master节点来提供写服务&#xff0c;而是会提供多个master节点来提供写服务&#xff0c;每个master节点中存储的数据都不一样&#xff0c;这些数据…

HarmonyOS系统开发基础环境搭建

目录 一 鸿蒙介绍&#xff1a; 1.1 HarmonyOS系统 1.2 HarmonyOS软件编程语言 二 HarmonyOS编程环境搭建 1.1 官网下载地址 1.2搭建开发流程 1.3 创建安装目录 1.4 下载DevEco Studio​编辑 1.5 下载后点击安装 1.6 自动添加桌面快捷和bin路径 ​编辑1.7 安装好运行 …

[Angular 基础] - 表单:模板驱动表单

[Angular 基础] - 表单&#xff1a;模板驱动表单 之前的笔记&#xff1a; [Angular 基础] - routing 路由(上) [Angular 基础] - routing 路由(下) [Angular 基础] - Observable Angular 内置两种表单的支持&#xff0c;这篇写的就是第一种&#xff0c;即模板驱动表单 (Tem…

wps由于找不到krpt.dll,无法继续执行代码的解决方法

遇到由于找不到krpt.dll,无法继续执行代码的问题时&#xff0c;理解如何修复这个问题变得至关重要。本文会教大家krpt.dll的恢复流程&#xff0c;并介绍该DLL文件的相关属性。我们将一步步指导你如何处理缺失文件的情况&#xff0c;让你能够解决阻碍代码正常运行的障碍&#xf…

C语言初学10:typedef

一、作用 为用户定义的数据类型取一个新名字 二、对结构体使用typedef定义新的数据类型名字 #include <stdio.h> #include <string.h>typedef struct Books //使用 typedef 来定义一个新的数据类型名字 {char title[50];} book;int main( ) {//book是typedef定…

背包问题算法

背包问题算法 0-1背包问题二维数组一维数组 完全背包问题二维数组一维数组 多重背包问题一维数组 0-1背包问题 问题&#xff1a;背包的容量为9&#xff0c;有重量分别为[2, 4, 6, 9]的四个物品&#xff0c;价值分别为[3, 4, 5, 6]&#xff0c;求背包能装的物品的最大价值是多少…

LiveNVR监控流媒体Onvif/RTSP功能-支持云端录像监控视频集中存储录像回看录像计划配置NVR硬件设备录像回看

LiveNVR支持云端录像监控视频集中存储录像回看录像计划配置NVR硬件设备录像回看 1、流媒体服务软件2、录像回看3、查看录像3.1、时间轴视图3.2、列表视图 4、如何分享时间轴录像回看&#xff1f;5、iframe集成示例7、录像计划7、相关问题7.1、录像存储位置如何配置&#xff1f;…

【电路】工作于直流4.5V电压的声控小灯

这个声控小灯用于控制4.5V直流供电的小灯泡&#xff0c;可用作学生实验也可用作声控夜光小灯。电路主要由5G555时基集成电路和一些分立元件组成&#xff0c;如下图所示&#xff1a; 工作原理 压电陶瓷片B与晶体三极管VT1&#xff0c;电阻R1&#xff0c;和电阻R2等组成了声控脉…