本文主要是介绍【教学类-54-01】20240510超级对对碰(圆点拼图)(9*5、0-255随机),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
作品展示
背景需求:
奕娃幼儿园小中大班益智区超级对对碰 - 小红书#幼儿园益智区 #幼儿园益智区素材 #幼儿园区域材料 #幼儿园环创https://www.xiaohongshu.com/discovery/item/6279bb4d000000002103be71?app_platform=android&ignoreEngage=true&app_version=8.34.0&share_from_user_hidden=true&type=video&author_share=1&xhsshare=WeixinSession&shareRedId=ODszMTs4Nk82NzUyOTgwNjg3OTlHS0xC&apptime=1715423047
我觉得这个拼图比较有趣,适合幼儿选择,就想用Python写出来。
AI的思路是:
1、在画布2100*2970(A4竖版)画布里生成9*5单元格,白色背景、黑色线框,单元格离上下左右边距100,保存为底图
2-1、在每个单元格顶部线条中点为圆心画一个半径为80的圆形,填充0-255的随机颜色
2-2、在每个单元格底部线条中点为圆心画一个半径为80的圆形,填充0-255的随机颜色
2-3、在每个单元格左侧线条中点为圆心画一个半径为80的圆形,填充0-255的随机颜色
2-4、在每个单元格右侧线条中点为圆心画一个半径为80的圆形,填充0-255的随机颜色.
3、继续覆盖一个9*5单元格(便于切割)、保存为彩色拼图。
代码展示:
'''
项目:超级对对碰(色彩圆点)9*6 +底图(颜色0-255随机)
作者:AI对话大师,阿夏
时间:20240510
'''from PIL import Image, ImageDraw
import random,osprint('--------1、制作图片-----------')
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\超级对对碰'folder_path=path+r'\jpg'
os.makedirs(folder_path,exist_ok=True)r=80
for ii in range(3):# 创建画布canvas_width = 2100canvas_height = 2970canvas_color = (255, 255, 255) # 白色背景line_color = (0, 0, 0) # 黑色线条line_width = 10margin = 100 # 边距canvas = Image.new('RGB', (canvas_width, canvas_height), canvas_color)draw = ImageDraw.Draw(canvas)# 计算单元格大小和绘制区域num_rows = 9num_cols = 6cell_size = min((canvas_width - 2 * margin) // num_cols, (canvas_height - 2 * margin) // num_rows)start_x = (canvas_width - cell_size * num_cols) // 2start_y = (canvas_height - cell_size * num_rows) // 2# 绘制单元格和圆形for row in range(num_rows + 1):y = start_y + row * cell_sizedraw.line([(start_x, y), (start_x + cell_size * num_cols, y)], fill=line_color, width=line_width)for col in range(num_cols + 1):x = start_x + col * cell_sizedraw.line([(x, start_y), (x, start_y + cell_size * num_rows)], fill=line_color, width=line_width)# 保存图像canvas.save(folder_path+fr'\{ii:02d}底图.png')# 上边的圆for row in range(num_rows):for col in range(num_cols):center_x = start_x + (col + 0.5) * cell_sizecenter_y = start_y + row * cell_sizecircle_radius = rcircle_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))draw.ellipse([(center_x - circle_radius, center_y - circle_radius),(center_x + circle_radius, center_y + circle_radius)], fill=circle_color)# 下边的圆 # 绘制圆形for row in range(num_rows):for col in range(num_cols):center_x = start_x + (col + 0.5) * cell_sizecenter_y = start_y + (row + 1) * cell_sizecircle_radius = rcircle_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))draw.ellipse([(center_x - circle_radius, center_y - circle_radius),(center_x + circle_radius, center_y + circle_radius)], fill=circle_color)# 左边的圆for row in range(num_rows):for col in range(num_cols):center_x = start_x + col * cell_sizecenter_y = start_y + (row + 0.5) * cell_sizecircle_radius = rcircle_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))draw.ellipse([(center_x - circle_radius, center_y - circle_radius),(center_x + circle_radius, center_y + circle_radius)], fill=circle_color)# 右边的圆for row in range(num_rows):for col in range(num_cols):center_x = start_x + (col + 1) * cell_sizecenter_y = start_y + (row + 0.5) * cell_sizecircle_radius = rcircle_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))draw.ellipse([(center_x - circle_radius, center_y - circle_radius),(center_x + circle_radius, center_y + circle_radius)], fill=circle_color)# 绘制单元格和圆形(再加一次黑色框线,便于裁剪)for row in range(num_rows + 1):y = start_y + row * cell_sizedraw.line([(start_x, y), (start_x + cell_size * num_cols, y)], fill=line_color, width=line_width)for col in range(num_cols + 1):x = start_x + col * cell_sizedraw.line([(x, start_y), (x, start_y + cell_size * num_rows)], fill=line_color, width=line_width)# 保存图像彩色图片canvas.save(folder_path+fr'\{ii:02d}.png')print('--------2、png 合并pdf-----------')
import os
from PIL import Image
from reportlab.lib.pagesizes import A4
from reportlab.lib.utils import ImageReader
from reportlab.pdfgen import canvas# 指定文件夹路径# 获取文件夹中的所有PNG图片文件
image_files = [file for file in os.listdir(folder_path) if file.endswith('.png')]# 创建一个新的PDF文件
pdf_file = path+r'\超级对对碰底图.pdf' # 替换为实际的输出PDF文件路径
c = canvas.Canvas(pdf_file, pagesize=A4)# 遍历每个PNG图片文件并将其添加到PDF中
for image_file in image_files:image_path = os.path.join(folder_path, image_file)image = Image.open(image_path)image_reader = ImageReader(image)c.setPageSize(A4)c.drawImage(image_reader, 0, 0, width=A4[0], height=A4[1])c.showPage()# 保存并关闭PDF文件
c.save()# print(f"合并完成,PDF文件保存在:{pdf_file}")
最后结果:
1、JPG文件夹里:生成3张彩色图和3张底图
2、JPG文件夹外,:合并1个打印文件
教学实践:
时间:2024年5月9日
班级:中4
人数:2人(百日咳隔离)
纸框后面贴了一张白色铅画纸
学具使用现象:
1、9*6格共有54块,数量很多——这份学具真的让孩子们学了很长时间(数独、迷宫、描字帖等学具很多孩子一会儿就完成了)
2、随机颜色太多了,以至于核对大量相近的绿色,花费很长时间,幼儿和老师看得眼睛疼,中途休息了好几次。
3、因为拼上的卡片会移动,所以在卡纸后面贴了一个白色铅画纸(没有框格线),所以幼儿帖的时候一行格子帖歪了。
4、幼儿为了提高效率,把卡片重叠在一起,手动一次性剪,不少卡片剪歪了。
5、两位孩子在两个桌上操作。但都有不少卡片被蹭到地上。(至少有7次拾卡片)——需要2个卡片盒子吗,一个放没有挑选的,一个放选过的不正确的卡片?
6、两套卡片混在一起了,根本看不出是谁的(图案是圆点,结构相同,只有颜色不同,但这个无法区分卡片到底属于那一套。幸运的是我用的卡纸颜色有细微不同(浅绿、浅蓝),这才能区分。
7、幼儿说:”我这里还有白色(白灰色)点子,一点都看不清!“
8、幼儿多次求助”老师,你帮帮我!“”老师,我做不出,不想做了!“
学具调整:
1、数量调整:
从9*6(54)(为了凑满A4竖版,保持单元格是正方形)改为8*5(40)、或7*4(28),减少数量,可以提高幼儿制作效率(最前面和最后面都容易做,中间判断筛选费时)
2、颜色调整:
从0-255随机颜色,改成固定的7-8种不同色系,在它们中间随机取得。这样颜色会少很多,而且只有一种红、一种黄……,就不用区分相近色了。
3、在圆点上添加图案。
打印了3份,还留了一份银白纸的图片,我用记号笔在一些浅色的圆点上加上简单的符号,希望用这些符号作为另一种辨识标记,抵抗”相近色(如:绿色)“带来的视觉干扰。
(塑封后,黑色记号笔图案就被保留在图案里)
4、卡片都用裁纸刀或剪刀切割,边缘整齐
5、卡片需要“圆角”
本来我还想做一款“圆点在单元格左上角坐标、右上角坐标、左下角坐标、右下角坐标”的拼图,但是因为以上的“圆角”,如果打印出来切割的图块,为了安全,四角都会被剪掉一部分。导致圆心部分出现缺失空白。所以就不考虑这种样式了。
这篇关于【教学类-54-01】20240510超级对对碰(圆点拼图)(9*5、0-255随机)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!