【教学类-55-01】20240511图层顺序挑战(四格长条纸)(4*4)和“手工纸自制参考图”

作品展示

背景需求

空间思维图层挑战2|逻辑推理|空间想象力 - 小红书 (xiaohongshu.com)icon-default.png?t=N7T8https://www.xiaohongshu.com/discovery/item/62cbf6c60000000010026aa0?app_platform=android&ignoreEngage=true&app_version=8.35.0&share_from_user_hidden=true&type=video&author_share=1&xhsshare=WeixinSession&shareRedId=ODszMTs4Nk82NzUyOTgwNjg3OTlHS0xC&apptime=1715478298

我分析一下,这种4*4的格子,横向4或3条长条纸,纵向3或4条长条纸,一共7条不同颜色的四格长纸条。

这么复杂的代码,当然用AI来写了。请AI对话大师,反复写代码的过程用了大概用了1天。

代码展示:

'''
项目:图层顺序挑战-四格长条纸(7张),4*4单元格随机叠放顺序
作者:AI对话大师,阿夏
时间:20240511
'''



from PIL import Image, ImageDraw
import os,random
import itertools


print('--------1、制作图片-----------')
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条'

folder_path = path + r'\jpg'
os.makedirs(folder_path, exist_ok=True)

colors = ['red', 'Yellow', 'green', 'orange', 'lightgreen', 'skyblue','Pink']

for ii in range(1,25):
    
    
    # 创建画布
    canvas_width = 800 
    canvas_height = 800
    canvas_color = (255, 255, 255)  # 白色背景
    line_color = (0, 0, 0)  # 黑色线条
    line_width = 0
    margin = 100  # 边距

    canvas = Image.new('RGB', (canvas_width, canvas_height), canvas_color)
    draw = ImageDraw.Draw(canvas)

    # 计算单元格大小和绘制区域
    num_rows = 4
    num_cols = 4
    cell_size = min((canvas_width - 2 * margin) // num_cols, (canvas_height - 2 * margin) // num_rows)
    start_x = (canvas_width - cell_size * num_cols) // 2
    start_y = (canvas_height - cell_size * num_rows) // 2

    
    # rowcol_all=[]
    row1=[]
    for a1 in range(0,num_rows):
        row1.append(a1)   
    # print(row1)     
    row2 = random.sample(row1, 4)
    # print(row2)
    row3 = random.sample(row1, 3)
    # print(row3)

    rowcol_all=row2+row3

    # 随机颜色
    color = random.sample(colors,7)
    print(color)

   # 绘制单元格和正方形,并填充颜色
    for row in range(num_rows):
        for col in range(num_cols):
            x = start_x + col * cell_size
            y = start_y + row * cell_size
            square_size = cell_size            
            
               # 前行4 后列3
                       # 2      
            if row == rowcol_all[0]:  # 第2行填充红色
                square_color = color[0]
            if col == rowcol_all[4]:  # 第1列填充黄色
                square_color = color[1]
            if row == rowcol_all[1]:  # 第3行填充紫色
                square_color = color[2]
            if col == rowcol_all[5]:  # 第2列填充黑色
                square_color = color[3]
            if row == rowcol_all[2]:  # 第1行填充粉色
                square_color = color[4]
            if col == rowcol_all[6]:  # 第4列填充蓝色
                square_color = color[5]
            if row == rowcol_all[3]:  # 第4行填充绿色
                square_color = color[6]
                
            draw.rectangle([(x, y), (x + square_size, y + square_size)], fill=square_color, outline=line_color, width=line_width)

    # 保存图像彩色图片
    canvas.save(folder_path + fr'\{ii:02d}.png')
    rowcol_all.clear()

print('--------2、png 合并pdf-----------')
import os
from PIL import Image
from reportlab.lib.pagesizes import A4
from reportlab.lib.utils import ImageReader
from reportlab.pdfgen import canvas

# 获取文件夹中的所有PNG图片文件
image_files = [file for file in os.listdir(folder_path) if file.endswith('.png')]

# 创建一个新的PDF文件
pdf_file = path + r'\重叠纸条底图.pdf'  # 替换为实际的输出PDF文件路径
c = canvas.Canvas(pdf_file, pagesize=A4)

# 遍历每个PNG图片文件并将其添加到PDF中
for image_file in image_files:
    image_path = os.path.join(folder_path, image_file)
    image = Image.open(image_path)
    image_reader = ImageReader(image)
    c.setPageSize(A4)
    c.drawImage(image_reader, 0, 0, width=A4[0], height=A4[1])
    c.showPage()

# 保存并关闭PDF文件
c.save()

终端显示:

结果呈现

虽然做了图片合并PDF,但是我没有打印。

一、制作参考图:

问题:本来参考图想用彩色打印的,但是比较浪费墨,放弃

解决1:用蜡笔涂色——不一定正好有打印的7种颜色、蜡笔画的边线不整齐,放弃

解决2:用丙烯马克笔——不一定正好有打印的7种颜色、画笔费墨(容易用光颜色)涂色容易出线框。

解决3:用彩色手工纸——先用裁纸机将切好纸片大小,然后黏贴。

小结:用彩色手工纸拼贴参考图,确保了7种颜色的统一性。不涂色,不裁剪,精准性、美观性更强。

二、制作参考图的空白模板

首先需要有一个空白模板,我生成24张图片,就预设A4一页上有6个参考图

代码展示:

'''
项目:图层顺序挑战-四格长条纸4*4单元格空白模板制作,顶部有题目序号
作者:AI对话大师,阿夏
时间:20240511
'''

import os,time
import shutil
from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn
from PyPDF2 import PdfMerger

def set_font(run, font_name):
    rPr = run._r.get_or_add_rPr()
    rFonts = rPr.get_or_add_rFonts()
    rFonts.set(qn('w:eastAsia'), font_name)

path = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条'
folder_path = os.path.join(path, 'jpg')  # 文件夹路径

name = []

# 遍历文件夹中的所有文件
for filename in os.listdir(folder_path):
    # 判断文件是否为图片文件
    if filename.endswith('.jpg') or filename.endswith('.jpeg') or filename.endswith('.png'):
        # 输出图片文件的名称
        n = f'空间思维(4格)-{filename[:-4]}(     )'
        name.append(n)

# 将名称列表分成每组6个元素
name_groups = [name[i:i+6] for i in range(0, len(name), 6)]
print(name_groups)

# 读取模板.docx的第一个表格
doc_path = os.path.join(path, '模板.docx')
doc = Document(doc_path)
table = doc.tables[0]

out_path = os.path.join(path, 'lingshi')
os.makedirs(out_path, exist_ok=True)

# 添加自定义字体
custom_font_path = r"C:\Windows\Fonts\simhei.ttf"  # 替换为正确的字体文件路径
font_name = "SimHei"  # 替换为正确的字体名称 
doc.styles['Normal'].font.name = font_name

# 在指定单元格插入文本
rows = [0, 0, 5, 5, 10, 10]
cols = [0, 4, 0, 4, 0, 4]

for texts in range(len(name_groups)):
    for i in range(len(rows)):
        row = rows[i]
        col = cols[i]
        text = name_groups[texts][i]

        cell = table.cell(row, col)
        cell.text = text

        # 设置文本样式
        paragraph = cell.paragraphs[0]
        run = paragraph.runs[0]
        run.font.name = font_name
        run.font.bold = True
        run.font.size = Pt(12)
        paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

  



    from docx2pdf import convert

    # 将已存在的DOCX文件另存为PDF
    new_doc_path = os.path.join(out_path, f'{texts+1:02d}.docx')
    doc.save(new_doc_path)

    pdf_path = os.path.join(out_path, f'{texts+1:02d}.pdf')
    convert(new_doc_path, pdf_path)
    time.sleep(1)


from PyPDF2 import PdfFileMerger
import shutil

# 获取out_path文件夹中的所有PDF文件路径
pdf_files = [file for file in os.listdir(out_path) if file.endswith('.pdf')]

# 创建一个PdfFileMerger对象
merger = PdfFileMerger()

# 逐个添加PDF文件到合并器中
for file in pdf_files:
    pdf_path = os.path.join(out_path, file)
    merger.append(pdf_path)

# 执行合并操作并保存为新的PDF文件
merged_pdf_path = os.path.join(path, '(重叠纸条4宫格24张.PDF')
merger.write(merged_pdf_path)
merger.close()

# 删除out_path文件夹及其内容
shutil.rmtree(out_path)

生成结果

幼儿自制图层挑战(长条)参考图

时间::2024年5月11日(周六)

班级:中4

人数:2人(传染病隔离)

1、材料准备:

把空白参考图打印,切割成小张

2、切割手工纸1(做题时的大号纸条)

2、切割手工纸2(做参考图时的小号纸条)

15Cm纸条切成8和7,宽度都是2CM

二、幼儿制作:

24张参考图都完成后,参考图和操作彩色纸条都进行塑封和裁剪(圆角),

存在问题:

1、叠放顺序相同:

在幼儿用小纸片黏贴参考图的过程中,我发现有两张图片的叠放顺序相同

因此代码需要进一步研究,排除重复

2

2、只有4行3列填充样式

3、无法增加一整个矩形框(边框线条粗细0)

目前代码显示都是一个单元格的颜色填充,如果添加边框粗细2磅,会是一个单元格出现黑色边框,而不是整个一行或一列加上一整条黑色边框。

我想要的效果是一下这样的:

思路:通过查找行列第1格的“左上角坐标”画一个新的矩形填充颜色,层层叠加。

后续重点:

1、排除重复的重叠方式

2、色块做成长矩形

  • 34
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿夏reasonsummer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值