【教学类-58-04】黑白三角拼图04(2-10宫格,每个宫格随机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图
随机图片
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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通过扩展指令增强基于覆盖引导的模糊测试

本文由Bruno Oliveira于2024年4月25日发表于IncludeSec的官方网站上。作为IncludeSec的安全研究人员&#xff0c;在他们日常的安全审计和渗透测试工作中&#xff0c;有时需要为客户开发一些模糊测试工具。在安全评估方法中使用模糊测试技术&#xff0c;可以有效地在复杂的现代化…

全免费的数据恢复工具哪个好?分享2024年性价比超高的12款数据恢复软件!

当您丢失重要文件时&#xff0c;您应该可不想遇到措手不及的情况吧&#xff1f;相反&#xff0c;您需要在系统中使用一些可靠的数据恢复软件&#xff0c;但是全免费的数据恢复工具哪个好呢&#xff1f;别担心&#xff0c;本文将帮助您选择最适合您的解决方案。 如何挑选一款合适…

QT常量中有换行符

头文件添加&#xff1a; #pragma execution_character_set("utf-8")

我用LLaMA-Factory微调大模型来实现商品评论情感分析,准确率高达91.70%

大家好&#xff0c;我是程序锅。 最近在modelscope上闲逛的时候&#xff0c;在数据集板块发现有一个商品评论情感预测数据集。这个数据集源自一个比赛&#xff0c;它的目的是为了预测电商平台顾客的评论是好评还是差评。 数据示例如下所示&#xff08;其中0代表差评&#xff…

【YOLOv10训练教程】如何使用YOLOv10训练自己的数据集并且推理使用

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【二叉树】力扣OJ题

文章目录 前言1. 翻转二叉树1.1 题目1.2 解题思路1.3 代码实现1.4 时空复杂度 2. 对称二叉树2.1 题目2.2 解题思路2.3 代码实现2.4 时空复杂度 3. 平衡二叉树3.1 题目3.2 解题思路3.3 代码实现3.4 时空复杂度 结语 前言 本篇博客主要介绍二叉树的经典 OJ 题&#xff0c;题目主…

间接平差——以水准网平差为例 (python详细过程版)

目录 一、原理概述二、案例分析三、代码实现四、结果展示本文由CSDN点云侠原创,间接平差——以水准网平差为例 (python详细过程版),爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、原理概述 间接平差的函数模型和随机模型…

算法与数据结构汇总

刷题建议步骤 求职硬通货&#xff1a;一&#xff0c;好的学历&#xff0c;这个要下血本。本科&#xff0c;可以考研&#xff0c;读研。专科&#xff0c;可以专升本&#xff0c;再考研&#xff0c;读研&#xff0c;二&#xff0c;软考&#xff0c;一年考两次&#xff0c;有些科…

MySQL:表的约束

文章目录 0.小知识&#xff0c;数据转化1.空属性(非空约束)2.默认值&#xff08;default&#xff09;3.comment&#xff08;列描述&#xff09;4.zerofill(显示约束)5.primary key(主键约束)6.auto_increment(自增长)7.unique(唯一键)8.foreign key (外键)9.综合表结构的设计 表…

Android 版本与 API level 以及 NDK 版本对应

采用 Android studio 开发 Android app 的时候&#xff0c;需要选择支持的最低 API Level 和使用的 NDK 版本&#xff0c;对应开发 app 的最低 SDK 版本&#xff1a; 在 app 的 build.gradle 文件里&#xff0c;对应于代码如下&#xff1a; 目前各版本的占有率情况如下&#xf…

docker不删除容器更改其挂载目录

场景&#xff1a;docker搭建的jenkins通常需要配置很多开发环境&#xff0c;当要更换挂载目录&#xff0c;每次都需要删除容器重新运行&#xff0c;不在挂载目录的环境通常不会保留。 先给一个参考博客docker不删除容器&#xff0c;修改容器挂载或其他_jenkins 修改容器挂载do…

电子电器架构 - AUTOSAR软件架构Current Features in a Nutshell

电子电器架构 - AUTOSAR软件架构Current Features in a Nutshell 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的…

Gradle的settings.gradle.kts你真的理解吗?

你还在用.gradle文件吗&#xff1f;例如build.gradle、settings.gradle&#xff0c;那么你就out了。现在我们有必要了解一下kts脚本了。在Android项目中&#xff0c;默认有3个文件可以替换成kts脚本&#xff0c;即project的build.gradle、app模块的build.gradle和project的sett…

数据库(5)——DDL 表操作

表查询 先要进入到某一个数据库中才可使用这些指令。 SHOW TABLES; 可查询当前数据库中所有的表。 表创建 CREATE TABLE 表名( 字段1 类型 [COMMENT 字段1注释] ...... 字段n 类型 [COMMENT 字段n注释] )[COMMENT 表注释]; 例如&#xff0c;在student数据库里创建一张studen…

哈希表---闭散列

闭散列 当我们用哈希函数的时候&#xff0c;其中一个就是除留余数法 取这个表的长度len,按照哈希函数&#xff1a;Hash(key) key% len,将这个位置映射到表中 通过上面的除留余数法&#xff0c;会有哈希碰撞的问题&#xff0c;可以通过闭散列来解决 闭散列也叫开放定址法&am…

Django与前端框架协作开发实战:高效构建现代Web应用

title: Django与前端框架协作开发实战&#xff1a;高效构建现代Web应用 date: 2024/5/22 20:07:47 updated: 2024/5/22 20:07:47 categories: 后端开发 tags: DjangoREST前端框架SSR渲染SPA路由SEO优化组件库集成状态管理 第1章&#xff1a;简介 1.1 Django简介 Django是一…

新加坡多ip服务器在跨境电商中有哪些优势?

新加坡多IP服务器**在跨境外贸业务中具有明显的优势&#xff0c;适合需要高性能和网络稳定性的业务场景。Rak部落小编为您整理发布新加坡多ip服务器在跨境电商中有哪些优势? 以下是一些具体的优势&#xff1a; 1. **地理位置优越**&#xff1a;新加坡作为亚太地区的国际商业和…

mysql图形化界面及将mysql注册成后台程序

安装图形化界面版本 右键新建数据库 字符集使用utf8防止以后数据库中存在中文字符导致乱码 将mysql注册成后台程序 cmd进入命令行界面 切换路径到cd /mysql/bin 将mysql注册成后台程序 mysqld.exe --install mysql1 (失败&#xff0c;说明没有权限) 以管理员身份打开成功…

R语言:Mantel Test分析与绘图

Mantel Test 1.什么是Mantel Test2. R语言代码13. R语言代码2 1.什么是Mantel Test Mantel test分析对两个矩阵相关关系进行检验。可以用在生态学上&#xff0c;用来检验群落距离矩阵(如 Bray-Curtis distance matrix)和环境变量距离矩阵(如 pH, 温度 或者地理位置的差异矩阵)之…

MySQL——MySQL目录结构

MySQL安装完成后&#xff0c;会在磁盘上生成一个目录&#xff0c;该目录被称为MySQL的安装目录。在MySQL的安装目录中包含了启动文件、配置文件、数据库文件和命令文件等。 下面对 MySQL 的安装目录进行详细讲解 (1)bin 目录 : 用于放置一些可执行文件,如 mysql.exe、mysqld. …