【教学类-34-10】20240320 (带下划线)华文彩云学号拼图(3*3格子浅灰底图 深灰拼图块)(AI对话大师)

作品展示:学号下方有细线下划线

背景需求:

3*3学号拼图中产生一个问题——01与10 可能混淆,(6与9,)

【教学类-34-09】20240310华文彩云学号拼图(3*3格子浅灰底图 深灰拼图块)(AI对话大师)-CSDN博客文章浏览阅读433次,点赞7次,收藏9次。【教学类-34-09】20240310华文彩云学号拼图(3*3格子浅灰底图 深灰拼图块)(AI对话大师)https://blog.csdn.net/reasonsummer/article/details/136604268

为了便于辨认拼图图片摆放方向,我觉得还是在生成数字图片时,直接在下方增加下划线。

设计过程:

用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)

        
            
            # 绘制下划线
            underline_y = text_y + text_height + 5  # 下划线位置在文本下方,间隔5像素
            draw.line([(text_x, underline_y), (text_x + text_width, underline_y)], fill=color, width=2)
            
            
            # 保存图片
            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"\零时文件夹")

每张3*3学号拼图上有3个格子有下划线,增加一个可以快速辨认的元素。

后续

因为本班幼儿做拼图基本都完成了,所以这套“带下划线”的拼图,估计要测试其他中班,或者等我下一批的中、大班孩子再练习了。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿夏reasonsummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值