作品展示:——A4整页(一人2张纸)
背景需求:
通过春天拼图的个别化实验,我发现:
【教学类-34-10】20240313 春天拼图(Midjounery生成线描图,4*4格拼图块)(AI对话大师)-CSDN博客文章浏览阅读645次,点赞14次,收藏15次。【教学类-34-10】20240313 春天拼图(Midjounery生成线描图,4*4格拼图块)(AI对话大师)https://blog.csdn.net/reasonsummer/article/details/136674989
1、3位女孩很喜欢动物主题的拼图。
2、无论底图是深色、浅色、曝光色,幼儿都完成了相应的作品(深色底图与深色拼图,容易看不清楚是否已经贴过贴图,而浅色和曝光底图,能比较明显看到贴过与否)
3、3位幼儿已经快速适应3*3、4*4的拼图制作模式。
因此,我将用动物图案设计8*8的a4整张64块拼图。
素材准备:
代码展示:
'''
动物拼图(64格,AI对话大师)
作者:AI对话大师、阿夏
时间:2024年3月14日
'''
print('------第1步 把2424*1859的图片切割成2*2----------')
import os
from PIL import Image
# # 指定123文件夹和234文件夹的路径'
# input_folder = r'C:\Users\jg2yXRZ\OneDrive\桌面\动物拼图64块\00原图'
# output_folder = r'C:\Users\jg2yXRZ\OneDrive\桌面\动物拼图64块\00切图'
# # 检查文件夹是否存在
# if not os.path.exists(output_folder):
# # 如果文件夹不存在,则新建文件夹
# os.makedirs(output_folder)
# # 遍历123文件夹中的所有png文件
# for file_name in os.listdir(input_folder):
# if file_name.endswith('.png'):
# img = Image.open(os.path.join(input_folder, file_name))
# # 定义切割后每张图片的尺寸
# width, height = img.size
# new_width = width // 2
# new_height = height // 2
# # 切割图片并保存
# for i in range(2):
# for j in range(2):
# box = (j*new_width, i*new_height, (j+1)*new_width, (i+1)*new_height)
# region = img.crop(box)
# output_file = os.path.join(output_folder, '{}_{}_{}.png'.format(os.path.splitext(file_name)[0], i, j))
# region.save(output_file)
# print('图片批量切割完成并保存在234文件夹中。')
print('------第2步 把00切图增加对比度(线条变黑),制作02贴图深色----------')
from PIL import Image
from PIL import ImageEnhance
import os
# 定义文件夹路径
folder_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\动物拼图64块\00切图'
new_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\动物拼图64块\02贴图深色'
# 检查文件夹是否存在
if not os.path.exists(new_path):
# 如果文件夹不存在,则新建文件夹
os.makedirs(new_path)
# 循环处理文件夹下的所有图片文件
for filename in os.listdir(folder_path):
if filename.endswith(('.png', '.jpg', '.jpeg')):
# 打开图片文件
image_path = os.path.join(folder_path, filename)
image = Image.open(image_path)
# 转换为黑白色
bw_image = image.convert('L')
# 增加对比度
enhancer = ImageEnhance.Contrast(bw_image)
bw_image = enhancer.enhance(30.0) # 这里的2.0可以根据需要调整
# 保存处理后的图片
bw_image.save(os.path.join(new_path, filename))
print("图片处理完成!")
print('------第3步 把00切图增加明度(线条变白,浅色),制作01底图浅色----------')
from PIL import Image
from PIL import ImageEnhance
import os
# 定义文件夹路径
folder_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\动物拼图64块\00切图'
new_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\动物拼图64块\01底图浅色'
# 检查文件夹是否存在
if not os.path.exists(new_path):
# 如果文件夹不存在,则新建文件夹
os.makedirs(new_path)
# 定义明度增加倍数
brightness_factor = 2
# 循环处理文件夹下的所有图片文件
for filename in os.listdir(folder_path):
if filename.endswith(('.png', '.jpg', '.jpeg')):
# 打开图片文件
image_path = os.path.join(folder_path, filename)
image = Image.open(image_path)
# 增加明度
enhancer = ImageEnhance.Brightness(image)
bright_image = enhancer.enhance(brightness_factor)
# 保存处理后的图片
bright_image.save(os.path.join(new_path, filename))
print("图片处理完成!")
print('------第4步 把浅灰色底纹图片、深黑色贴图图片,学号图片切割成16张 03底图浅色小块+04贴图深色小块----------')
from PIL import Image, ImageDraw, ImageFont
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\动物拼图64块'
# 新建两个文件夹
t=['01底图浅色','02贴图深色','03底图浅色小块','04贴图深色小块']
import os
for tt in t:
folder_path_file = path+r"\{}".format(tt)
# 检查文件夹是否存在
if not os.path.exists(folder_path_file):
# 如果文件夹不存在,则新建文件夹
os.makedirs(folder_path_file)
# 把浅灰色底纹图片、深黑色贴图图片,学号图片切割成16张
from PIL import Image, ImageOps
import os
import glob
import random
# 8*8图片切割
w=8
l=8
for vv in range(int(len(t)/2)):
# 指定文件夹路径
folder_path = path + r"\{}".format(t[vv]) # 打开01\02文件夹
# print(folder_path)
# 获取文件夹中所有PNG图片的路径
png_files = glob.glob(os.path.join(folder_path, '*.png'))
print(png_files)
# 逐个打开PNG图片并切割成9块小图
for png_file in png_files:
image = Image.open(png_file)
# 获取图片大小
width, height = image.size
# 切割成64块拼图小块并保存
count = 1
block_width = width // w
block_height = height // l
for i in range(w):
for j in range(l):
box = (j*block_width, i*block_height, (j+1)*block_width, (i+1)*block_height)
region = image.crop(box)
#生成9张*30份=261图 ,生成在03 、04文件夹里。 因为切成16张,所以序号是01-16,
region.save(path + r'\{}\{}_{}.png'.format(t[vv+2], os.path.splitext(os.path.basename(png_file))[0], '%02d'%count))
count += 1
print('------第5步 把02按序填入上面16个格子,把深灰色学号图片打乱填入组成16+16一组,一页2组 64个路径----------')
# 坐标,两个表格连在一起,但是先写左侧上下的18个坐标,再写右侧上下的18个坐标
bg = []
# 8*16行表格
for x in range(0, w):
for y in range(0, w):
bg.append('{:02d}{:02d}'.format(x, y))
for x in range(w, w*2):
for y in range(0, w):
bg.append('{:02d}{:02d}'.format(x, y))
print(bg) # 36
print(len(bg))
# 切割成多少份,261个元素,18个在一页上,03文件夹浅灰:前9个按顺序写入,04文件夹的深灰色:后9个打乱写入
t2=['03底图浅色小块','04贴图深色小块']
pic=[]
for t3 in t2:
folder_path = path + r"\{}".format(t3) # 打开01\02文件夹
# print(folder_path) # C:\Users\jg2yXRZ\OneDrive\桌面\学号数字拼图\03底图浅色小块 C:\Users\jg2yXRZ\OneDrive\桌面\学号数字拼图\04贴图深色小块
# 获取文件夹中所有PNG图片的路径
png_files = glob.glob(os.path.join(folder_path, '*.png'))
print(len(png_files))# 272
pic.append(png_files)
print(pic)
print(len(pic))# 2组 浅色一组 深色一组[['','','浅色261张'],['','','深色261张']]
print('---拆成16个一组-------')
smaillpic=[]
for o in range(len(pic)): # 0,1
g=w*w
# # 假设你有一个包含261个元素的列表list1
list1 = [i for i in range(len(pic[o]))] # 这里只是举例,实际情况根据你的实际数据来创建列表
# 将列表按照18个一组分割
grouped_list = [pic[o][i:i+g] for i in range(0, len(pic[o]), g)]
smaillpic.append(grouped_list)
print(smaillpic)
# [[[9张],[9张],[9张],[],[],[]]]]
print(len(smaillpic))# 2组
print(len(smaillpic[0]))# 每组3张
print(len(smaillpic[0][0]))# 每张64图
print('---16个浅灰路径+16个深灰路径【【9个浅灰】【9个深灰】】-------')#
path1=[]
for n in range(len(smaillpic[0])): # 读取30组9个路径
# 【9个浅灰】按顺序写入
path1.append(smaillpic[0][n])
# 【9个深灰】打乱写入
c=random.sample(smaillpic[1][n],w*w)
path1.append(c)
print(path1)
print(len(path1))
# 6组
print(len(path1[0]))
# 每组64个
# 提取所有元素放在一起
all_paths = [path for sublist in path1 for path in sublist]
# # print(all_paths)
# print(len(all_paths))# 540
# 把所有内容变成36个一组
nested_paths = [all_paths[i:i+w*w*2] for i in range(0, len(all_paths), w*w*2)]
print(nested_paths)
print(len(nested_paths))
# 15组 每组里面是2个(9个浅色+9个深色)
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Cm
from docx2pdf import convert
from PyPDF2 import PdfMerger
import os,time
import shutil
print('------第6步 36个路径写入单元格----------')
# 指定新建文件夹路径
d = path + r"\零时文件夹"
# 检查文件夹是否存在,如果不存在则新建
if not os.path.exists(d):
os.makedirs(d)
merged_pdf = PdfMerger()
for nn in range(0, len(nested_paths)):
doc = Document(path + r'\动物拼图.docx')
table = doc.tables[0]
for t, bg_value in enumerate(bg):
pp = int(bg_value[0:2])
qq = int(bg_value[2:4])
k = nested_paths[nn][t]
print(pp, qq, k)
run = doc.tables[0].cell(pp, qq).paragraphs[0].add_run()
run.add_picture('{}'.format(k), width=Cm(3.7), height=Cm(2.55))
table.cell(pp, qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
doc.save(path + r'\零时文件夹\{}.docx'.format('%02d' % nn))
time.sleep(2)
# docx转PDF
inputFile = path + r"\零时文件夹\{}.docx".format('%02d' % nn)
outputFile = path + r"\零时文件夹\{}.pdf".format('%02d' % nn)
with open(outputFile, 'w'):
pass
convert(inputFile, outputFile)
time.sleep(2)
merged_pdf.append(outputFile)
# 合并PDF、
merged_pdf.write(path + r"\有底图的动物拼图{}块({}人共{}份{}张).pdf".format(w*w,int(len(nested_paths)), len(nested_paths),len(nested_paths)*2))
merged_pdf.close()
print('----------第7步:把都有PDF合并为一个打印用PDF------------')
# 删除临时文件夹
shutil.rmtree(path + r"\零时文件夹")
作品展示:
一人一份2张图预览
A4一页底图64块
A4一页贴图64块
对贴图的筛选
如果有白色块(多块)就尽量不要打印了
底色与贴图的颜色都很深,也不打印(因为容易看不清楚,到底贴过没有贴过)
3月15日是隔离最后一天,我打印几份适合的64块拼图,,观察:
1、3位女孩会选什么图案
2、3位女孩是否能完成64块拼贴(可辨认的细节少了)
3、3位女孩最快、最慢多久完成64块拼图。
后续:
1、根据幼儿需求,在MJ里继续生成有“角色”主体的图片(可惜MJ账号不多了,必须省着点用o(╥﹏╥)o,真希望一次生成4张图都能用上,但是这个随机性太强)