【教学类-64-05】20240625彩棒鱼骨图(二)AB排列 6.5*1CM 6选2根 30种

背景需求:

【教学类-64-04】20240619彩棒鱼骨图(一)6.5*1CM 6根棒子720种-CSDN博客文章浏览阅读897次,点赞23次,收藏13次。【教学类-64-04】20240619彩棒鱼骨图(一)6.5*1CM 6根棒子720种https://blog.csdn.net/reasonsummer/article/details/139813897?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139813897%22%2C%22source%22%3A%22reasonsummer%22%7D

前期制作了6根彩色冰棍棒的不重复排列720种。

本次想制作ABAB的排序方式。

也就是从6种颜色中任意选择2个颜色*3,测算发现6选2一共有30种不重复的排列。

'''
冰棍棒六色720种 鱼骨图 红橙黄绿蓝紫 AB排序系列6抽2不重复30种 短款)6.5*1(长款) 11.5*1 大号(15*1.8) -乱序
时间:2024年6月26日
作者:星火讯飞 阿夏

'''
from PIL import Image, ImageDraw
import os,random
from PIL import ImageFont

path=r'C:\Users\jg2yXRZ\OneDrive\桌面\鱼骨图'
new_path=path+r'\01jpg(6.5乘1)'
os.makedirs(new_path,exist_ok=True)

# nnn=int(input('1.固定、2、随机'))

name='6.5乘1'

print('-----1、制作图卡--------')
# 六色所有排序方式 720种
import itertools
colors = ['01red', '02orange', '03yellow', '04green', '05blue', '06purple']
# 使用itertools.permutations生成所有不重复排序方式
combinations = list(itertools.permutations(colors,2))
result = sorted(combinations)

print(result)
print(len(result))# 30种

# 每个()元祖里的内容乘以3
perms = [t * 3 for t in result]
print(perms)


# # 打乱
# random.shuffle(perms)
# print(perms)
# print(len(perms))
# 720个不重复的方法
# 720有几位数(个数)

num_digits = len(str(len(perms)))
# 30
print(num_digits)
# 720就是3位数

for a in range(len(perms)):
        # 打开图片
    image = Image.open(path+r'\鱼骨图.jpg')
    # 创建一个800*600的画布
    long=844
    wide=378
    s=6
    # 6根棒子

    canvas = Image.new('RGB', (long, wide), 'white')
    draw = ImageDraw.Draw(canvas)

    # 定义圆角矩形的参数

    # 棒子的圆心
    radius = 20
    # 左侧间距
    left = 220
    #  右侧间距
    right = 180
    # 棒子的间距
    padding = 30
    # 棒子的宽
    rect_width = float((long-left-right-padding*7)/6)
    print(rect_width)
    # 40
    # 棒子的高
    rect_height = float(rect_width*6.5)

    # 棒子的高度坐标
    padding2=float((wide- rect_height-20))
    # wide-padding*2



    # 计算每个圆角矩形的位置
    rect_positions = [
        (padding+left, padding2),
        (rect_width + padding * 2+left, padding2),
        (rect_width * 2 + padding * 3+left, padding2),
        (rect_width * 3 + padding * 4+left, padding2),
        (rect_width * 4 + padding * 5+left, padding2),
        (rect_width * 5 + padding * 6+left, padding2)
    ]


    colors = perms[a]  
    #  绘制圆角矩形
    draw = ImageDraw.Draw(image)

    # 绘制圆角矩形
    for i, position in enumerate(rect_positions):
        x, y = position
        draw.rounded_rectangle([x, y, x + rect_width, y + rect_height], radius, fill=colors[i][2:], outline='black', width=1)
    
    # 设置字体路径和大小
    font_path = r'C:\Windows\Fonts\AdobeHeitiStd-Regular.otf'
    font_size = 40

    # 加载字体
    font = ImageFont.truetype(font_path, font_size)

    # 在指定位置绘制文字
    draw.text((200, 30), f'彩色鱼骨图AB({name}CM)-{a+1:03d}', font=font, fill='black')
    
    # 保存图片
    image.save(new_path + fr'\{a+1:0{num_digits}d}.png')

print('-----2、制作大图--------')
# 六色所有排序方式 720种

# 使用itertools.permutations生成所有不重复排序方式


from PIL import Image, ImageDraw
import itertools

path = r'C:\Users\jg2yXRZ\OneDrive\桌面\鱼骨图'
new_path_jpg = path + r'\02jpg(6.5乘1)'
os.makedirs(new_path_jpg, exist_ok=True)

name = '6.5乘1'

for b in range(2):
    image = Image.open(path + r'\鱼骨图.jpg')
    long = 844
    wide = 378
    s = 6
    canvas = Image.new('RGB', (long, wide), 'white')
    draw = ImageDraw.Draw(canvas)

    radius = 20
    left = 220
    right = 180
    padding = 30
    rect_width = float((long - left - right - padding * 7) / 6)
    print(rect_width)
    rect_height = float(rect_width * 6.5)
    padding2 = float((wide - rect_height - 20))

    rect_positions = [
        (padding + left, padding2),
        (rect_width + padding * 2 + left, padding2),
        (rect_width * 2 + padding * 3 + left, padding2),
        (rect_width * 3 + padding * 4 + left, padding2),
        (rect_width * 4 + padding * 5 + left, padding2),
        (rect_width * 5 + padding * 6 + left, padding2)
    ]

    colors = perms[a]
    draw = ImageDraw.Draw(image)

    # 绘制圆角矩形
    for i, position in enumerate(rect_positions):
        x, y = position
        draw.rounded_rectangle([x, y, x + rect_width, y + rect_height], radius, fill='white', outline='black', width=1)

    # 设置字体路径和大小
    font_path = r'C:\Windows\Fonts\AdobeHeitiStd-Regular.otf'
    font_size = 40

    # 加载字体
    font = ImageFont.truetype(font_path, font_size)

    # 在指定位置绘制文字
    draw.text((150, 30), f'彩色鱼骨图AB({name}CM)-操作图{b+1}', font=font, fill='black')

    # 保存图片    
    image.save(new_path_jpg + fr'\鱼骨图{name}_大图{b+1}.png')


print('-----3、图卡制作成图片格式----------')

import os
import random
from docx import Document
from docx.shared import Cm
from docx2pdf import convert
from PyPDF2 import PdfFileMerger


new_folder = path + r'\零时文件夹'
os.makedirs(new_folder, exist_ok=True)

image_files = [os.path.join(new_path, file) for file in os.listdir(new_path) if file.endswith('.png')]
# random.shuffle(image_files)

grouped_files = [image_files[i:i + 6] for i in range(0, len(image_files), 6)]

for group_index, group in enumerate(grouped_files):
    doc = Document(path + r'\鱼骨图题卡.docx')
    table = doc.tables[0]

    for cell_index, image_file in enumerate(group):
        cell = table.cell(int(cell_index / 2), cell_index % 2)
        cell_paragraph = cell.paragraphs[0]
        cell_paragraph.clear()
        run = cell_paragraph.add_run()
        run.add_picture(image_file, width=Cm(13.92), height=Cm(6.49))

    doc.save(os.path.join(new_folder, f'{group_index + 1:03d}.docx'))

pdf_output_path = path + fr'\\鱼骨图AB({name})题卡{len(perms)}张_固定顺序.pdf'
# pdf_output_path = path + fr'\\鱼骨图AB({name})题卡{len(perms)}张_随机顺序.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'))

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)

merger.write(pdf_output_path)
merger.close()

import shutil,time
shutil.rmtree(new_folder)


print('-----4、图卡制作成操作图格式----------')

import os
import random
from docx import Document
from docx.shared import Cm
from docx2pdf import convert
from PyPDF2 import PdfFileMerger


new_folder = path + r'\零时文件夹'
os.makedirs(new_folder, exist_ok=True)

image_files = [os.path.join(new_path_jpg, file) for file in os.listdir(new_path_jpg) if file.endswith('.png')]
# random.shuffle(image_files)

grouped_files = [image_files[i:i + 2] for i in range(0, len(image_files), 2)]

for group_index, group in enumerate(grouped_files):
    doc = Document(path + r'\鱼骨图操作图.docx')
    table = doc.tables[0]

    for cell_index, image_file in enumerate(group):
        cell = table.cell(int(cell_index / 1), cell_index % 1)
        cell_paragraph = cell.paragraphs[0]
        cell_paragraph.clear()
        run = cell_paragraph.add_run()
        run.add_picture(image_file, width=Cm(21.62), height=Cm(9.7))

    doc.save(os.path.join(new_folder, f'{group_index + 1:03d}.docx'))

pdf_output_path = path + fr'\\鱼骨图AB({name})操作卡2张_固定顺序.pdf'
# pdf_output_path = path + fr'\\鱼骨图AB({name})操作卡2张_随机顺序.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'))

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)

merger.write(pdf_output_path)
merger.close()
time.sleep(5)

import shutil
shutil.rmtree(new_folder)
shutil.rmtree(new_path)
shutil.rmtree(new_path_jpg)

一共有两种抽取方式

第一种是固定抽取,从"红"开始选择

我默认“红橙黄绿蓝紫”为固定顺序,这里的颜色前面加了01、02,因为如果按照字母,blue排在最前面,而不是red,就会出现乱序。

第一根棒子都是“红色”,依次配对“橙黄绿蓝紫”

最后一根棒子都是“紫色”,依次配对“红橙黄绿蓝”

操作图

 第二种是随机抽取,打乱顺序,每次出现顺序都不同

我默认“红橙黄绿蓝紫”为固定顺序,这里的颜色前面加了01、02,因为如果按照字母,blue排在最前面,而不是red,就会出现乱序。

第1次随机 001-006

第2次随机 001-006

操作图

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

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

相关文章

WordPress强大多功能主题模板The7 v9.16.0

模板介绍 The7可以与WPBakery Page Builder(原Visual Composer)和Ultimate Addons的完全无缝集成。它也与大多数流行的插件完全兼容,例如WooCommerce,WPML,Yoast SEO,All in One WP Migration,…

视觉分割的定义与性能度量

文章目录 视觉分割的定义语义分割(Semantic Segmentation)实例分割(instance Segmentation)全景分割(Panoptic Segmentation)视频语义分割(Video Semantic Segmentation)视频实例分割(Video instance Segmentation)视频全景分割(Video Panoptic Segmentation)各任务对比 视觉分…

classnames.js 优化类名的工具库

classnames.js 是什么? classnames.js 是一个简单的类名控制工具库,可以方便的通过条件动态控制class类名的显示。 官方代码及示例文档参见:GitHub - JedWatson/classnames: A simple javascript utility for conditionally joining classNames together 为什么要使用 clas…

Linux扩展lvm分区实践 -- 使用其他磁盘的空间

如图,根分区900G,计划将另一块磁盘sdb分出1T来给根分区 步骤 1:创建新的分区 sudo fdisk /dev/sdb输入 n 创建一个新分区 然后选择分区类型,输入p 设置起始扇区(默认),然后设置分区大小&…

服务器部署与DDOS攻防

知识点:DHPC与Web服务部署,DHCPig攻防,SYN Flooding测试 DHCP: 能够自动为客户机获取IP等参数 DHCP是动态主机配置协议(Dynamic Host Configuration Protocol)的缩写,它是一种网络管理协议&am…

633. 平方数之和(中等)

633. 平方数之和 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java内存溢出溢出代码正确代码与截图 1. 题目描述 题目中转:633. 平方数之和 2.详细题解 本题是167. 两数之和 II - 输入有序数组(中等)题目的变型,由两数之和变…

PS系统教程30

图层蒙版组合使用 案例介绍 全选背景图-复制背景图粘贴背景图CtrlI反选背景色填充黑色快速选区工具框柱需要素材画笔涂抹白色 步骤截图 1-3 4-5 图层蒙版与渐变工具结合使用 案例2 注意 使用PS的渐变工具覆盖全部的原因可能包括操作不当或设置错误。 操作不当&#xff1…

docker入门配置

1、创建配置镜像 由于国内docker连接外网速度慢,采用代理 vi /etc/docker/daemon.json添加以下内容 {"registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com","https://dockerproxy.com","https://hub-mirror.c.163.co…

Opencv中RotatedRect和ellipse的角度方向

版本:opencv-4.7.0-windows Opencv中,大多数时候,逆时针旋转是正方向,但在RotatedRect和ellipse中,顺时针旋转是正方向。 //RotatedRect的角度参数是顺时针为正方向 RotatedRect(const Point2f& center, const Si…

鸿蒙开发Ability Kit(程序框架服务):【FA模型切换Stage模型指导】 app和deviceConfig的切换

app和deviceConfig的切换 为了便于开发者维护应用级别的属性配置,Stage模型将config.json中的app和deviceConfig标签提取到了app.json5中进行配置,并对部分标签名称进行了修改,具体差异见下表。 表1 配置文件app标签差异对比 配置项FA模型…

交通大数据分析与挖掘实训【对提供的CSV格式数据使用pandas库分析-Matplotlib库绘图】

背景: 《交通大数据分析与挖掘》实训 指 导 书 编著 二○二四年五月 一、实训目的 1、掌握python开发环境(如Anaconda)及Numpy等常见第三方库的使用; 2、熟悉Anaconda在线编程平台,学会基本的python程序编写…

企业邮箱客服响应速度哪家好?

在选择企业邮箱的过程中,有一个点很容易被忽略,那就是企业邮箱客服的响应速度。试想,若是出现了邮件发件问题,而不能及时解决处理,可能会给企业带来很大的经济损失。今天就来对比下国内外三款企业邮箱的客服响应速度。…

typescript学习回顾(三)

今天继续来分享ts的相关概念,枚举,ts模块化,接口和类型兼容性 ts的扩展类型:类型别名,枚举,接口和类 枚举 基础概念 枚举通常用于约束某个变量的取值范围。当然字面量和联合类型配合使用,也可…

电脑开机之后屏幕没有任何显示?怎么检查?

前言 最近有很多小伙伴来咨询,自己的电脑开机之后,屏幕真的是一点显示都没有,只有CPU风扇在转。 这个情况小白经常经常经常遇到,所以写一篇关于这个问题的排查教程。按照这个教程来排查,除非真的是硬件损坏&#xff…

武汉星起航:挂牌上海股权交易中心,自营店铺销售额迎飞跃式增长

2023年10月30日,对于武汉星起航电子商务有限公司而言,无疑是一个载入史册的重要日子。这一天,公司成功在上海股权托管交易中心挂牌展示,正式登陆资本市场,开启了全新的发展篇章。这一里程碑式的跨越,不仅彰…

从写下第1个脚本到年薪40W,我的测试开发心路历程!

对于任何职业来说,薪资始终都会是众多追求的重要部分。前几年测试行业还是风口,但是随着不断新鲜血液的加入,再加上就业大环境不好,企业也都在“降本增效”。目前内卷也是越来越激烈。不得不承认当下的现状,已经不仅仅…

构建家庭NAS之二:TrueNAS Scale规划、安装与配置

本系列文章索引: 构建家庭NAS之一:用途和软硬件选型 构建家庭NAS之二:TrueNAS Scale规划、安装与配置 构建家庭NAS之三:在TrueNAS SCALE上安装qBittorrent 首先声明一下,我用的版本是TrueNAS SCALE 24.04.1.1&#xf…

打印一张A4纸多少钱?打印a4多少钱一张

在数字化日益发展的今天,打印服务依然是办公、学习和生活中不可或缺的一部分。对于广大用户来说,了解A4纸打印的价格成为选择打印服务的重要参考因素。那么,A4纸打印到底多少钱一张呢? 在琢贝云打印平台,打印价格非常实…

基于Java技术的在线学习平台系统

开头语:你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:Java技术,基于SpringBoot框架 工具:Eclipse、Navicat、M…

《计算机英语》 Unit 6 Internet 互联网

Section A Internet 互联网 The Internet is a global system of interconnected computer networks that use the standard Internet protocol suite (TCP/IP) to link several billion devices worldwide. 互联网是一个全球性的互连计算机网络系统,使用标准的互联…