背景需求:
大班《我是中国人》主题下,有一个“青花瓷”的主题,各种平面绘画
这些青花瓷花瓶、盘子都是平面的,我想能不能做个立体的,所以前期设计了“青花瓷立体卡”【教学类-77-01】20241005青花瓷立体书-CSDN博客文章浏览阅读816次,点赞12次,收藏16次。【教学类-77-01】20241005青花瓷立体书https://blog.csdn.net/reasonsummer/article/details/142715044今天我想能不能做个立体的花瓶折纸,小红书上有“瓶”“盘”“碗”的正方形折纸。
小方瓶折纸 - 小红书 (xiaohongshu.com)https://www.xiaohongshu.com/discovery/item/650035fe000000001d01553d?app_platform=android&ignoreEngage=true&app_version=8.55.6&share_from_user_hidden=true&xsec_source=app_share&type=video&xsec_token=CBUhU0QchfbzV9yFEQFM7SF8IQWt-JH4U_5iY9wsEydz0=&author_share=1&xhsshare=WeixinSession&shareRedId=ODszMTs4Nk82NzUyOTgwNjg3OTlHS0xC&apptime=1728217332&share_id=b8d441d82d224c799297ab06ea1fad60
还真的有花瓶立体折纸的,那么我就需要一张“青花瓷纹理”的手工纸。
一、通义万相下载青花瓷。
精美蓝印花布图案,白色背景、线条画、粗轮廓,清晰完整的线条、矢量,简单、大
青花瓷花纹,白色背景、简笔画,卡通,儿童插画、线条画、粗轮廓,清晰完整的线条、矢量,简单、大
一共5种尺寸都生成了,用UIBOT一次18套,下载多次
图案分类:1:1图生成后发现图案有一些规律
还有长方形的,剔除一些图案模糊的,
二、word模版
为了节省纸张,我在1图正方形和2图正方形模版下面插了长方形长条纸,
1图模版:一张正方图+1张4:3图*2次
2图模版:2张正方图+1张16:9图*3
4图大模版:1张正方图*4
4图小模版:1张正方图*2*2
6图模版:6张正方图
测试代码
长方形4:3、长方形16:9需要拼图(2拼1长条、3拼1长条),来判断长方形拼合后是否还能形成连续图案。
先用代码生成一次长方形组合图(第一张插入原图、第二张插入原图的水平翻转图),将不能组合成连续的图案剪切(黄色文件夹)
'''
青花瓷折纸1页1图、1页2图,多余部分也插入竖条图案,测试正方图和横版长方图是否连续
AI对话大师,阿夏
2024年10月01日
'''
import random
import math
from PIL import Image, ImageDraw, ImageFont
import os
# 测试图片59张
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\青花瓷'
# 范例图纸
# names='00总测试'
# input_path=path+fr'\00图片\{names}'
name1='09长方形_横版0403'
input_path1=path+fr'\00图片\{name1}'
name2='07长方形_横版1609'
input_path2=path+fr'\00图片\{name2}'
print('----1图模版:正方1+长方横16:9乘以2-,第2张横图水平翻转--')
# 2图,4:3插入2条(左右)
file_paths11 = [os.path.join(input_path1, file) for file in os.listdir(input_path1) if file.endswith('.png')]
print(len(file_paths11))
# 三图合并
pic_list_two=[]
for f in range(len(file_paths11)):
for x in range(2):
pic_list_two.append(file_paths11[f])
# 切割3分一组
pic_list_six1 = [pic_list_two[i:i+2] for i in range(0, len(pic_list_two), 2)]
print(pic_list_six1)
print('----2图模版:正方1乘以2+长方横4:3乘以3,第2张横图水平翻转---')
# 正方图2张1分
# 2图,4:3插入2条(左右)
file_paths22 = [os.path.join(input_path2, file) for file in os.listdir(input_path2) if file.endswith('.png')]
# 三图合并
pic_list_three=[]
for f in range(len(file_paths22)):
for x in range(3):
pic_list_three.append(file_paths22[f])
# 切割4分一组
pic_list_six2 = [pic_list_three[i:i+3] for i in range(0, len(pic_list_three), 3)]
print(pic_list_six2)
# 制作word
import os
from docx import Document
import os,time
from docx import Document
from docx.shared import Cm
from docx2pdf import convert
from PyPDF2 import PdfMerger
import shutil
from datetime import datetime
from PIL import Image
# 假设 pic_list_six1 是一个包含图片路径的列表
address=[pic_list_six1,pic_list_six2]
bg = [['10', '11'], ['10','11','13']]
size = [[[9.8, 8.56], [9.8, 8.56]],[[9.45, 5.28], [9.45, 5.28], [9.45, 5.28]]]
for z in range(len(address)):
for x in range(len(address[z])):
print(address[z][x])
imagePath = path + r'\ls'
os.makedirs(imagePath, exist_ok=True)
doc = Document(path + fr'\{z+1}图模版.docx')
table = doc.tables[0]
for i in range(len(bg[z])):
pp = int(bg[z][i][0])
qq = int(bg[z][i][1])
k = str(address[z][x][i])
print(pp, qq, k)
cell = table.cell(pp, qq)
cell_paragraph = cell.paragraphs[0]
cell_paragraph.clear()
run = cell_paragraph.add_run()
if i == z: # 当遍历到2\3图片时 0+2\1+2
# 读取图片并水平翻转
from PIL import Image
img = Image.open(k)
flipped_img = img.transpose(Image.FLIP_LEFT_RIGHT)
flipped_img.save("flipped_image.jpg")
k = "flipped_image.jpg"
run.add_picture(k, width=Cm(float(size[z][i][0])), height=Cm(float(size[z][i][1])))
cell_paragraph.alignment = 1 # 设置单元格中的文本居中
# 保存修改后的.docx文件
doc.save(imagePath + fr'\{x:02d}页.docx')
# docx 文件另存为PDF文件
inputFile = imagePath + fr'\{x:02d}页.docx' # 要转换的文件:已存在
outputFile = imagePath + fr'\{x:02d}页.pdf' # 要生成的文件:不存在
convert(inputFile, outputFile)
time.sleep(0)
pdf_lst = [f for f in os.listdir(imagePath) if f.endswith('.pdf')]
pdf_lst = [os.path.join(imagePath, filename) for filename in pdf_lst]
pdf_lst.sort()
file_merger = PdfMerger()
for pdf in pdf_lst:
print(pdf)
file_merger.append(pdf)
# file_merger.write("C:/Users/jg2yXRZ/OneDrive/桌面/描字帖/(打印合集)大班A整页描字帖2乘5加表格-4名字-({}人).pdf".format(num))
file_merger.write(path+fr"\测试青花瓷折纸(1页{z}图).pdf")
# {mb[x]}
# 9宫格制作2图任务卡时报错,
# time.sleep(0)
time.sleep(1)
# 01 06图答题卡.pdf
# 02 06图任务卡.pdf
file_merger.close()
# doc.Close()
# # print('----------第5步:删除临时文件夹------------')
import shutil
shutil.rmtree(imagePath) #递归删除文件夹,即:删除非空文件夹
这些图案无法拼成个连续图案
不符合的样例,例如:
我需要的样例效果;例如
总之就是长方形16:9、长方形4:3左右对称拼图后,要看上去就是一样的连续纹理
手动拣选不需要的图片,放到其他文件
16:9挑选出来的
4:3挑选出来的
三、制作PDF
一共写了3个代码
代码1:制作1图2图
代码展示
'''
青花瓷折纸1页1图、1页2图,多余部分也插入竖条图案
AI对话大师,阿夏
2024年10月01日
'''
import random
import math
from PIL import Image, ImageDraw, ImageFont
import os
# 测试图片59张
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\青花瓷'
# 范例图纸
names='00总测试'
input_path=path+fr'\00图片\{names}'
name1='09长方形_横版0403'
input_path1=path+fr'\00图片\{name1}'
name2='07长方形_横版1609'
input_path2=path+fr'\00图片\{name2}'
# 16:9图只有51张,所以总部需要102张,4:3图需要102张
z=102
print('----1图模版:正方1+长方横16:9乘以2-,第2张横图水平翻转--')
# 正方图抽106张
file_paths = [os.path.join(input_path, file) for file in os.listdir(input_path) if file.endswith('.png')][:z]
print(len(file_paths))
# 2图,4:3插入2条(左右)
file_paths11 = [os.path.join(input_path1, file) for file in os.listdir(input_path1) if file.endswith('.png')][:z]
print(len(file_paths11))
# 三图合并
pic_list_two=[]
for f in range(len(file_paths)):
pic_list_two.append(file_paths[f])
for x in range(2):
pic_list_two.append(file_paths11[f])
# 切割3分一组
pic_list_six1 = [pic_list_two[i:i+3] for i in range(0, len(pic_list_two), 3)]
print(pic_list_six1)
print('----2图模版:正方1乘以2+长方横4:3乘以3,第2张横图水平翻转---')
# 正方图2张1分
file_paths = [os.path.join(input_path, file) for file in os.listdir(input_path) if file.endswith('.png')][:z]
# 正方形2图一份
pic_list_six0 = [file_paths[i:i+2] for i in range(0, len(file_paths), 2)]
# 2图,4:3插入2条(左右)
file_paths22 = [os.path.join(input_path2, file) for file in os.listdir(input_path2) if file.endswith('.png')][:int(z/2)]
# 三图合并
pic_list_three=[]
for f in range(len(pic_list_six0)):
for g in range(len(pic_list_six0[f])):
pic_list_three.append(str(pic_list_six0[f][g]))
for x in range(3):
pic_list_three.append(file_paths22[f])
# 切割4分一组
pic_list_six2 = [pic_list_three[i:i+5] for i in range(0, len(pic_list_three), 5)]
print(pic_list_six2)
# 制作word
import os
from docx import Document
import os,time
from docx import Document
from docx.shared import Cm
from docx2pdf import convert
from PyPDF2 import PdfMerger
import shutil
from datetime import datetime
from PIL import Image
# 假设 pic_list_six1 是一个包含图片路径的列表
address=[pic_list_six1,pic_list_six2]
bg = [['00', '10', '11'], ['00','02','10','11','13']]
size = [[[19.6, 19.6], [9.8, 8.56], [9.8, 8.56]],[[14.17, 14.17], [14.17, 14.17], [9.45, 5.28], [9.45, 5.28], [9.45, 5.28]]]
for z in range(len(address)):
for x in range(len(address[z])):
print(address[z][x])
imagePath = path + r'\ls'
os.makedirs(imagePath, exist_ok=True)
doc = Document(path + fr'\{z+1}图模版.docx')
table = doc.tables[0]
for i in range(len(bg[z])):
pp = int(bg[z][i][0])
qq = int(bg[z][i][1])
k = str(address[z][x][i])
print(pp, qq, k)
cell = table.cell(pp, qq)
cell_paragraph = cell.paragraphs[0]
cell_paragraph.clear()
run = cell_paragraph.add_run()
if i == z+2: # 当遍历到2\3图片时 0+2\1+2
# 读取图片并水平翻转
from PIL import Image
img = Image.open(k)
flipped_img = img.transpose(Image.FLIP_LEFT_RIGHT)
flipped_img.save("flipped_image.jpg")
k = "flipped_image.jpg"
run.add_picture(k, width=Cm(float(size[z][i][0])), height=Cm(float(size[z][i][1])))
cell_paragraph.alignment = 1 # 设置单元格中的文本居中
# 保存修改后的.docx文件
doc.save(imagePath + fr'\{x:02d}页.docx')
# docx 文件另存为PDF文件
inputFile = imagePath + fr'\{x:02d}页.docx' # 要转换的文件:已存在
outputFile = imagePath + fr'\{x:02d}页.pdf' # 要生成的文件:不存在
convert(inputFile, outputFile)
time.sleep(0)
pdf_lst = [f for f in os.listdir(imagePath) if f.endswith('.pdf')]
pdf_lst = [os.path.join(imagePath, filename) for filename in pdf_lst]
pdf_lst.sort()
file_merger = PdfMerger()
for pdf in pdf_lst:
print(pdf)
file_merger.append(pdf)
# file_merger.write("C:/Users/jg2yXRZ/OneDrive/桌面/描字帖/(打印合集)大班A整页描字帖2乘5加表格-4名字-({}人).pdf".format(num))
file_merger.write(path+fr"\青花瓷折纸{names[2:]}(1页{z+1}图).pdf")
# {mb[x]}
# 9宫格制作2图任务卡时报错,
# time.sleep(0)
time.sleep(1)
# 01 06图答题卡.pdf
# 02 06图任务卡.pdf
file_merger.close()
# doc.Close()
# # print('----------第5步:删除临时文件夹------------')
import shutil
shutil.rmtree(imagePath) #递归删除文件夹,即:删除非空文件夹
结果展示
1页1图(正方形19.6CM)
1页2图(正方形14.17CM)
代码2:制作4图大图、4图小图
代码展示
'''
青花瓷折纸1页1图、1页2图,只有正方形,四张拼成1张、2张拼成1张
AI对话大师,阿夏
2024年10月01日
'''
import random
import math
from PIL import Image, ImageDraw, ImageFont
import os
# 测试图片59张
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\青花瓷'
# 范例图纸
names='00总测试'
input_path=path+fr'\00图片\{names}'
# 16:9图只有51张,所以总部需要102张,4:3图需要102张
z=102
print('----1图模版:正方1+长方横16:9乘以2-,第2张横图水平翻转--')
# 正方图抽106张
file_paths = [os.path.join(input_path, file) for file in os.listdir(input_path) if file.endswith('.png')][:z]
print(len(file_paths))
# 三图合并
pic_list_four=[]
for f in range(len(file_paths)):
for x in range(4):
pic_list_four.append(file_paths[f])
# 102z张*4,切割4分一组
pic_list_six1 = [pic_list_four[i:i+4] for i in range(0, len(pic_list_four), 4)]
print(pic_list_six1)
print(len(pic_list_six1))
# 102z张*4,切割4分一组
pic_list_six2 = [pic_list_four[i:i+4] for i in range(0, len(pic_list_four), 4)]
print(pic_list_six2)
print(len(pic_list_six2))
# 102
# 制作word
import os
from docx import Document
import os,time
from docx import Document
from docx.shared import Cm
from docx2pdf import convert
from PyPDF2 import PdfMerger
import shutil
from datetime import datetime
from PIL import Image
from docx import Document
import os
from docx2pdf import convert
import time
# 假设 pic_list_six1 是一个包含图片路径的列表
address = [pic_list_six1, pic_list_six2]
bg = [['00', '00', '00', '00'], ['00', '01', '00', '01']]
m = ['大', '小']
b = [[0, 1, 2, 3], [0, 0, 1, 1]]
size = [[[19.6, 19.6], [19.6, 19.6], [19.6, 19.6], [19.6, 19.6]], [[14.17, 14.17], [14.17, 14.17], [14.17, 14.17], [14.17, 14.17]]]
for z in range(len(address)):
for x in range(len(address[z])):
# print(len(address[z]))
imagePath = path + r'\ls'
os.makedirs(imagePath, exist_ok=True)
doc = Document(path + fr'\4图{m[z]}模版.docx')
for t in range(len(bg[z])):
print(t)
table = doc.tables[int(b[z][t])]
pp=int(bg[z][t][0])
qq=int(bg[z][t][1])
k = str(address[z][x][t])
print(pp,qq,k)
cell = table.cell(pp,qq)
cell_paragraph = cell.paragraphs[0]
cell_paragraph.clear()
run = cell_paragraph.add_run()
if z==0:
if t == 1: # 当遍历到2\3图片时 0+2\1+2
# 读取图片并水平翻转
from PIL import Image
img = Image.open(k)
flipped_img = img.rotate(-90)
flipped_img.save("flipped_image.jpg")
k = "flipped_image.jpg"
if t == 2: # 当遍历到2\3图片时 0+2\1+2
# 读取图片并水平翻转
from PIL import Image
img = Image.open(k)
flipped_img = img.rotate(-180)
flipped_img.save("flipped_image.jpg")
k = "flipped_image.jpg"
if t == 3: # 当遍历到2\3图片时 0+2\1+2
# 读取图片并水平翻转
from PIL import Image
img = Image.open(k)
flipped_img = img.rotate(-180)
flipped_img.save("flipped_image.jpg")
k = "flipped_image.jpg"
run.add_picture(k, width=Cm(float(size[z][t][0])), height=Cm(float(size[z][t][1])))
cell_paragraph.alignment = 1 # 设置单元格中的文本居中
# 保存修改后的.docx文件
doc.save(imagePath + fr'\{x:02d}页.docx')
# docx 文件另存为PDF文件
inputFile = imagePath + fr'\{x:02d}页.docx' # 要转换的文件:已存在
outputFile = imagePath + fr'\{x:02d}页.pdf' # 要生成的文件:不存在
convert(inputFile, outputFile)
time.sleep(0)
pdf_lst = [f for f in os.listdir(imagePath) if f.endswith('.pdf')]
pdf_lst = [os.path.join(imagePath, filename) for filename in pdf_lst]
pdf_lst.sort()
file_merger = PdfMerger()
for pdf in pdf_lst:
print(pdf)
file_merger.append(pdf)
# file_merger.write("C:/Users/jg2yXRZ/OneDrive/桌面/描字帖/(打印合集)大班A整页描字帖2乘5加表格-4名字-({}人).pdf".format(num))
if m[z]=='大':
file_merger.write(path+fr"\青花瓷折纸大图纸 4拼1{m[z]}图{len(pic_list_six1)}套{len(pic_list_six1)*4}页.pdf")
if m[z]=='小':
file_merger.write(path+fr"\青花瓷折纸大图纸 2拼1{m[z]}图{len(pic_list_six2)}套{len(pic_list_six1)*2}页.pdf")
# {mb[x]}
# 9宫格制作2图任务卡时报错,
# time.sleep(0)
time.sleep(1)
# 01 06图答题卡.pdf
# 02 06图任务卡.pdf
file_merger.close()
# doc.Close()
# # print('----------第5步:删除临时文件夹------------')
import shutil
shutil.rmtree(imagePath) #递归删除文件夹,即:删除非空文件夹
结果展示
2拼1小图(约28CM正方纸)
4拼1大图(约39CM正方纸)
螺旋样式拼图
代码3:制作小号6图
代码展示
代码展示
'''
青花瓷折纸1页6图、
AI对话大师,阿夏
2024年10月02日
'''
import random
import math
from PIL import Image, ImageDraw, ImageFont
import os
# 测试图片59张
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\青花瓷'
z=102
# 范例图纸
names='00总测试'
input_path=path+fr'\00图片\{names}'
file_paths = [os.path.join(input_path, file) for file in os.listdir(input_path) if file.endswith('.png')][:z]
# 16:9图只有51张,所以总部需要102张,4:3图需要102张
pic_list_six= [file_paths[i:i+6] for i in range(0, len(file_paths),6)]
print(pic_list_six)
print('----1图模版:正方1+长方横16:9乘以2-,第2张横图水平翻转--')
# 切割3分一组
# 制作word
import os
from docx import Document
import os,time
from docx import Document
from docx.shared import Cm
from docx2pdf import convert
from PyPDF2 import PdfMerger
import shutil
from datetime import datetime
from PIL import Image
# 假设 pic_list_six1 是一个包含图片路径的列表
address=[pic_list_six]
bg = [['00','01','10','11','20','21']]
size = [[[9.35,9.35], [9.35,9.35],[9.35,9.35],[9.35,9.35],[9.35,9.35],[9.35,9.35]]]
for z in range(len(address)):
for x in range(len(address[z])):
print(address[z][x])
imagePath = path + r'\ls'
os.makedirs(imagePath, exist_ok=True)
doc = Document(path + fr'\6图模版.docx')
table = doc.tables[0]
for i in range(len(bg[z])):
pp = int(bg[z][i][0])
qq = int(bg[z][i][1])
k = str(address[z][x][i])
print(pp, qq, k)
cell = table.cell(pp, qq)
cell_paragraph = cell.paragraphs[0]
cell_paragraph.clear()
run = cell_paragraph.add_run()
run.add_picture(k, width=Cm(float(size[z][i][0])), height=Cm(float(size[z][i][1])))
cell_paragraph.alignment = 1 # 设置单元格中的文本居中
# 保存修改后的.docx文件
doc.save(imagePath + fr'\{x:02d}页.docx')
# docx 文件另存为PDF文件
inputFile = imagePath + fr'\{x:02d}页.docx' # 要转换的文件:已存在
outputFile = imagePath + fr'\{x:02d}页.pdf' # 要生成的文件:不存在
convert(inputFile, outputFile)
time.sleep(0)
pdf_lst = [f for f in os.listdir(imagePath) if f.endswith('.pdf')]
pdf_lst = [os.path.join(imagePath, filename) for filename in pdf_lst]
pdf_lst.sort()
file_merger = PdfMerger()
for pdf in pdf_lst:
print(pdf)
file_merger.append(pdf)
# file_merger.write("C:/Users/jg2yXRZ/OneDrive/桌面/描字帖/(打印合集)大班A整页描字帖2乘5加表格-4名字-({}人).pdf".format(num))
file_merger.write(path+fr"\青花瓷折纸{names[2:]}(1页{len(address[z][x])}图).pdf")
# {mb[x]}
# 9宫格制作2图任务卡时报错,
# time.sleep(0)
time.sleep(1)
# 01 06图答题卡.pdf
# 02 06图任务卡.pdf
file_merger.close()
# doc.Close()
# # print('----------第5步:删除临时文件夹------------')
import shutil
shutil.rmtree(imagePath) #递归删除文件夹,即:删除非空文件夹