【教学类-58-10】黑白三角拼图08(参考图+操作卡+黑白块,适合个别化)

bb22efa043144395827c84071d38fa33.png

背景需求:

前期做了一套适合集体操作的绘画“黑白三角”

【教学类-58-09】黑白三角拼图07(1页3张黑白的白点卡片,一种宫格36张,适合一个班级一次操作)-优快云博客文章浏览阅读1k次,点赞30次,收藏7次。【教学类-58-09】黑白三角拼图07(1页3张黑白的白点卡片,一种宫格36张,适合一个班级一次操作)https://blog.youkuaiyun.com/reasonsummer/article/details/1393813829319e6882a094b44a5e29f396a6e937c.png

在小红书上的销售量最大

c904856932e24572bb1bd25e0f80d447.png

虽然有三款选择(黑白黏连、黑白有点、彩色有点),但是客户普遍选择基础款的“黑白黏连””

eec83ea13af64623b50772d0bd1cb687.png

昨天有一位客户求购后,提出新的需求:

297144d55e254b378ea6e5d1ab2334c0.png

客户觉得“左参考图右操作版”的样式打印太浪费纸

f4c97c84bc4f4a449a5e7d607e84828e.png客户以前购买我设计的三角图层

【教学类-55-03】20240512图层顺序挑战(三角形版)(6块三角形,49种叠放顺序)-优快云博客文章浏览阅读1.1k次,点赞32次,收藏16次。【教学类-55-03】20240512图层顺序挑战(三角形版)(6块三角形,49种叠放顺序)https://blog.youkuaiyun.com/reasonsummer/article/details/138732291

5a7d740ed6f247d49cdf4512cac9ba42.png

41e5471cd0314c73ae3e0b67e669867f.png

客户希望能将“黑白三角参考图”单独做一份,空白格子底板和黑白三角块单独做一份,就是个别化学具(1-2人操作)

于是我微调了代码,并调试了word模板

510a8eabc99a4440b0780dcb9914e391.png

操作底板

48536e068c18482981976b24292c580a.png

80aa4101de804fa5a370324ae92b1535.png

参考图模版

57e3ce2130f24368a97db0d450f6320c.png

代码展示

'''

黑白三角图,2宫格36张,3宫格36张……适合个别化

随机图片
AI对话大师,阿夏
2024年8月16日

'''
import os,time
from PIL import Image, ImageDraw
from docx import Document
from docx.shared import Cm
from docx.shared import Pt
import shutil
import os
from PyPDF2 import PdfFileMerger  

# 几张(每张6图)
zhagnshu=6
# 起始宫格数
start=3
# 最大宫格数
end=10

path = r'C:\Users\jg2yXRZ\OneDrive\桌面\黑白三角单人款'


for gongge in range(start,end+1): # 遍历3宫格到10宫格
    for ys in range(zhagnshu,zhagnshu+1):
      
        new = path + fr'\{gongge:02}宫格组合图片'
        os.makedirs(new, exist_ok=True)
        radius = 5
        f = 6 * ys  # 一页6张

        b = 400  # 画布大小
        by = 10  # 边距

        print('----------1\制作白色操作图------------')
        for g in range(gongge,gongge+1):
            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)

                # 绘制每个单元格的左上角、右上角、左下角、右下角的黑色圆形
                
                for i in range(rows):
                    for j in range(cols):
                        left = margin + j * cell_width
                        upper = margin + i * cell_height
                        right = left + cell_width
                        lower = upper + cell_height

                # 保存画布
                mb = f'{g:05d}格模板.png'
                canvas.save(new + 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 os

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

                print('---3、制作三个坐标点的黑色三角形(4个)-------')
                from PIL import Image, ImageDraw            
                # 定义要绘制的坐标点组合
                
                for point_combination in combinations:
                    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 = 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)
                    color=['black','black']
                    # 遍历每个坐标点组合
                    for combination in selected_points:
                        # 绘制填充为黑色的多边形
                    
                        # draw.polygon(combination, fill='black',outline=(255, 255, 255), width=1)
                        draw.polygon(combination, fill=random.choice(color), outline=(0, 0, 0), width=2)

        

                    # 绘制每个单元格的左上角、右上角、左下角、右下角的黑色圆形
                
                    # 保存结果图像
                    canvas.save(new + fr'\{g:05d}格{c:05d}01图纸{c:05d}.png')
                    
                    canvas.close()  # 关闭图像文件
        
                            
        

        print('----4、贴图用黑色色块----------')
        canvas = Image.new('RGB', (b, b), (255, 255, 255))
        draw = ImageDraw.Draw(canvas)

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

        for i in range(rows + 1):
            y = margin + i * cell_height
            draw.line([(margin, y), (b - margin, y)], fill='black', width=2)

        # 在每个单元格中绘制两个三角形
        for row in range(rows):
            for col in range(cols):
                left = margin + col * cell_width
                upper = margin + row * cell_height
                right = left + cell_width
                lower = upper + cell_height

                # 随机选择三个顶点坐标
                points = [(left, upper), (right, upper), (left, lower), (right, lower)]
                # random.shuffle(points)
                triangle1 = tuple(points[0:3])
                triangle2 = tuple(points[1:4])

                # 绘制三角形
                # 全部黑填充,白色边框
                draw.polygon(triangle1, fill='black',outline='white',width=2)
                draw.polygon(t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿夏reasonsummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值