主页 > 软件开发  > 

【教学类-09-07】20240401细线迷宫图02+箭头图片(A4横版一页-2份竖版)


作品展示

 作品展示

word模板

 

重点说明

 

代码展示 ''' 批量制作细线条的迷宫图(A4横板一面2张竖版)+箭头图片 作者: 1、落难Coder https://blog.csdn.net/u014297502/article/details/124839912 2、AI对话大师 3、阿夏 作者:2024年4月3日 ''' num=int(input('几人(30人)\n')) print('-----------1、 生成细线迷宫-----------') import sys import matplotlib.pyplot as plt from random import randint import os # 保存多少张图? 一人2张图 for i in range(num*2): WIDTH = 15 HEIGHT = 21 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,21)) # 创建一个指定大小的图像窗口 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) # 替换为你想要的箭头图片尺寸 # 2张竖版的图片大小是5940,8400 # #2张竖版版的左下箭头 (100, 7750) 4张横版的右上箭头 (5500, 450) p1=[100,5500] p2=[7750,450] 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"\02迷宫图细线(A4横版2张竖图).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)), 2): filename.clear() for p in range(0,2): filename .append(os.listdir(folder_path)[i+p]) # i+0、i+1 print(filename) doc = Document(template_path) # 获取第一个表格 table = doc.tables[0] for b in range(0,2): # 在表格中插入第一张图片 在表格中插入第二张图片 table.cell(0,b).paragraphs[0].add_run().add_picture(os.path.join(folder_path, filename[b]), width=Cm(14.85), height=Cm(20.93)) # 保存为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'\02(打印合集)迷宫图(A4横版整页2份竖图)({num}份).pdf') time.sleep(3) file_merger.close() # 删除临时文件夹 import shutil shutil.rmtree(output_path) shutil.rmtree(folder_path) 图片生成过程

 

 

 

 

有箭头的图片插入PDF

    最终效果

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

 

标签:

【教学类-09-07】20240401细线迷宫图02+箭头图片(A4横版一页-2份竖版)由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【教学类-09-07】20240401细线迷宫图02+箭头图片(A4横版一页-2份竖版)