【教学类-09-05】20240402细线迷宫图03+箭头图片(A4横版一页-4份横版)

作品展示

79a2f5c4c124412cade969cd3825e071.png

背景需求:

在word模板上添加“形状-箭头”,结果生成的图片上,箭头位置挪移。

 

思考,如何直接在迷宫图上添加箭头,以图片形式将迷宫图+箭头插入docx

 

 

4fefc14731394ccead372a70b9231b57.png

59020178022e44168f619c2d19c3fd5d.png

09b498d04d7c41a09b1368f58cf069d3.png

word模板

e33132a0026042fdb777016a4712d341.png

5d6390facede447f8ffdc531f1d743c7.png

重点说明

651c9f60326544bfb7da461f07c524d6.png

代码展示

'''
批量制作细线条的迷宫图(A4横板一面4张横版,图片上添加箭头)
作者:
1、落难Coder https://blog.csdn.net/u014297502/article/details/124839912
2、AI对话大师
3、阿夏
作者:2024年4月1日
'''


num=int(input('几人(30人)\n'))

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

# 保存多少张图? 一人4张图
for i in range(num*4):
	WIDTH  = 15
	HEIGHT = 10
	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=(14.85,10.5))  # 创建一个指定大小的图像窗口 29.7变成29 除以2
	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参数调整图像质量
    # 生成60张图# 30*2	
	plt.close()  # 超过20张图片会提示占内存,所以关闭图像窗口释放内存
# plt.show()

# print('-----------2、PNG上加箭头----------')


from PIL import Image
import os

# 箭头图片路径
arrow_image_path = path + r'\00箭头.png'

# 调整后的箭头图片大小
new_arrow_size = (400, 200)  # 替换为你想要的箭头图片尺寸

# 4张横版的大小是5940 4200
# #4张横版的左下箭头 (100, 3750)   4张横版的右上箭头 (5500, 250)
p1=[100,5500]
p2=[3750,250]

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('-----------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"\03迷宫图细线(A4横版4张横图).docx"# 模板文件路径
output_path =path+r'\零时Word'# 生成docx和PDF的文件夹,最后要删除

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

n = 1

filename=[]
# 遍历图片文件夹
for i in range(0, len(os.listdir(folder_path)), 4):
    filename.clear()
    for p in range(0,4):
        filename .append(os.listdir(folder_path)[i+p])        # i、i+1
    print(filename)

    # 打开模板文档
    doc = Document(template_path)
    
    # 获取第一个表格
    table = doc.tables[0]
    # 获取第一个表格
    
    c=0
    for a in range(0,2):
        for b in range(0,2):    
            table.cell(a,b).paragraphs[0].add_run().add_picture(os.path.join(folder_path, filename[c]), width=Cm(14.85), height=Cm(10.4))
            c+=1

    # 保存为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'\03(打印合集)迷宫图(A4横版整页4份横图)({num}份).pdf')
time.sleep(5)

file_merger.close()

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


图片生成过程

544c3bb466914df2a44586bb79ec0247.png

88dc3e0d894747bda70bd54a1ce4de7a.png

9543ec2c3dc64bd88fad853dfb2b322c.png

3babc395038341cb86105a18bf795bf0.png

把加入箭头图片的迷宫图,生成PDF

f61d2f60f8e2426f8aa55400d44a145d.png

最终效果

1781aa26a35e4734ab524a9a827d5b64.png

 

每个箭头的位置都是一样的(因为已经做成了图片)

79a2f5c4c124412cade969cd3825e071.png3f2c9504d132406ea109069bde45790b.png

用同样的方法修改“1张横版迷宫图”、“2张竖板迷宫图的代码”

 

最近更新

  1. TCP协议是安全的吗?

    2024-04-02 11:12:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-02 11:12:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-02 11:12:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-02 11:12:05       18 阅读

热门阅读

  1. leetcode热题100.数据流的中位数

    2024-04-02 11:12:05       15 阅读
  2. python如何处理文本错误

    2024-04-02 11:12:05       13 阅读
  3. 什么是站群服务器?

    2024-04-02 11:12:05       13 阅读
  4. OMP压缩感知仿真(MATLAB)

    2024-04-02 11:12:05       16 阅读
  5. 导航守卫有哪三种?分别有什么作用

    2024-04-02 11:12:05       15 阅读
  6. 【漏洞复现】金和OA XmlDeal.aspx XXE漏洞

    2024-04-02 11:12:05       13 阅读
  7. 探索Django:打造高效、可扩展的Web应用(上)

    2024-04-02 11:12:05       15 阅读
  8. 新手基于axios 的二次封装

    2024-04-02 11:12:05       18 阅读