【教学类-09-10】20240406细线迷宫图05(正方形)30格+动物+房屋(15CM横版一页-1份横版)

作品展示:

7d44b2940f804e379f07f93d5ab6e21e.png

背景需求:

【教学类-09-09】20240406细线迷宫图05(正方形)30格+动物+箭头(15CM横版一页-1份横版)-CSDN博客文章浏览阅读353次,点赞9次,收藏4次。【教学类-09-09】20240406细线迷宫图05(正方形)30格+动物+箭头(15CM横版一页-1份横版)https://blog.csdn.net/reasonsummer/article/details/137268830?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22137268830%22%2C%22source%22%3A%22reasonsummer%22%7D

在前期代码基础上,继续增加迷宫图的吸引力,修改图片,终点不是箭头,而是房屋

素材准备:

294ff62bfac7497db910df8d473ef5e2.png

1d9911941c594a189fae232632eee6eb.png

图片来自midjounery文生图(四图),但同种动物只留1个(如4个老鼠只保留一只老鼠),一共30种动物

【教学类-36-05】20230704动物头饰制作2.0(midjounery动物简笔画四图)一页两种动物-CSDN博客文章浏览阅读318次。【教学类-36-05】20230704动物头饰制作2.0(midjounery动物简笔画四图)一页两种动物https://blog.csdn.net/reasonsummer/article/details/131532632

房屋标志(PPT图标,做成有白色背景的方形图案.png

8c2f0111ec6e4f9eaddd46eca870b020.png

0f93ebcc870d4bcaaaefd5b4e19a0e29.png

代码展示:

'''
格子数、动物 房屋
批量制作细线条的迷宫图(15CM正方形手工纸横板一面一份横版)测试格子数量,最小3格,最多93格子,左上角数字,左下角动物,右上角箭头
作者:
1、落难Coder https://blog.csdn.net/u014297502/article/details/124839912
2、AI对话大师、
3、阿夏
作者:2024年4月6日
# '''

# # 15CM正方形手工纸上 以15*15格子为基础,测试0-14,16-30的格子

num=int(input('几张(最高30份)\n'))
gz=int(input('迷宫格子,(8-93,数字越大,空间越小)\n'))

print('-----------1、 生成细线迷宫-----------')
import sys
import matplotlib.pyplot as plt
from random import randint
import os

# 保存多少张图?

for i in range(num):	
	WIDTH  = gz
	HEIGHT = WIDTH 
	sys.setrecursionlimit(WIDTH * HEIGHT)

	def initVisitedList():
		visited = []
		for y in range(HEIGHT):
			line = []
			for x in range(WIDTH):
				line.append(False)
			visited.append(line)
		return visited

	def drawLine(x1, y1, x2, y2):
		plt.plot([x1, x2], [y1, y2], color="black")

	def removeLine(x1, y1, x2, y2):
		plt.plot([x1, x2], [y1, y2], color="white")

	def get_edges(x, y):
		result = []
		result.append((x, y, x, y+1))
		result.append((x+1, y, x+1, y+1))
		result.append((x, y, x+1, y))
		result.append((x, y+1, x+1, y+1))

		return result

	def drawCell(x, y):
		edges = get_edges(x, y)
		for item in edges:
			drawLine(item[0], item[1], item[2], item[3])

	def getCommonEdge(cell1_x, cell1_y, cell2_x, cell2_y):
		edges1 = get_edges(cell1_x, cell1_y)
		edges2 = set(get_edges(cell2_x, cell2_y))
		for edge in edges1:
			if edge in edges2:
				return edge
		return None

	def initEdgeList():
		edges = set()
		for x in range(WIDTH):
			for y in range(HEIGHT):
				cellEdges = get_edges(x, y)
				for edge in cellEdges:
					edges.add(edge)
		return edges

	def isValidPosition(x, y):
		if x < 0 or x >= WIDTH:
			return False
		elif y < 0 or y >= HEIGHT:
			return False
		else:
			return True

	def shuffle(dX, dY):
		for t in range(4):
			i = randint(0, 3)
			j = randint(0, 3)
			dX[i], dX[j] = dX[j], dX[i]
			dY[i], dY[j] = dY[j], dY[i]

	def DFS(X, Y, edgeList, visited):
		dX = [0,  0, -1, 1]
		dY = [-1, 1, 0,  0]
		shuffle(dX, dY)
		for i in range(len(dX)):
			nextX = X + dX[i]
			nextY = Y + dY[i]
			if isValidPosition(nextX, nextY):
				if not visited[nextY][nextX]:
					visited[nextY][nextX] = True
					commonEdge = getCommonEdge(X, Y, nextX, nextY)
					if commonEdge in edgeList:
						edgeList.remove(commonEdge)
					DFS(nextX, nextY, edgeList, visited)

	edgeList = initEdgeList()
	visited  = initVisitedList()
	DFS(0, 0, edgeList, visited)
	edgeList.remove((0, 0, 0, 1))
	edgeList.remove((WIDTH, HEIGHT-1, WIDTH, HEIGHT))

	figure = plt.figure(figsize=(15,15))  # 创建一个指定大小的图像窗口
	ax = plt.Axes(figure, [0., 0., 1., 1.], frame_on=False)  # 创建一个坐标轴,覆盖整个图像窗口
	figure.add_axes(ax)
	ax.axis('off')  # 关闭坐标轴显示

	for edge in edgeList:
		drawLine(edge[0], edge[1], edge[2], edge[3])

	# 新建图片文件夹,保存所有生成的迷宫图
	path=r'C:\Users\jg2yXRZ\OneDrive\桌面\细线迷宫图图片'
	folder_path = path+r'\01迷宫图'
	os.makedirs(folder_path, exist_ok=True)


	plt.savefig(folder_path+r'\{}.png'.format('%02d'%i), dpi=400)  # 保存迷宫图像为maze.png,设置dpi参数调整图像质量

	plt.close()  # 超过20张图片会提示占内存,所以关闭图像窗口释放内存
	# plt.show()


# print('-----------2、PNG上左上角加格子数目----------')

import os
from PIL import Image, ImageDraw, ImageFont

path=r'C:\Users\jg2yXRZ\OneDrive\桌面\细线迷宫图图片'
folder_path = path+r'\01迷宫图'
# 获取文件夹内的所有文件
# folder_path = "path/to/123"
files = os.listdir(folder_path)


for file in files:
    if file.endswith(".png"):
        # 构建图片的完整路径
        image_path = os.path.join(folder_path, file)

        # 打开图片
        image = Image.open(image_path)

        # 创建一个可以在图片上绘制的对象
        draw = ImageDraw.Draw(image)

        # 定义字体和字号
        font = ImageFont.truetype("C:\Windows\Fonts\Arial.ttf", 200)

        # 在图片左上角写入文件名 
		# 300, 300正好在左上角的格子内部
		# 50, 50正好在左上角的格子外部
        draw.text((50, 50), f'{gz}', fill="black", font=font)

        # 保存修改后的图片
        image.save(image_path)

        # 关闭图片
        image.close()

print('-----------3、PNG上加两个箭头,左下角 右上角的坐标点----------')


from PIL import Image
import os


path=r'C:\Users\jg2yXRZ\OneDrive\桌面\细线迷宫图图片'
folder_path = path+r'\01迷宫图'
# 箭头图片路径
# arrow_image_path = path + r'\00箭头.png'
arrow_image_path = path + r'\01房屋.png'

new_arrow_size = (300, 300)  # 房屋图片大小

# 房屋坐标
p1=[5700]
p2=[100]

for r in range(len(p1)):
	#  遍历图片文件夹
	for filename in os.listdir(folder_path):
		if filename.endswith('.png'):
			# 打开原始图片
			image_path = os.path.join(folder_path, filename)
			image = Image.open(image_path)

			# 打开箭头图片并调整大小
			arrow_image = Image.open(arrow_image_path)
			arrow_image = arrow_image.resize(new_arrow_size)			

			# 如果箭头图片模式不是RGBA,则转换为RGBA模式以保留透明度信息
			if arrow_image.mode != 'RGBA':
				arrow_image = arrow_image.convert('RGBA')

			# 在指定位置添加箭头图片
			position = (int(p1[r]), int(p2[r]))  # 替换为你想要添加箭头图片的位置坐标
			image.paste(arrow_image, position, mask=arrow_image)

			# 保存修改后的图片
			new_image_path = os.path.join(folder_path, filename)
			image.save(new_image_path)

			# 关闭图片对象
			image.close()
			arrow_image.close()
 
print('-----------2、PNG 起点加上动物图片----------')


from PIL import Image
import os

path=r'C:\Users\jg2yXRZ\OneDrive\桌面\细线迷宫图图片'
folder_path = path+r'\01迷宫图'
pic_path = path+r'\04动物四格图片'

# 使用列表推导式获取所有PNG文件的路径和文件名,并存储在列表中
folder_files = [os.path.join(dp, f) for dp, dn, fn in os.walk(folder_path) for f in fn if f.endswith('.png')]
animal_files = [os.path.join(dp, f) for dp, dn, fn in os.walk(pic_path) for f in fn if f.endswith('.png')]


# 调整后的箭头图片大小
# new_animal_size = (300, 200)  # 替换为你想要的箭头图片尺寸
# # 调整后的房屋图片大小
new_animal_size = (400, 400)  # 替换为你想要的房屋图片尺寸正方形

# 4张横版的右上房屋 (11150, 450)
p1=[50]
p2=[5550]

# 遍历坐标
for r in range(len(p1)):
# 	#  遍历图片文件夹
	for o in range(len(folder_files)):
		image_path =folder_files[o]
		print(image_path)
# # 	C:\Users\jg2yXRZ\OneDrive\桌面\细线迷宫图图片\01迷宫图\00.png
# 		# C:\Users\jg2yXRZ\OneDrive\桌面\细线迷宫图图片\01迷宫图\01.png
		image = Image.open(image_path)

		# # 打开箭头图片并调整大小
		arrow_image = Image.open(animal_files[o])
		arrow_image = arrow_image.resize(new_animal_size)			

		# 如果箭头图片模式不是RGBA,则转换为RGBA模式以保留透明度信息
		if arrow_image.mode != 'RGBA':
			arrow_image = arrow_image.convert('RGBA')

		# 在指定位置添加箭头图片
		position = (int(p1[r]), int(p2[r]))  # 替换为你想要添加箭头图片的位置坐标
		image.paste(arrow_image, position, mask=arrow_image)

		# 保存修改后的图片 原图替换保存
		# new_image_path = os.path.join(folder_path, filename)
		image.save(image_path)

		# 关闭图片对象
		image.close()
		arrow_image.close()

print('-----------3、 导入word,合并png----------')

import os,time
from docx import Document
from docx.shared import Cm, RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn
from docx2pdf import convert
from PyPDF2 import PdfMerger

# 设置路径和文件夹名称

# folder_path ='迷宫图所有图片文件夹路径'
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\细线迷宫图图片'
folder_path = path+r'\01迷宫图'
template_path = path+r"\04迷宫图细线(15CM1张横图).docx"# 模板文件路径
output_path =path+r'\零时Word'# 生成docx和PDF的文件夹,最后要删除

# 创建输出文件夹
if not os.path.exists(output_path):
    os.makedirs(output_path)

n = 1
# 遍历图片文件夹
for filename in os.listdir(folder_path):
    if filename.endswith('.png'):
        # 打开模板文档
        doc = Document(template_path)
        
        # 获取第一个表格
        table = doc.tables[0]
        
        # 在表格中插入图片
        table.cell(0, 0).paragraphs[0].add_run().add_picture(os.path.join(folder_path, filename), width=Cm(15), height=Cm(14.94))
        
        # 保存为Word文档
        doc.save(os.path.join(output_path, '{:02d}.docx'.format(n)))
        time.sleep(3)
        # 转换为PDF
        convert(os.path.join(output_path, '{:02d}.docx'.format(n)), os.path.join(output_path, '{:02d}.pdf'.format(n)))
        n += 1
	
# 合并PDF
pdf_lst = [os.path.join(output_path, filename) for filename in os.listdir(output_path) if filename.endswith('.pdf')]
pdf_lst.sort()

file_merger = PdfMerger()
for pdf in pdf_lst:
    file_merger.append(pdf)


file_merger.write(path+fr'\01(打印合集)迷宫图(动物+房屋)({gz}格测试)(15CM整页1份横图)({num}份).pdf')
time.sleep(5)

# file_merger.write(os.path.join(output_path, '合并后的PDF.pdf'))
file_merger.close()

# 删除临时文件夹
import shutil
shutil.rmtree(output_path)
shutil.rmtree(folder_path)


65dadd6b2d3447808eaea11f39ed3798.png

80c02fc9b7b842508e05355687149aee.png

7e34085d8d71469d9b2c652fe1d5b532.png

询问孩子:你觉得动物是起点,还是房屋是起点?

随机抽了3个孩子,1位说从家里(房屋)出发,1一位说从动物走迷宫回家(动物为起点)。

同样方法再生成20、30、40、50格的动物房屋迷宫

7c9848ba125b4586b548e0ed0b787baf.png

20a6debfc5ca4f59a089c85b13edf924.png2259e4ae2ab64f8ea20964ecb7f07156.png9239eb384e6d4e2aab7b2f724929adb9.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿夏reasonsummer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值