【教学类-34-01】20230419拼图(运动项目-长方块拼图)3*4格子(中班主题《个别化拼图》健康偏艺术-美术)

文章讲述了在幼儿Python学习过程中,孩子们喜欢将作业剪成小卡片,这种行为启发了教师设计拼图游戏。通过编写Python代码,将图片切割并随机插入文档中,形成拼图模板。在教学实践中,发现孩子们面对复杂的图案和大量的卡片时存在困难,提出简化图案、减少卡片数量、改进切割方式等优化建议,以提升学习体验和效率。
摘要由CSDN通过智能技术生成

 

 

背景需求:

一个月的Python纸类学具研究中,我发现个别男孩喜欢把作业中的数字、图案、单元格剪成小块(小卡片)

 近年几周,剪条、剪块的孩子人数也慢慢递增。(分发时有点麻烦)

幼儿需求:锻炼手指精细动作的需求、或者获得更多物资进行交换、展示的需求(多比少好、交换贴纸的游戏),

教师需求:幼儿剪得越小,教师越讨厌——因为纸片多,收纳整理时间长,容易收拾不干净

幼儿需求:“碎纸片——我要玩拼图”

 前几天收集作业时,15号又把“连连看6*6”里的小图形剪成一条条、一块块,并且直接剪到书包的开口里,我立刻失去了收集他的作品的想法,无奈抱怨道:

“你怎么都剪成碎片了,我都没有办法收起来扫描了?”

“可是我今天就想拿回去玩!”15号一边剪一边解释说:

老师说:“你都剪成碎片了,还有什么好玩的?”

15号乐呵呵地回答:“可以拿回家拼图,我爸爸给我没了一盒子拼图,很多很多小块!”

老师:“哇,你的想法真不错!碎片还可以拼图,就是挺费时间的。”

“我会的,我家里就在玩拼图!”

思考:他的回答让我想了19号、20号(都是男孩)的“剪碎片”行为、这几位男孩是不是也想到过“碎片拼图”的游戏呢?因此我想直接让孩子们做拼图。

图片来源:

 

 

 

 新建一个文件夹,放切割后的图片

 

WORD模板 

每个单元格右上角的方块是写学号的,便于锚定方向(减小难度) 


代码展示

'''
项目:运动矢量图的4*3格拼图
作者:阿夏
日期:2023年4月18日21:47
'''

num=int(input('生成多少份(18人)\n'))
Number=int(input('随机抽取几个图片(12个)\n'))


print('----------第1步:19张运动PNG图片*每张图片切割12张----------------')
# 源代码: https://blog.csdn.net/qq_34777982/article/details/125019068?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-125019068-blog-129622294.235^v29^pc_relevant_default_base3&spm=1001.2101.3001.4242.2&utm_relevant_index=4
# Python 裁剪九宫格图片 —— 筑梦之路
import sys
import os 
from PIL import Image
file_root = r"C:\Users\jg2yXRZ\OneDrive\桌面\运动拼图\运动拼图" #要切的图片放的文件
fileList = []
n = 0
#读取文件列表
def read_bmp_file_list(path):
     for root, dirs, files in os.walk(path, topdown=False):
            for file in files:
                fileList.append(os.path.join(root, file))
#开始切图
def qie_tu(file_path):
    global n
    im = Image.open(file_path)
    # 图片的宽度和高度(原始图片大小1280 720)
    img_size = im.size
    print("j小图片宽度和高度分别是{}".format(img_size))
    #切成512X512
    x = 0
    y = 0
    w = 320
    h = 240
    for j in range(0,3):
        for i in range(0,4):
            #region = im.crop((x, y, x+w*i, y+h*j))
            print(x+w*i, y+h*j,x+w*i+w, y+h*j+h)
            region = im.crop((x+w*i, y+h*j,x+w*i+w, y+h*j+h))
            #文件输出位置
            region.save(r"C:\Users\jg2yXRZ\OneDrive\桌面\运动拼图\运动拼图1\{name}.jpg".format(name='%03d'%n))
            n=n+1
 
if __name__ == '__main__':
    read_bmp_file_list(file_root)
    for f in fileList:
        qie_tu(f)


print('----------第2步:读取图片,写入模板----------------')
import os
from PIL import Image 




print('----------第1步:提取图片路径------------')

path=[]
pr="C:\\Users\\jg2yXRZ\\OneDrive\\桌面\\运动拼图\\运动拼图1"
# 过滤:只保留png结尾的图片
imgs1=os.listdir(pr)
for img1 in imgs1:
    if img1.endswith(".jpg"):
        path.append(pr+'\\'+img1)
# 所有图片的路径
print(path)
# 216条路径(18张*12图)
print(imgs1)



print('----------第2步:新建一个临时文件夹------------')
# 新建一个”装N份word和PDF“的文件夹
os.mkdir(r'C:\Users\jg2yXRZ\OneDrive\桌面\运动拼图\零时Word')


print('----------第3步:随机抽取12张图片 ------------')

import docx
from docx import Document
from docx.shared import Pt 
from docx.shared import RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn
import random

import os,time
import docx
from docx import Document
from docx.shared import Inches,Cm,Pt
from docx.shared import RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn

from docxtpl import DocxTemplate
import pandas as pd
from docx2pdf import convert
from docx.shared import RGBColor


for nn in range(0,num):    # 18份
    doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\运动拼图\运动拼图模板.docx')
#     # 制作列表    
    # for z in range():        # 5行组合循环2次 每页两张表
        # 从左边图列表和右边图列表中抽取图片(12张图片,可能5个向左、7个向右边)
        # 24条里面0和12条是一组,2个里面随机抽1一个,1和13是一组,2个里面随机抽一个…… 抽出12个图片后
    
    r=[]    
    c=[]
    r.append(path[nn*12:nn*12+12])
    # print(r)
    # 再打乱顺序读取12个      
    for a in r:
        for b in a:
            c.append(b)
    print(c)
            
    figures=random.sample(c,Number)    # 12个图片随机写入12个  
    print(figures)
    
    # 单元格位置3*4格
    bg=[]
    for x in range(0,3):        # 3行
        for y in range(0,4):    # 4列
                ww='{}{}'.format(x,y)
                bg.append(ww)
    print(bg)   
    # ['00', '01', '00', '01', '00', '01', '00', '01', '00', '01', '00', '01', '00', '01', '00', '01']

    table = doc.tables[0]          

    for t in range(len(bg)):   # 02
        pp=int(bg[t][0:1])    
        qq=int(bg[t][1:2])  
        # print(p)               
        k=figures[t]         

        print(pp,qq,k)
       
        # 写入图片
        run=doc.tables[0].cell(pp,qq).paragraphs[0].add_run()        # 在第1个表格中第2个单元格内插入国旗
        run.add_picture('{}'.format(k),width=Cm(4.5),height=Cm(3.8))
        table.cell(pp,qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.LEFT #居中  
        
        
    doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\运动拼图\零时Word\{}.docx'.format('%02d'%nn))   
    from docx2pdf import convert

    # docx 文件另存为PDF文件
    inputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/运动拼图/零时Word/{}.docx".format('%02d'%nn)  # 要转换的文件:已存在
    outputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/运动拼图/零时Word/{}.pdf".format('%02d'%nn)  # 要生成的文件:不存在
    # 先创建 不存在的 文件
    f1 = open(outputFile, 'w')
    f1.close()
    # 再转换往PDF中写入内容
    convert(inputFile, outputFile)
    
print('----------第4步:把都有PDF合并为一个打印用PDF------------')
    
# 多个PDF合并(CSDN博主「红色小小螃蟹」,https://blog.csdn.net/yangcunbiao/article/details/125248205)
import os
from PyPDF2 import PdfFileMerger
target_path =  'C:/Users/jg2yXRZ/OneDrive/桌面/运动拼图/零时Word'
pdf_lst = [f for f in os.listdir(target_path) if f.endswith('.pdf')]
pdf_lst = [os.path.join(target_path, filename) for filename in pdf_lst]
pdf_lst.sort()
file_merger = PdfFileMerger()
for pdf in pdf_lst:
    print(pdf)
    file_merger.append(pdf)
file_merger.write("C:/Users/jg2yXRZ/OneDrive/桌面/运动拼图/(打印合集)运动拼图(4乘3张){}人共{}份).pdf".format(num,num))
file_merger.close()
# doc.Close()

# print('----------第5步:删除临时文件夹------------')    
import shutil
shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/运动拼图/零时Word') #递归删除文件夹,即:删除非空文件夹

重点说明

一、切割图片多少份

PPT导出的图片JPG大小

宽:1260

高:720

 切割4*3份

 

二、单元格插入小图片

每12张图片一组,打乱顺序插入00-33的单元格格子里

目前只能先导出18张图,因此打印时,先打印一套18张,再打印1-10页,获得28份作业

教学尝试:

时间:2023年4月19日 11:30-11:50

人员:中6班 学号11、14、26 (3人)

材料:考虑难度,我先打印了3份,抽了几位数能力弱的孩子做实验——“开小灶”,先学起来了解流程。

 活动过程

 

 

 

 

结果:

1、3*4的12块拼图对第一次接触卡图的孩子有难度。教师指导

(1)提示摆放方向(有学号的右上角)

(2)提示左边6块是数字(左上)右边是汉字粗体(左下)、右边6块是细线(右侧)

结果:虽然教师指导了,但3位孩子都不同程度无法正确摆放图片方向(位置)(观察右上角的学号)

2、存在问题:

(1)第一次做卡片数量多,14号贴完后已经遗失了一块

 (2)白边条剪切费时,最好裁纸刀切掉(少剪多拼图)

1)6人一桌更没有多少空间操作了,所以尽量减少废纸的产生

2)人多容易卡片混在一起、12个格子写学号也会存在遗漏——卡片不能多

(3)黏贴纸上也也有灰色格子,幼儿以为也是要剪成卡片?所以最好预先把纸张一切二。

(4)图案复杂,幼儿不熟悉(汉字、数字、人物线条较多)

 (5)单元格里面的图片并没有撑满格(图片长宽比单元格小),有白边,无法与其他卡片边缘对应(需要重叠覆盖)

3、学具优化

(1)从幼儿熟悉的图案开始——数字或字母

(2)数字、字母要填色灰色(不要空白)——幼儿看的清楚

(3)切割——一张纸切2半,左边是卡片、右边是黏贴纸

(4)切割——上面的卡片的三条白边切掉

(5)字母图案大小——2*3格=6格。做大写字母、一页(2份(包含字母和黏贴卡))

(6)学号数字图案大小——2*3*2=12格 做学号数字图片、一页(1份,包含字母和黏贴卡、需要确定人员)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿夏reasonsummer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值