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

news2024/10/7 6:45:32

背景需求:

前期制作了黑白三角拼图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图
随机图片
AI对话大师,阿夏
2024年5月24日

'''
import os 
from PIL import Image, ImageDraw



for ys in range(1,7):     # 每个宫格提供几张(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 = g
                cols = g
                margin = by

                # 计算单元格的宽度和高度
                cell_width = (b - 2 * margin) // cols
                cell_height = (b - 2 * margin) // rows

                # 绘制表格的竖直线
                for i in range(cols + 1):
                    x = margin + i * cell_width
                    draw.line([(x, margin), (x, b - margin)], fill=(0, 0, 0), width=2)

                # 绘制表格的水平线
                for i in range(rows + 1):
                    y = margin + i * cell_height
                    draw.line([(margin, y), (b - margin, y)], fill=(0, 0, 0), width=2)

                # 保存画布
                mb =f'{g:03d}格{a:03d}模板{c:03d}.png'
                canvas.save(new + fr'\{mb}')
            # a+=1
            

                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)
                # 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 random
                import os

                combinations=[]
                # 存储选取的点,随机生成坐标(样式)排除重复,生成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))
                #  10

                print('---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)))

                        # 读取图像文件
                        image = Image.open(new + f'\{g:03d}格001模板001.png')
                    
                            # 创建绘图对象
                        draw = ImageDraw.Draw(image)

                        # 遍历每个坐标点组合
                        for combination in selected_points:
                            # 绘制填充为黑色的多边形
                            draw.polygon(combination, fill="black")

                        # 保存结果图像
                        image.save(new + fr'\{g:03d}格{a:03d}图纸{c:03d}.png')
                        
                        image.close()  # 关闭图像文件
                
                    
            




    # print('---4合并打印------')


    # 第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:03d}.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'\黑白三角1-10宫格随机每款{f*ys}图共{ys}张.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
    # 删除输出文件夹
    import time
    shutil.rmtree(new_folder)
    shutil.rmtree(new)
    time.sleep(2)

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

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

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

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

相关文章

【JavaEE】深入学习Spring MVC:掌握参数传递与映射

目录 3. 请求传递单个参数传递多个参数传递对象后端参数重命名传递数组传递集合 3. 请求 请求就是要学习如何传参 传递单个参数多个参数对象数组/集合…… 传递单个参数 RequestMapping("/m1") public String m1(String name){return "接收到的参数name:&qu…

python如何把字符串变成小写字母

Python中&#xff0c;将字符串中的字母转换成小写字母&#xff0c;字符串变量提供了2种方法&#xff0c;分别是title()、lower()。 Python title()方法 title()方法用于将字符串中每个单词的首字母转为大写&#xff0c;其他字母全部转为小写&#xff0c;转换完成后&#xff0…

RAG概述(二):Advanced RAG 高级RAG

目录 概述 Advanced RAG Pre-Retrieval预检索 优化索引 增强数据粒度 粗粒度 细粒度 展开说说 优化索引 Chunk策略 Small2Big方法 元数据 引入假设性问题 对齐优化 混合检索 查询优化 查询扩展 查询转换 Post-Retrieval后检索 参考 概述 Native RAG&#…

Kafka SASL_SSL集群认证

背景 公司需要对kafka环境进行安全验证,目前考虑到的方案有Kerberos和SSL和SASL_SSL,最终考虑到安全和功能的丰富度,我们最终选择了SASL_SSL方案。处于知识积累的角度,记录一下kafka SASL_SSL安装部署的步骤。 机器规划 目前测试环境公搭建了三台kafka主机服务,现在将详…

iOS--锁的学习

iOS--锁的学习 锁的介绍线程安全 锁的分类自旋锁和互斥锁OSSpinLockos_unfair_lockpthread_mutexpthread_mutex的属性 NSLockNSRecursiveLockNSConditionNSConditionLockdispatch_semaphoredispatch_queuesynchronizedatomicpthread_rwlock&#xff1a;读写锁dispatch_barrier_…

react【框架原理详解】JSX 的本质、SyntheticEvent 合成事件机制、组件渲染过程、组件更新过程

JSX 的本质 JSX 代码本身并不是 HTML&#xff0c;也不是 Javascript&#xff0c;在渲染页面前&#xff0c;需先通过解析工具&#xff08;如babel&#xff09;解析之后才能在浏览器中运行。 babel官网可查看 JSX 解析后的效果 更早之前&#xff0c;Babel 会把 JSX 转译成一个 R…

Linux 内核

查看内核的发行版 $ uname -r 5.4.0-150-genericcd /lib/modules/5.4.0-150-generic, 内核源码所在的位置&#xff1a;/usr/src 这里的内核源码路径&#xff08;–kernel-source-path&#xff09;即为&#xff1a; cd /usr/src/linux-headers-5.4.0-150-generic/ 临时生效: …

自建公式,VBA在Excel中轻松获取反义词

自建公式&#xff0c;VBA在Excel中轻松获取反义词 文章目录 前言一、爬取网站数据二、代码1.创建数据发送及返回方法2.汉字转UTF8编码2.获取反义词 三、运行效果截图 前言 小学语文中&#xff0c;近义词、反义词是必考内容之一。家长不能随时辅导怎么办&#xff1f;有VBA&…

dsPIC单片机buck-boost拓扑双向DC-DC电源变换器设计

为实现电池储能装置的双向DC-DC变换器&#xff0c;本系统以buck-boost拓扑电路为核心&#xff0c;通过DSPICFJ256GP710单片机最小系统控制拓扑的切换&#xff0c;从而进行buck恒流充电和boost恒压放电。充电时效率≥94%&#xff0c;放电时效率≥95.5%&#xff0c;具有过压保护及…

引流500+创业粉,抖音口播工具

在抖音平台运营一个专注于口播的工具号&#xff0c;旨在集结超过500位热衷于创业的粉丝&#xff0c;这需要精心筹划的内容策略和周到的运营计划。首先&#xff0c;明确你的口播工具号所专注的领域&#xff0c;无论是分享创业经验、财务管理技巧还是案例分析&#xff0c;确保你所…

springboot错误

错误总结 1、使用IDEA 的 initialalzer显示2、IDEA 新建文件 没有 java class3、java: 错误: 不支持发行版本 22解决方法4、IDEA-SpringBoot项目yml配置文件不自动提示解决办法 1、使用IDEA 的 initialalzer显示 IDEA创建SpringBoot项目时出现&#xff1a;Initialization fail…

秋招突击——算法——模板题——区间DP(1)——加分二叉树

文章目录 题目描述思路分析实现代码分析总结 题目描述 思路分析 实现代码 不过我的代码写的真的不够简洁&#xff0c;逻辑不够清晰&#xff0c;后续多练练吧。 // 组合数问题 #include <iostream> #include <algorithm>using namespace std;const int N 35; int…

JDBC使用QreryRunner简化SQL查询注意事项

QreryRunner是Dbutils的核心类之一&#xff0c;它显著的简化了SQL查询&#xff0c;并与ResultSetHandler协同工作将使编码量大为减少。 注意事项 1. 使用QreryRunner必须保证实体类的变量名&#xff0c;和sql语句中要查找的字段名必须相同&#xff0c;否则查询 不到数据,会出…

视频号小店去哪里找货源?最全货源渠道分享!

大家好&#xff0c;我是电商糖果 视频号小店因为是这两年电商行业新出来的黑马&#xff0c;吸引着不少商家入驻。 入驻了商家中很多都没有自己的货源渠道。 他们基本都是从无货源开始起步&#xff0c;后期通过积累资源&#xff0c;慢慢搭建属于自己的货源渠道。 可是渐渐的…

FreeRTOS中断中释放信号量

串口接收&#xff1a;中断程序中逆序打印字符串 串口接收&#xff1a;逆序回环实验思路 注&#xff1a;任务优先级较高会自动的切换上下文进行运行 FreeRTOS中的顶半操作和底半操作 顶半操作和底半操作“这种叫法源自与Linux”在嵌入式开发中&#xff0c;为了和Linux操作系统做…

leetcode 1631. 最小体力消耗路径 二分+BFS、并查集、Dijkstra算法

最小体力消耗路径 题目与水位上升的泳池中游泳类似 二分查找BFS 首先&#xff0c;采用二分查找&#xff0c;确定一个体力值&#xff0c;再从左上角&#xff0c;进行BFS&#xff0c;查看能否到达右下角&#xff0c;如果不行&#xff0c;二分查找就往大的数字进行查找&#xff…

终端安全管理系统、天锐DLP(数据泄露防护系统)| 数据透明加密保护,防止外泄!

终端作为企业员工日常办公、数据处理和信息交流的关键工具&#xff0c;承载着企业运营的核心信息资产。一旦终端安全受到威胁&#xff0c;企业的敏感数据将面临泄露风险&#xff0c;业务流程可能遭受中断&#xff0c;甚至整个企业的运营稳定性都会受到严重影响。 因此&#xff…

Java——认识Java

一、介绍 1、起源 Java 是由 Sun Microsystems 于 1995 年推出的一种面向对象的编程语言和计算平台。由詹姆斯高斯林&#xff08;James Gosling&#xff0c;后来被称为Java之父&#xff09;和他的同事们共同研发。后来&#xff0c;Sun 公司被 Oracle&#xff08;甲骨文&#…

【list】list库介绍 + 简化模拟实现

本节博客先对list进行用法介绍&#xff0c;再在库的基础上简化其内容和形式&#xff0c;简单进行模拟实现&#xff0c;有需要借鉴即可。 目录 1.list介绍1.1 list概述1.2相关接口的介绍 2.简化模拟实现3.各部分的细节详述3.1结点3.2迭代器细节1&#xff1a;迭代器用原生指针还是…

【动态规划】斐波那契数列模型(C++)

目录 1137.第N个泰波那契数 解法&#xff08;动态规划&#xff09; 算法流程 1. 状态表⽰&#xff1a; 2. 状态转移⽅程&#xff1a; 3. 初始化&#xff1a; 4. 填表顺序&#xff1a; 5. 返回值&#xff1a; C算法代码 优化&#xff1a; 滚动数组 测试&#xff1a; …