【教学类-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  = 15HEIGHT = 10sys.setrecursionlimit(WIDTH * HEIGHT)def initVisitedList():visited = []for y in range(HEIGHT):line = []for x in range(WIDTH):line.append(False)visited.append(line)return visiteddef 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 resultdef 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 edgereturn Nonedef 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 edgesdef isValidPosition(x, y):if x < 0 or x >= WIDTH:return Falseelif y < 0 or y >= HEIGHT:return Falseelse:return Truedef 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] = TruecommonEdge = 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 除以2ax = 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 = 1filename=[]
# 遍历图片文件夹
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+1print(filename)# 打开模板文档doc = Document(template_path)# 获取第一个表格table = doc.tables[0]# 获取第一个表格c=0for 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)# 转换为PDFconvert(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张竖板迷宫图的代码”

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/585500.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D DRAM在2025年来袭

4月1日消息&#xff0c;据半导体工程报道&#xff0c;在行业大会Memcon 2024上&#xff0c;三星电子宣布其计划成为首家在2025年后步入3D DRAM内存时代的行业领军者。随着DRAM内存行业在本十年后期将线宽压缩至低于10纳米&#xff0c;现有的设计解决方案在如此精细的尺度上难以…

dockerfile制作-pytoch+深度学习环境版

你好你好&#xff01; 以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 文档内容docker相关术语docker常用命令容器常用命令根据dockerfile创建容器dokerfile文件内容 docker问题&#xff1a;可能的原因和解决方法示例修改修改后的D…

渗透测试:数据库UDF提权(linux)

目录 开头: 1.UDF提权简介&#xff1a; 1.1共享库文件(UDF文件)指定目录&#xff1a; 版本特征&#xff1a; 操作系统版本&#xff1a; 2.靶场UDF提权复现 提权前提 1.要有一个高权限的MySQL的账号 ​编辑 2.MySQL的权限配置secure_file_priv为空 3.必须有存放UDF文件的…

【单片机 5.3开关检测】

文章目录 前言一、5.3开关检测1.1没按键按下的1.2有按键按下的 二、改进1.改进 三、独立键盘3.1为什么要取反3.2 实用的按键 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 课程需要&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xf…

【前端】FreeMarker学习笔记

文章目录 1. 介绍2.FreeMarker环境搭建(maven版本)3. 语法3.1 freemarker的数据类型3.1.1 布尔类型3.1.2 日期类型 FreeMarker视频教程 1. 介绍 中文官网 英文官网 FreeMarker 是一款 模板引擎&#xff1a; 即一种基于模板和要改变的数据&#xff0c; 并用来生成输出文本(HTML…

Excel 数据-分列的三个经常用法

Case 1 &#xff1a;有时候数据导出时如果没有电子表格的话&#xff0c;只能导出本地文件&#xff0c;如下图情况&#xff1a; 可以使用数据-分列处理数据&#xff1a; 原来是因为SAP导出数据没有完成的原因&#xff0c;或者关闭Excel重新打开试一下。 重新打开后可以输入了 C…

数字医疗:智慧医共体引领健康未来

随着科技的不断发展&#xff0c;数字医疗正在成为医疗行业的一场革命。数字化技术的应用不仅提高了医疗服务的效率和质量&#xff0c;还为人们带来了更便捷、智能的健康管理方式。在这个数字化时代&#xff0c;智慧医共体已经成为了健康未来的引领者。 数字医疗&#xff0c;顾…

自动驾驶---Motion Planning之轨迹Speed优化

1 背景 在之前的几篇文章中&#xff0c;不管是通过构建SL图《自动驾驶---Motion Planning之Path Boundary》&#xff0c;ST图《自动驾驶---Motion Planning之Speed Boundary》&#xff0c;又或者是构建SLT图《自动驾驶---Motion Planning之构建SLT Driving Corridor》&#xff…

无锡国家集成电路设计中心某公司的单锂小电机直流电机H桥驱动电路

H桥驱动 L9110S是一款直流电机驱动电路&#xff0c;适合单节锂电池应用。输出电流0.4A。价格约3毛。 推荐原因&#xff1a; 某些人应该知道这个地方&#xff0c;大多数人应该不知道这个地方&#xff0c;所以推荐一下。 这个地方去过几次&#xff0c;某公司与某方走的“近”&…

https安全性 带给im 消息加密的启发

大家好&#xff0c;我是蓝胖子&#xff0c;在之前# MYSQL 是如何保证binlog 和redo log同时提交的&#xff1f;这篇文章里&#xff0c;我们可以从mysql的设计中学会如何让两个服务的调用逻辑达到最终一致性&#xff0c;这也是分布式事务实现方式之一。今天来看看我们能够从http…

Ubuntu joystick 测试手柄 xbox

Ubuntu joystick 测试手柄 xbox 测试使用Ubuntu20.04 测试环境在工控机 安装测试 实际测试使用的手柄是北通阿修罗2pro 兼容xbox Ubuntu20.04主机 连接手柄或者无线接收器后查看是否已经检测到&#xff1a; ls /dev/input找到输入中的 js0 即为手柄输入 需要安装joysti…

uni app 扫雷

闲来无聊。做个扫雷玩玩吧&#xff0c;点击打开&#xff0c;长按标记&#xff0c;标记的点击两次或长按取消标记。所有打开结束 <template><view class"page_main"><view class"add_button" style"width: 100vw; margin-bottom: 20r…