【教学类-58-02】黑白三角拼图02(3*3宫格)262144种

背景需求:

已知黑白三角拼图2*2(4个拼图)一共有256种排列方法

【教学类-58-01】黑白三角拼图01(2*2宫格)256种-CSDN博客文章浏览阅读142次,点赞5次,收藏12次。【教学类-58-01】黑白三角拼图01(2*2宫格)256种https://blog.csdn.net/reasonsummer/article/details/139173885?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139173885%22%2C%22source%22%3A%22reasonsummer%22%7D

接下去做黑白三角拼图3*3(9个拼图)一共有有262144种排列方法(26万),

为了生成快一点,图片大小是170*170,1.46KB,很小很小。

因为26万张太多了,所以不制作PDF了,如果需要做PDF,建议还是改成300*300

代码展示

'''
黑白三角(3*3), 9个单元格每个有四个坐标,四个坐标随机抽取3个,进行组合,共有#262144种不重复排序,带边距
因为有26万种,所以把图片做的150像素小一点  生成时间15:34-16:02
AI对话大师,阿夏
2024年5月24日'''from PIL import Image, ImageDrawb=180
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\黑白三角'# 创建bxb的画布
canvas = Image.new('RGB', (b,b), (255, 255, 255))
draw = ImageDraw.Draw(canvas)# 定义表格的行数和列数
rows = 3
cols = 3
margin = 10# 计算单元格的宽度和高度
cell_width = (b - 2 * margin) // cols
cell_height = (b - 2 * margin) // rows# 绘制表格的竖直线
for i in range(cols + 1):x = margin + i * cell_widthdraw.line([(x, margin), (x, b - margin)], fill=(0, 0, 0), width=2)# 绘制表格的水平线
for i in range(rows + 1):y = margin + i * cell_heightdraw.line([(margin, y), (b - margin, y)], fill=(0, 0, 0), width=2)# 保存画布
mb = '3格模板.png'
canvas.save(path + fr'\{mb}')print('---2、计算三个坐标点的黑色三角形不重复图案有几个-------')# 创建一个空列表用于存储单元格的坐标
cell_coordinates = []# 计算每个单元格的四个顶点坐标
for row in range(rows):for col in range(cols):top_left = (margin + col * cell_width, margin + row * cell_height)top_right = (margin + (col + 1) * cell_width, margin + row * cell_height)bottom_left = (margin + col * cell_width, margin + (row + 1) * cell_height)bottom_right = (margin + (col + 1) * cell_width, margin + (row + 1) * cell_height)# 将四个顶点坐标添加到列表中cell_coordinates.append([top_left, top_right, bottom_left, bottom_right])
# print(cell_coordinates)
# [[(0, 0), (400, 0), (0, 400), (400, 400)], [(400, 0), (b, 0), (400, 400), (b, 400)], [(0, 400), (400, 400), (0, b), (400, b)], [(400, 400), (b, 400), (400, b), (b, b)]]import itertools,os# 生成所有组合方式
combinations = list(itertools.product(*[itertools.combinations(sublist, 3) for sublist in cell_coordinates]))
# print(combinations)
print(len(combinations))
# 262144print('---3、制作三个坐标点的黑色三角形(4个)-------')
from PIL import Image, ImageDrawnew=path+r'\三宫格组合图片'
os.makedirs(new,exist_ok=True)m=1
# 定义要绘制的坐标点组合
for point_combination in combinations:# 读取图像文件image = Image.open(path+fr'\{mb}')# 创建绘图对象draw = ImageDraw.Draw(image)# 遍历每个坐标点组合for combination in point_combination:# 绘制填充为黑色的多边形draw.polygon(combination, fill="black")# 保存结果图像image.save(new+fr"\{m:06d}.png")m+=1# print('---4合并打印-26万张就不生成卡片了------')# # 第3步,读取图片写入docx,合并PDF# import os,time
# from docx import Document
# from reportlab.lib.pagesizes import letter
# from reportlab.pdfgen import canvas
# from PyPDF2 import PdfMerger
# from docx.shared import Cm# # 读取123文件夹中的所有图片地址
# image_folder = new
# new_folder = path+r'\零时文件夹'
# os.makedirs(new_folder, exist_ok=True)
# image_files = [os.path.join(image_folder, file) for file in os.listdir(image_folder) if file.endswith('.png')]# # 每8个图片一组进行处理
# grouped_files = [image_files[i:i+6] for i in range(0, len(image_files), 6)]
# print(grouped_files)# # 处理每一组图片
# for group_index, group in enumerate(grouped_files):
#     # 创建新的Word文档
#     doc = Document(path+r'\模板6格.docx')
#     print(group)#     # 遍历每个单元格,并插入图片
#     for cell_index, image_file in enumerate(group):
#         # 计算图片长宽(单位:厘米)#         # 插入图片到单元格
#         table = doc.tables[0]
#         cell = table.cell(int(cell_index / 2), cell_index % 2)
#         # 6列两个都是6
#         cell_paragraph = cell.paragraphs[0]
#         cell_paragraph.clear()
#         run = cell_paragraph.add_run()
#         run.add_picture(image_file, width=Cm(9.4), height=Cm(9.4))#     # 保存Word文档
#     doc.save(os.path.join(new_folder, f'{group_index + 1}.docx'))# # 所有docx合并成PDF# # 将10个docx转为PDF
# import os
# from docx2pdf import convert
# from PyPDF2 import PdfFileMerger
# # from PyPDF4 import PdfMerger# # output_folder = output_folder
# pdf_output_path = path+fr'\黑白三角三宫格26万(6张一页).pdf'# # 将所有DOCX文件转换为PDF
# for docx_file in os.listdir(new_folder):
#     if docx_file.endswith('.docx'):
#         docx_path = os.path.join(new_folder, docx_file)
#         convert(docx_path, docx_path.replace('.docx', '.pdf'))# # 合并零时文件里所有PDF文件
# merger = PdfFileMerger()
# for pdf_file in os.listdir(new_folder):
#     if pdf_file.endswith('.pdf'):
#         pdf_path = os.path.join(new_folder, pdf_file)
#         merger.append(pdf_path)
# time.sleep(2)# # 保存合并后的PDF文件
# merger.write(pdf_output_path)
# merger.close()# import shutil
# # 删除输出文件夹# shutil.rmtree(new_folder)

因为有26万种,所以把图片做的150像素小一点  生成时间15:34-16:02,大约是36分钟才生成完成

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

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

相关文章

深度学习之基于Matlab卷积神经网络(CNN)手写数字识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 手写数字识别是计算机视觉领域的一个重要问题,也是深度学习应用的一个典型场景。卷…

什么是固态继电器?

固态继电器是不需要使用任何机械部件的开关继电器。这通常使它们具有比普通机电继电器寿命更长的优势,然而,尽管固态继电器速度快且耐用,但仍具有某些设计规定。 固态继电器风靡全球,彻底改变了从农业自动化到航空航天等各个行业…

中国数学会发布数学期刊分级目录

T1,T2,T3均是中国数学会的期刊分类 下载地址: 中国数学会发布数学期刊分级目录-太原理工大学数学学院 (tyut.edu.cn)

银行总部文件自动下发,如何保证不影响专线网络使用?

银行在我国金融体系中占据重要地位,是我国市场经济的重要组成部分。我国商业银行随着自身不断发展,规模日益扩大,形成了“总行-分行-支行-营业网点”的典型层级管理模式。在日常中,银行总部存在文件下发的场景: 银行总…

1.4 接入网和物理媒体

接入网络和物理媒体 Q: 怎样将端系统和边缘路由器连接? 住宅接入网络 单位接入网络 (学校、公司) 无线接入网络 注意: 接入网络的带宽 (bits persecond) ? 共享/专用? 接入网: 这是指将端系统物理连接到其…

数学基础 -- 条件概率、后验概率与联合概率

条件概率与后验概率 技术背景 条件概率和后验概率是概率论中的两个重要概念,在机器学习和贝叶斯推理中尤为关键。理解这两个概念对于处理不确定性和进行推理具有重要意义。本文将通过直观的例子和数学解释来详细介绍条件概率与后验概率。 条件概率 条件概率是指…

Linux rzsz安装(在线安装、离线安装),用于上传下载文件

在线安装: yum -y install lrzsz 离线安装: 1.下载安装包地址:http://freshmeat.sourceforge.net/projects/lrzsz/ 2.通过同一网络内可以上传文件的机器(B机:10.210.168.18)先将lrzsz-0.12.20.tar.gz上传至…

盘点Java中的排序操作方案

盘点Java中的排序操作方案 Comparable 接口-自然排序 类implements Comparable接口 类重写 public int compareTo(Object obj)方法 如果返回值为正数,则表示当前对象(调用该方法的对象)比 obj 对象“大”;反之“小”;如果为零的话&#x…

多家知名媒体到访“光子1号金融算力中心“ 交流AI与算力未来观

5月23日,企商在线 “光子1号金融算力中心媒体参观日”活动成功举办,十多家主流媒体、IT行业媒体及自媒体代表走进光子1号金融算力中心,深入了解企商业务发展、战略规划及“光子1号金融算力中心”等企商打造的新型数字基础设施,共同…

Python条件分支与循环

大家好,当涉及到编写高效和灵活的程序时,条件分支和循环是 Python 中至关重要的概念。它们允许我们根据不同的条件执行不同的代码块,或者重复执行一组语句。条件分支和循环是测试开发工程师在日常工作中经常使用的工具,无论是编写…

光耦合器的特性和应用概述

光耦合器又称光电耦合器,是现代电子学中必不可少的元件,确保隔离电路之间安全有效的信号传输。本文探讨了光耦合器的特性及其多样化应用,强调了它们在各种电子系统中的关键作用。 什么是光耦合器? 光耦合器是一种设计用于利用光传…

Java 18新特性详细介绍

Java作为一门广泛使用的编程语言,一直在不断地发展和更新。Java 18是Java的最新版本,它引入了许多新特性和改进,使得开发过程更加高效、安全和便捷。本文将详细介绍Java 18的新特性,帮助开发者更好地了解和应用这些新功能。 JEP …

vue详解(4)

1. v-model 原理 原理:v-model本质上是一个语法糖。例如应用在输入框上,就是 value属性 和 input事件 的合写。作用:提供数据的双向绑定。① 数据变,视图跟着变 :value;② 视图变,数据跟着变 input注意&am…

【MySQL数据库】CRUD 增 删 改 查 超详解,有这一篇就够了!

​ ​ 🔥个人主页: 中草药 🔥专栏:【MySQL】探秘:数据库世界的瑞士军刀 目录 ⚗️一.CRUD 🧪二.新增(Create) 🧫1.基本操作 🧬2.使用SELECT插入 &#x…

长难句5.24

There is pressure for change from within the profession, but opponents of change among the regulators insist that keeping outsiders out of a law firm isolates lawyers from the pressure to make money rather than serve clients ethically. 在(律师)行业内部也有…

云计算历史、业务驱动因素和术语 (Cloud Computing History, Business Drivers and Terminologies)

云计算的历史与定义 (History and Definition of Cloud Computing) 历史 (History) 云计算的概念化始于很久以前,早在1963年。麻省理工学院从美国国防高级研究计划局获得研究资金,用于开发一种“计算机可同时被两人或更多人使用”的技术。在早期的云计算…

区块链钱包如果丢失了私钥或助记词,资产还能恢复吗?

如果你丢失了区块链钱包的私钥或助记词(通常是用于恢复钱包的短语或种子),那么你的资产在大多数情况下是无法恢复的。私钥是访问和控制你在区块链上资产的唯一凭证,而助记词(如BIP39标准中的12、18、24个单词的短语&am…

centos常见命令总结

一、【写在前面】 注意到csdn在鼓励作者创作centos常见命令相关的文章,借此机会水一篇博文。 centos作为上个版本国内最常用的开源操作系统,占有量非常恐怖,排个前三应该没有任何疑问。但是我建议直接去学ubuntu,因为主流在用的…

【系统架构师】-案例篇(十五)SOA、微服务与数据库

1、可复用构件应具备哪些属性 可用性:构件必须易于理解和使用。 质量:构件及其变形必须能正确工作。 适应性:构件应该易于通过参数化等方式在不同语境中进行配置。 可移植性:构件应能在不同的硬件运行平台和软件环境中工作。 可变…

Spring Boot实现RabbitMQ监听消息的几种方式

Spring Boot实现RabbitMQ监听消息的几种方式 在现代的分布式系统中,消息队列扮演着至关重要的角色,用于解耦服务之间的通信,实现异步消息传递。而RabbitMQ作为其中一种常用的消息队列服务,在Spring Boot中得到了广泛的应用。本文…