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

作品展示:

560e42e97f2d4233b8a75d42270cc9f7.png

背景需求:

增加迷宫图的吸引力,起点的地方放一个小动物。

 

素材准备:

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

代码展示:

'''
格子数、动物 箭头
批量制作细线条的迷宫图(15CM正方形手工纸横板一面一份横版)测试格子数量,最小3格,最多93格子,左上角数字,左下角动物,右上角箭头
作者:
1、落难Coder https://blog.csdn.net/u014297502/article/details/124839912
2、AI对话大师、
3、阿夏
作者:2024年4月5日
'''# 15CM正方形手工纸上 以15*15格子为基础,测试0-14,16-30的格子num=int(input('几张(最高30份,动物图只有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  = gzHEIGHT = 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 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=(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, ImageFontpath=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 ospath=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 = (200, 150)  # 箭头图片大小# 箭头坐标
p1=[5750]
p2=[280]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 ospath=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)  # 替换为你想要的箭头图片尺寸# #1张横版的左下箭头 (300,7730)   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.pngimage = 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)# 转换为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'\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)

74ac506723c842d8ba050816a445167a.png529ae1e834684cf08cd2162886ced02b.png152a8a1a12de4907bd776a6faf6b433d.png左下角动物增加迷宫趣味性

 

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

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

相关文章

哈希表2s总结

3.哈希表 哈希表非常常用&#xff0c;字典一般会用来保存处理过后的输入输出信息&#xff0c;集合也可以用来去重&#xff0c;这部分是重点&#xff0c;但是还是那句话&#xff0c;这种题目是不会或者说很少考原题的&#xff0c;主要还是学习知识&#xff0c;所以题目看一下答…

如何保证Redis的缓存和数据库中的数据的一致性?

Redis的缓存如何和数据库中的数据保持一致性&#xff1f; 我们都知道&#xff0c;Redis是一个基于内存的键值存储系统&#xff0c;数据完全存放在内存中&#xff0c;这使得它的读写速度远超传统的硬盘存储数据库。对于高访问频率、低修改率的数据&#xff0c;通过将它们缓存在…

intellij idea 使用git ,快速合并冲突

可以选择左边的远程分支上的代码&#xff0c;也可以选择右边的代码&#xff0c;而中间是合并的结果。 一个快速合并冲突的小技巧&#xff1a; 如果冲突比较多&#xff0c;想要快速合并冲突。也可以直接点击上图中 Apply non-conflicting changes 旁边的 All 。 这样 Idea 就会…

深入浅出 -- 系统架构之垂直架构

当业务复杂度增加、访问量逐渐增大出现高并发时&#xff0c;单体架构无法满足需求&#xff0c;可以根据业务功能对系统进行拆分&#xff0c;以提高访问效率。 垂直架构介绍 1.垂直架构一般是因为单体架构太过于庞大而进行的拆分&#xff0c;拆分后各个系统应满足独立运行互相不…

wordpress外贸独立站模板

wordpress外贸独立站模板 WordPress Direct Trade 外贸网站模板&#xff0c;适合做跨境电商的外贸公司官方网站使用。 https://www.waimaoyes.com/wangzhan/22.html

【Android Studio】上位机-安卓系统手机-蓝牙调试助手

【Android Studio】上位机-安卓系统手机-蓝牙调试助手 文章目录 前言AS官网一、手机配置二、移植工程三、配置四、BUG五、Java语言总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 AS官网 AS官网 一、手机配置 Android Studio 下真机调试 …

unity学习(82)——profiler 限制帧率

实际测试发现当玩家个数增加时&#xff0c;客户端明显变的很卡&#xff0c;想知道为什么变卡了&#xff01; 1.只有玩家自己的时候 2.两个时候感觉脚本的工作量增大了 拖了一会直接炸了&#xff01;&#xff08;数据包积压把内存搞炸&#xff0c;我第一次见&#xff09; 3.我觉…

数据库的介绍分类作用特点

目录 1.概述 2.分类 2.1.关系型数据库 2.2.非关系型数据库 2.3.分布式数据库 ​​​​​​​2.4.云数据库 3.作用 4.特点 5.应用举例 5.1.MySQL ​​​​​​​5.1.1.作用 ​​​​​​​5.1.2.特点 ​​​​​​​5.1.3.应用案例 ​​​​​​​5.2.达梦 ​​​…

上位机图像处理和嵌入式模块部署(qmacvisual之tcp服务器端)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 上面一篇&#xff0c;我们谈到了tcp客户端&#xff0c;另外一种连接方法就是tcp服务器端。事实上&#xff0c;对于第三方系统&#xff0c;大多数情…

ES10 学习

文章目录 1. Object.fromEntries()2. trimStart() 和 trimEnd()3. 数组的flat() 和flatMap()4. Symbol 对象的description 属性5. try ... catch(e){} 1. Object.fromEntries() Object.fromEntries() 方法允许你轻松地将键 值对列表转换为对象 let arr [["name",&qu…

《搜广推算法指南》(2024版) 重磅发布!

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 结合…

城市道路井盖破损丢失目标检测数据集VOC-1377张

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;1377 标注数量(xml文件个数)&#xff1a;1377 标注类别数&#xff1a;4 标注类别名称:["jg","jg…

(React组件基础)前端八股文修炼Day6

一 类组件与函数组件有什么异同 在React中&#xff0c;类组件和函数组件是创建组件的两种主要方式。随着React的发展&#xff0c;尤其是自Hooks在React 16.8中引入以来&#xff0c;函数组件的功能变得更加强大&#xff0c;使得它们能够更加方便地与类组件相竞争。下面是类组件…

Collection与数据结构 Stack与Queue(一): 栈与Stack

1. 栈 1.1 概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&…

代码随想录算法训练营第四十四天 |卡码网52. 携带研究材料 、518. 零钱兑换 II、377. 组合总和 Ⅳ

代码随想录算法训练营第四十四天 |卡码网52. 携带研究材料 、518. 零钱兑换 II、377. 组合总和 Ⅳ 卡码网52. 携带研究材料题目解法 518. 零钱兑换 II题目解法 377. 组合总和 Ⅳ题目解法 感悟 卡码网52. 携带研究材料 题目 解法 题解链接 1. #include <iostream> #inc…

vscode开发ESP32问题记录

vscode 开发ESP32问题记录 1. 解决vscode中的波浪线警告 1. 解决vscode中的波浪线警告 参考链接&#xff1a;https://blog.csdn.net/fucingman/article/details/134404485 首先可以通过vscode 中的IDF插件生成模板工程&#xff0c;这样会自动创建.vscode文件夹中的一些json配…

【Week-Y4】修改yolov5s中C3模块的结构,common.py文件解读

修改C3模块的结构 一、commom.py文件解析二、修改代码&#xff0c;运行train.py训练 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 &#x1f4d5;本次任务&#xff1a;将yolov5s网络模型…

交换机特性解析

​1. 端口数量和类型: RJ-45端口: 最常见的端口类型,用于连接网线。 铜缆类型: 超五类、六类、七类等,影响传输速率和距离。 PoE功能: 支持为连接的设备供电,如IP电话、无线AP等。 光纤端口: 用于连接光纤,支持更长的传输距离和更高的速率。 光纤类型: 单模、多模等,影响传…

网易RAG问答知识库开源了,Star 6K!!

网易RAG问答知识库开源了&#xff0c;Star 6K&#xff01;&#xff01; RAG 问答知识库 QAnything 开源了QAnything 架构设计剖析整个架构的工作流程主要包含三个环节为什么需要两阶段检索&#xff1f;使用的基座大模型相关技术组件 QAnything 本地部署一键部署安装&#xff0c…

【CSS】基础选择器

目录 标签选择器 id选择器 类选择器 CSS的编写地点&#xff1a; 标签选择器 说明&#xff1a;标签选择器实际上就是HTML标签元素&#xff08;可以是任何HTML元素&#xff09;&#xff0c;用来改变一个指定标签的样式 示例&#xff1a; <style type"text/css"…