【教學類-58-03】黑白三角拼圖03(4*4宮格)總數算不出+隨機抽取10張

背景需求:

【教學類-58-01】黑白三角拼圖01(2*2宮格)256種-CSDN博客文章瀏覽閱讀318次,點贊10次,收藏12次。【教學類-58-01】黑白三角拼圖01(2*2宮格)256種https://blog.csdn.net/reasonsummer/article/details/139173885

【教學類-58-02】黑白三角拼圖02(3*3宮格)262144種-CSDN博客文章瀏覽閱讀136次,點贊7次,收藏7次。【教學類-58-02】黑白三角拼圖02(3*3宮格)262144種https://blog.csdn.net/reasonsummer/article/details/139176570?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139176570%22%2C%22source%22%3A%22reasonsummer%22%7D

?我嘗試過2*2是256,3*3是262114,? 想制作 4*4。

4*4的的排列方式太多了,程序內存不夠計算。出現MomeryError,只能放棄。

?

代碼(內存不夠計算)

'''
黑白三角(4*4), 16個單元格每個有四個坐標,四個坐標隨機抽取3個,進行組合,共有262144種不重復排序,帶邊距
因為有26萬種,所以把圖片做的90,但是太多了,無法計算
像素小一點  生成時間15:34-16:02
AI對話大師,阿夏
2024年5月24日'''from PIL import Image, ImageDrawb=90
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\黑白三角'# 創建bxb的畫布
canvas = Image.new('RGB', (b,b), (255, 255, 255))
draw = ImageDraw.Draw(canvas)# 定義表格的行數和列數
rows = 4
cols = 4
margin = 5# 計算單元格的寬度和高度
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 = '4格模板.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)

因此需要我想隨機抽取10張4*4的圖片,但要保證隨機抽的圖案不能相同)

'''
黑白三角(4*4), 16個單元格每個有四個坐標,四個坐標隨機抽取3個,進行組合,自動抽取10張,帶邊距
隨機圖片
AI對話大師,阿夏
2024年5月24日'''from PIL import Image, ImageDraw
f=10 # 需要10份
b=800 # 畫布大小
g=4 # 宮格數
by=50 # 邊距path = r'C:\Users\jg2yXRZ\OneDrive\桌面\黑白三角'# 創建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_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}格模板.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)
# 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 oscombinations=[]
# 存儲選取的點,隨機生成坐標(樣式)排除重復,生成10份樣式不同的模版
while len(combinations) < f: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# # 生成所有組合方式,太多了,生成不出來
# combinations = lisitertools.product(*[itertools.combinations(sublist, 3) for sublist in cell_coordinates]))
# # print(combinations)
# print(len(combinations))
# # 262144print('---3、制作三個坐標點的黑色三角形(4個)-------')
from PIL import Image, ImageDrawnew = path + fr'\{g}宮格組合圖片'
os.makedirs(new, exist_ok=True)m = 1
# 定義要繪制的坐標點組合
for point_combination in combinations:print(point_combination)# 清空selected_points列表selected_points = []# 遍歷每個坐標點組合for combination in point_combination:# 從每個列表中隨機選取三個點,并加入到selected_points中selected_points.append(tuple(random.sample(combination, 3)))# 讀取圖像文件image = Image.open(path + fr'\{mb}')# 創建繪圖對象draw = ImageDraw.Draw(image)# 遍歷每個坐標點組合for combination in selected_points:# 繪制填充為黑色的多邊形draw.polygon(combination, fill="black")# 保存結果圖像image.save(new + fr"\{m:03d}.png")image.close()  # 關閉圖像文件m += 1print('---4合并打印------')# 第3步,讀取圖片寫入docx,合并PDFimport 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列兩個都是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}.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'\黑白三角{g}宮格隨機{f}張(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)

4*4樣式數以億計算,所以只能隨機抽一些不重復的圖案

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/14836.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14836.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/14836.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Jmeter】使用Jmeter進行接口測試、跨線程組獲取參數

Jmeter接口測試 Jmeter設置成中文實操練習-跨線程組提取參數&#xff0c;使用值HTTP請求默認值&HTTP信息頭管理器 相信打算從事測試工程師的同學們&#xff0c;肯定對Jmeter是耳熟能詳的。使用Jmeter可以進行接口測試、性能測試、壓力測試等等&#xff1b;這個章節介紹如何…

Cisco Catalyst 9000 9200 9300 9400 IOS software upgrade

1 背景 從Catalyst 3650 ,3850&#xff0c;Catalyst 9000開始, 更準確的說是IOS XE的交換機的系統鏡像安裝方式分為2種 ? Bundle mode ? Install mode 這2種方工啥區別&#xff1f; Bundle mode 傳統方式利用boot system flash:c9k.xx16.bin方式引導 Install mode 將bin文…

用友 存貨分類按層級取數SQL語句

SELECT cInvCCode 分類編碼, cInvCName 分類名稱, iInvCGrade 分類層級, ss.bInvCEnd 是否是末級, aa.* FROM InventoryClass ss LEFT JOIN ( SELECT * FROM ( SELECT cInvCCode AS 一級分類編碼, …

cocos 通過 electron 打包成 exe 文件,實現通信問題

cocos 通過 electron 打包成 exe 文件&#xff0c;實現通信問題 首先&#xff0c;我使用的 cocos 版本是 2.4.12&#xff0c;遇到一個問題&#xff0c;是啥子呢&#xff0c;就是我要把用 cocos 開發出來的項目打包成一個 exe 可執行程序&#xff0c;使用的是 electron &#xf…

【C++算法】BFS解決多源最短路問題相關經典算法題

1.01矩陣 既然本章是BFS解決多源最短路問題&#xff0c;也就是說有若干個起點&#xff0c;那我們就可以暴力一點&#xff0c;直接把多源最短路徑問題轉化成若干個單源最短路徑問題&#xff0c;然后將每次的步數比較一下&#xff0c;取到最短的就是最短路徑的結果&#xff0c;這…

arcgis 10.6 工具欄操作error 001143 后臺服務器拋出異常

arcgis 10.6 工具欄操作error 001143 后臺服務器拋出異常 環境 win10arcgis 10.6 問題 執行定義投影要素轉線出現 Error: 001143:后臺服務器拋出異常&#xff08;差點重裝10.6&#xff09; 如下圖所示&#xff1a; 解決方法 通過在菜單工具條上單擊地理處理 > 地理處…

設計模式使用(成本扣除)

前言 名詞解釋 基礎名詞 訂單金額&#xff1a;用戶下單時支付的金額&#xff0c;這個最好理解 產品分成&#xff1a;也就是跟其他人合做以后我方能分到的金額&#xff0c;舉個例子&#xff0c;比如用戶訂單金額是 100 塊&#xff0c;我方的分成是 80%&#xff0c;那么也就是…

OceanMind海睿思通過上海數交所數商認證,提供高質量數據治理和數據咨詢服務

近日&#xff0c;中新賽克海睿思成功通過上海數據交易所的數商認證&#xff0c;獲得上海數據交易所頒發的“數據產品開發服務商”、“數據治理服務商”和“數據咨詢服務商”三大證書。 作為由深圳市創新投資集團有限公司投資控股的高新技術企業&#xff0c;國家級專精特新“小巨…

如何通過OpenHarmony的音頻模塊實現錄音變速功能?

簡介 OpenAtom OpenHarmony&#xff08;以下簡稱“OpenHarmony”&#xff09;是由開放原子開源基金會孵化及運營的開源項目&#xff0c;是面向全場景、全連接、全智能時代的智能物聯網操作系統。 多媒體子系統是OpenHarmony系統中的核心子系統&#xff0c;為系統提供了相機、…

2024-05-24 問AI: 在深度學習中,什么是L1 正則化和L2 正則化?

文心一言 在深度學習和機器學習中&#xff0c;正則化是一種用于防止模型過擬合的技術。它通過向損失函數添加一個懲罰項來實現&#xff0c;這個懲罰項與模型的復雜度有關。正則化項可以看作是對模型參數的約束&#xff0c;使得模型在訓練時不僅關注于最小化訓練誤差&#xff0…

Java入門基礎學習筆記43——包

什么是包&#xff1f; 包是用來分門別類的管理各種不同程序的&#xff0c;類似文件夾&#xff0c;建包有利于程序的管理和維護。 建包的語法規則&#xff1a; package cn.ensource.javabean;public class Car() {} 在自己的程序中調用其他包下的程序的注意事項&#xff1a; 1…

動手學深度學習——層和塊

1. 層 層是一個將輸入數據轉換為輸出數據的神經網絡組件。每個層都會對輸入數據進行一定的操作&#xff0c;例如線性變換、非線性激活函數等&#xff0c;以產生輸出數據。 torch.nn模塊提供了各種預定義的層&#xff0c;如線性層、卷積層、池化層等&#xff0c; nn.Linear&a…

BLE學習筆記(0.0) —— 基礎概念(0)

前言 &#xff08;1&#xff09;本章節主要是對BLE技術進行簡單的介紹&#xff0c;熟悉藍牙技術的發展過程&#xff0c;了解相關術語方便后續的學習。 &#xff08;2&#xff09;為了防止單篇博客太長以至于看不下去&#xff0c;因此我基礎概念章節分為兩篇來寫。 &#xff08;…

直播回放| 機器人任務挑戰賽線上培訓資料合集

大賽培訓回顧 5月22日&#xff0c;卓翼飛思實驗室為全國各賽區精心組織的機器人任務挑戰賽&#xff08;無人協同系統&#xff09;線上培訓第三期順利落下帷幕&#xff0c;吸引300余人參與。本次培訓主要針對仿真平臺的基本使用&#xff0c;從仿真平臺獲取激光雷達/視覺數據&am…

Mysql教程(0):學習框架

1、Mysql簡介 MySQL 是一個開放源代碼的、免費的關系型數據庫管理系統。在 Web 開發領域&#xff0c;MySQL 是最流行、使用最廣泛的關系數據庫。MySql 分為社區版和商業版&#xff0c;社區版完全免費&#xff0c;并且幾乎能滿足全部的使用場景。由于 MySQL 是開源的&#xff0…

選擇排序,改進冒泡排序,快速排序的查找和計數排序

簡單選擇排序 數據結構:單鏈表 實現方法:n為鏈表長度, 第1趟先選出1到n-1個元素中的最小值和0號元素交換, 第2趟從2到n-1號元素選出最小值和1號元素交換, … 第n-2趟從n-2到n-1號元素中選出最小值和n-2號元素交換. 第n-1趟n-1號元素即為最小值。比較結束。 代碼:…

1075: 求最小生成樹(Prim算法)

解法&#xff1a; 總結起來&#xff0c;Prim算法的核心思想是從一個頂點開始&#xff0c;一步一步地選擇與當前最小生成樹相鄰的且權值最小的邊&#xff0c;直到覆蓋所有的頂點&#xff0c;形成一個最小生成樹。 #include<iostream> #include<vector> using names…

算法-跳馬

bfs類的應用題。 解法&#xff1a; 每一個點都可能作為匯集的那個點&#xff0c;因此采用遍歷的方式&#xff0c;對每個點進行處理&#xff0c;得出每個點的“所有馬跳到本點的最小步數和“&#xff0c;取最小值即可。 邏輯1&#xff1a;以該點作為源點出發&#xff0c;求處…

springboot基于Web前端技術的java養老院管理系統_utbl7

3.普通用戶模塊包括&#xff1a;普通會員的注冊、養老院客房查詢、養老院留言查詢、預約老人基本信息登記、選擇房間、用戶繳費的功能。 4.數據信息能夠及時進行動態更新&#xff0c;增刪&#xff0c;用戶搜素方便&#xff0c;使用戶可以直接瀏覽相關信息&#xff0c;要考慮便于…

Vue3實戰筆記(35)—集成炫酷的粒子特效

文章目錄 前言一、vue3使用tsparticles二、使用步驟總結 前言 學習一個有趣炫酷的玩意開心一下。 tsparticles&#xff0c;可以方便的實現各種粒子特效。支持的語言框架也是相當的豐富. 官網&#xff1a;https://particles.js.org/ 一、vue3使用tsparticles 先來個vue3使用…