【教学类-58-04】黑白三角拼图04(2-10宫格,每个宫格随机1张-6张,带空格纸,1页6张黑白,1张6张白卡)

背景需求:

前期制作了黑白三角拼图2*2、3*3、4*4,确定了基本模板,就可以批量制作更多格子数

【教学类-58-01】黑白三角拼图01(2*2宫格)固定256种+随机抽取10张-CSDN博客文章浏览阅读522次,点赞13次,收藏16次。【教学类-58-01】黑白三角拼图01(2*2宫格)固定256种+随机抽取10张https://blog.csdn.net/reasonsummer/article/details/139173885

【教学类-58-02】黑白三角拼图02(3*3宫格)262144种-CSDN博客文章浏览阅读511次,点赞16次,收藏13次。【教学类-58-02】黑白三角拼图02(3*3宫格)262144种https://blog.csdn.net/reasonsummer/article/details/139176570【教学类-58-03】黑白三角拼图03(4*4宫格)总数算不出+随机抽取10张-CSDN博客文章浏览阅读806次,点赞25次,收藏13次。【教学类-58-03】黑白三角拼图03(4*4宫格)总数算不出+随机抽取10张https://blog.csdn.net/reasonsummer/article/details/139177898

小红书上黑白拼图的玩法时自己涂色。所以我把空白格子页也加了进去,但是目前6张图卡一页、6张空白格子一页 \6张图卡一页、6张空白格子一页 ……这样的排列方式

背景需求

'''
黑白三角2宫格-6宫格,每个宫格1分6图-6份36图,一页6张图卡,一页6张白卡
随机图片
AI对话大师,阿夏
2024年5月24日'''
import os 
from PIL import Image, ImageDrawfor ys in range(1,13):     # 每个宫格提供几张(1张6页path = r'C:\Users\jg2yXRZ\OneDrive\桌面\黑白三角'new = path + fr'\1-10宫格组合图片'os.makedirs(new, exist_ok=True)# ys=6 # 一种2页f=6 # 一页6张b=400 # 画布大小# g=5 # 宫格数by=10 # 边距for a in range(1,ys+1):for g in range(2,11):     for c in range(1,f+1):# 创建bxb的画布canvas = Image.new('RGB', (b,b), (255, 255, 255))draw = ImageDraw.Draw(canvas)# 定义表格的行数和列数、边距rows = gcols = gmargin = by# 计算单元格的宽度和高度cell_width = (b - 2 * margin) // colscell_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 =f'{g:03d}格{a:03d}-02模板{c:03d}.png'canvas.save(new + fr'\{mb}')# a+=1print('---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)# print(len(cell_coordinates))# 16# [[(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 randomimport oscombinations=[]# 存储选取的点,随机生成坐标(样式)排除重复,生成10份样式不同的模版while len(combinations) < f*a:selected_points = []for points in cell_coordinates:selected_points.append(tuple(random.sample(points, 3)))combinations.append(tuple(selected_points))print(combinations)print(len(combinations))#  10print('---3、制作三个坐标点的黑色三角形(4个)-------')from PIL import Image, ImageDraw# 定义要绘制的坐标点组合for p in range(0,ys):for point_combination in combinations[f*p:f*p+f]:print(point_combination)# 清空selected_points列表selected_points = []h=1# 遍历每个坐标点组合for combination in point_combination:# 从每个列表中随机选取三个点,并加入到selected_points中selected_points.append(tuple(random.sample(combination, 3)))# 读取图像文件#                创建bxb的画布canvas = Image.new('RGB', (b,b), (255, 255, 255))draw = ImageDraw.Draw(canvas)# 定义表格的行数和列数、边距rows = gcols = gmargin = by# 计算单元格的宽度和高度cell_width = (b - 2 * margin) // colscell_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)# 遍历每个坐标点组合for combination in selected_points:# 绘制填充为黑色的多边形draw.polygon(combination, fill="black")# 保存结果图像canvas.save(new + fr'\{g:03d}格{a:03d}-01图纸{c:03d}.png')canvas.close()  # 关闭图像文件# print('---4合并打印------')# 第3步,读取图片写入docx,合并PDFimport os,timefrom docx import Documentfrom reportlab.lib.pagesizes import letterfrom reportlab.pdfgen import canvasfrom PyPDF2 import PdfMergerfrom docx.shared import Cm# 读取123文件夹中的所有图片地址image_folder = newnew_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列两个都是6cell_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:03d}.docx'))# 所有docx合并成PDF# 将10个docx转为PDFimport osfrom docx2pdf import convertfrom PyPDF2 import PdfFileMerger# from PyPDF4 import PdfMergerpdf_output_path = path+fr'\黑白三角1-10宫格随机每款{f*ys}图共{ys}张.pdf'# 将所有DOCX文件转换为PDFfor 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# 删除输出文件夹import timeshutil.rmtree(new_folder)shutil.rmtree(new)time.sleep(2)

2*2宫格的抽取6张,3*3宫格抽取6张……9*9宫格抽取6张,6张图正好一页A4

因为数量多,所以生成时间很长。

这一款

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

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

相关文章

高中数学:平面向量-题型总结及解题思路梳理

一、知识点及解题思路梳理 高中&#xff0c;2/3的向量题目是坐标向量题&#xff0c;1/3是几何向量题。但是&#xff0c;这1/3的几何向量题可以转换成坐标向量题。 二、练习 例题1 几何型向量题 例题2

【机器学习300问】100、怎么理解卷积神经网络CNN中的池化操作?

一、什么是池化&#xff1f; 卷积神经网络&#xff08;CNN&#xff09;中的池化&#xff08;Pooling&#xff09;操作是一种下采样技术&#xff0c;其目的是减少数据的空间维度&#xff08;宽度和高度&#xff09;&#xff0c;同时保持最重要的特征并降低计算复杂度。池化操作不…

若依 Ruoyi-Vue PageHelper 分页失效 total为记录数

分页插件PageHelper返回记录总数total竟然出错了 执行控制台的SQL&#xff0c;查询出来的total数量是对的&#xff0c;很奇怪分页的total设置为查询到的记录数。 怀疑对list.stream操作&#xff0c;影响了分页&#xff0c;代码发现确实是这样&#xff0c;debug&#xff0c;居然…

firewalld 防火墙

firewalld概述 Linux系统防火墙从CentOS7开始的默认防火墙工作在网络层&#xff0c;属于包过滤防火墙 Firewalld和iptables的关系 netfilter 位于Linux内核中的包过滤功能体系称为Linux防火墙的“内核态” firewalld Centos默认的管理防火墙规则的工具称为防火墙的“用…

Gradient-checkpointing的原理

原文&#xff1a; 将更大的网络安装到内存中。|by 雅罗斯拉夫布拉托夫 |张量流 |中等 (medium.com) 前向传播时&#xff0c;隔几层就保留一层activation数据&#xff0c;其余层的activation都释放掉&#xff1b; 反向传播时&#xff0c;从最近的checkpoint去重新跑forward&…

Ps:消失点滤镜 - 测量工具

Ps菜单&#xff1a;滤镜/消失点 Filter/Vanishing Point 快捷键&#xff1a;Ctrl Alt V “消失点”滤镜中的测量工具 Measure Tool用于在透视平面内测量图像中对象的大小&#xff0c;适用于建筑师、设计师、法医和木工等需要精确测量的用户。 快捷键&#xff1a;R ◆ ◆ ◆…

基于springboot+vue的4S店车辆管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

CMS Full GC流程以及调优配置

个人博客 CMS Full GC流程以及调优配置 | iwts’s blog CMS CMS 收集器是以实现最短 STW 时间为目标的收集器&#xff0c;所以对于偏业务的后台开发而言&#xff0c;基本上都无脑选CMS了。 多线程收集器&#xff0c;工作在老年代&#xff0c;采用标记清除算法。比较特殊&am…

【QNX】Qnx IPC通信 Message-passing

Qnx IPC通信 Message-passing Message-passing介绍 QNX提供了多种IPC(Interprocess Communication )通信方式&#xff0c;包括Message-passing、Plus&#xff08;脉冲&#xff09;、Event、Signal、共享内存、Pipe&#xff0c;当然还有socket。 Message-passing是Qnx IPC的主…

【数据结构与算法 经典例题】判断链表是否带环

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;数据结构与算法刷题系列&#xff08;C语言&#xff09; 期待您的关注 目录

dubbo复习:(9)配置中心的大坑,并不能像spring cloud那样直接从配置中心读取自定义的配置

配置中心只是为 Dubbo 配置提供管理使用的&#xff08;比如配置服务超时时间等)。不要尝试通过Value类似的方式从dubbo 配置中心(比如nacos、zookeeper、Apollo)来获取数据 https://github.com/apache/dubbo/issues/11200可以在application.yml中主要写注册中心的配置&#xf…

【深度学习基础】NumPy数组库的使用

目录 写在开头 一、数组的类型与维度 数组的类型 数组的维度 二、数组的创建 递增数组 同值数组 随机数数组 三、数组的索引 访问/修改单个元素 花式索引 数组的切片 四、数组的变形 数组的转置 数组的翻转 数组的形状改变 数组的拼接 五、数组的运算 数…

Linux系统启动原理

Linux系统启动原理及故障排除 Centos6系统启动过程 修改系统启动级别 vim /etc/inittabCentos7启动流程 加载BIOS信息&#xff0c;进行硬件检测 根据BIOS设定读取设备中的MBR&#xff0c;加载Boot loader 加载内核&#xff0c;内核初始化以后以模块的形式动态加载硬件 并且加…

FFmpeg的流程

文章目录 前序代码结构FFmpeg.cffmpeg_opt.c 小结 前序 之前看过FFmpeg的各种命令&#xff0c;然后不是很理解。相信很多人都不是很理解&#xff0c;毕竟&#xff0c;单纯的去记住那些命令行本身就需要很大的内存&#xff0c;我们的大脑内存又有限&#xff0c;所以&#xff0c…

java “错误:编码GBK 的不可映射字符”

环境&#xff1a;JDK-17 本机编码&#xff1a;utf-8 代码编码&#xff1a;GBK 错误&#xff1a;java “错误&#xff1a;编码GBK 的不可映射字符” 解决1&#xff1a;记事本打开java源文件&#xff0c;另存为选择ANSI编码 解决2&#xff1a;复制代码再将编码格式改为utf-8,…

java欢迪迈手机商城设计与实现源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的欢迪迈手机商城设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 欢迪迈手机商城…

spring状态机实战

一、什么是状态机 状态机是有限状态自动机的简称&#xff0c;是现实事物运行规则抽象而成的一个数学模型&#xff0c;是一种概念性机器&#xff0c;它能采取某种操作来响应一个外部事件。这种操作不仅能取决于接收到的事件&#xff0c;还能取决于各个事件的相对发生顺序。状态…

不同网段的通信过程

这里的AA和HH指的是mac地址&#xff0c;上面画的是路由器 底下的这个pc1&#xff0c;或者其他的连接在这里的pc&#xff0c;他们的默认网关就是路由器的这个192.168.1.1/24这个接口 来看看通信的过程 1、先判断&#xff08;和之前一样&#xff09; 2、去查默认网关&#xf…

基于SpringBoot和Hutool工具包实现的验证码案例

目录 验证码案例 1. 需求 2. 准备工作 3. 约定前后端交互接口 需求分析 接口定义 4. Hutool 工具介绍 5. 实现验证码 后端代码 前端代码 6. 运行测试 验证码案例 随着安全性的要求越来越高&#xff0c;目前项目中很多都会使用验证码&#xff0c;只要涉及到登录&…