作品展示
背景需求
空间思维图层挑战2|逻辑推理|空间想象力 - 小红书 (xiaohongshu.com)https://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