【教学类-34-10】20240313 春天拼图(Midjounery生成线描图,4*4格拼图块)(AI对话大师)

时间:2024-03-14 17:46:43

作品展示:

背景需求:

利用华文彩云空心字(粗胖字体。凑满9个拼图)制作了3*3的拼图块

【教学类-34-09】20240310华文彩云学号拼图(3*3格子浅灰底图 深灰拼图块)(AI对话大师)-CSDN博客文章浏览阅读421次,点赞6次,收藏8次。【教学类-34-09】20240310华文彩云学号拼图(3*3格子浅灰底图 深灰拼图块)(AI对话大师)https://blog.csdn.net/reasonsummer/article/details/136604268?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22136604268%22%2C%22source%22%3A%22reasonsummer%22%7D

下一步就是需要制作4*4格的《春天拼图》

第一步:Midjounery生成春天图片

1、孩子表达的“春天“”:

HX:春天叶子变黄落下来,有风景,

WZX:有小鸟。春天有虫子。

JAX:春天可以晒太阳。

小结:小朋友的春天经验不够丰富,对秋天的记忆比较深刻。

2、老师想点关键词,并生成MJ简笔画图片

一、柳树,河岸,风筝,蓝天,白云,鸟类,划船,春天的帐篷

illustration for toddlers coloring books, line drawing, no background, no colors, black and white comic line art for:Willow trees, riverbanks, kites, blue sky, white clouds, birds, boating, tents in spring, empty background, thick outline, crisp lines, vector lines. simple, big, cute, --q 5  --s 420 --ar 1:1

为蹒跚学步的孩子着色的书籍插图,白描,没有背景,没有颜色,黑白漫画线条艺术:柳树,河岸,风筝,蓝天,白云,鸟类,划船,春天的帐篷,空背景,粗轮廓,清晰的线条,矢量线。简单,大,可爱,--q 5-s 420--ar 1:1

illustration for toddlers coloring books, line drawing, no background, no colors, black and white comic line art for:Willow trees, riverbanks, kites, blue sky, white clouds, birds, boating, tents in spring, empty background, thick outline, crisp lines, vector lines. simple, big, cute, --q 5  --s 420 --ar 4:3 --niji 5

为蹒跚学步的孩子着色的书籍插图,白描,没有背景,没有颜色,黑白漫画线条艺术:柳树,河岸,风筝,蓝天,白云,鸟类,划船,春天的帐篷,空背景,粗轮廓,清晰的线条,矢量线。简单,大,可爱,--q 5--s 420--ar 4:3--niji 5

二、春景,家庭

illustration for toddlers coloring books, line drawing, no background, no colors, black and white comic line art for:Spring scenery, family, empty background, thick outline, crisp lines, vector lines. simple, big, cute, --q 5  --s 420 --ar 4:3 --niji 5

幼儿插图涂色书,白描,无背景,无颜色,黑白漫画线条艺术:春景,家庭,空背景,粗轮廓,线条清晰,矢量线。简单,大,可爱,--q 5--s 420--ar 4:3--niji 5

三、春天的风景,城市,公园,孩子,

illustration for toddlers coloring books, line drawing, no background, no colors, black and white comic line art for:The scenery of spring, cities, parks,children,empty background, thick outline, crisp lines, vector lines. simple, big, cute, --q 5  --s 420 --ar 4:3 --niji 5

幼儿插图涂色书,白描,无背景,无颜色,黑白漫画线条艺术:春天的风景,城市,公园,孩子,空背景,粗轮廓,清晰的线条,矢量线。简单,大,可爱,--q 5--s 420--ar 4:3--niji 5

四、春天的风景,动物园,游客和小动物

illustration for toddlers coloring books, line drawing, no background, no colors, black and white comic line art for:The scenery of spring, zoos, tourists, and small animals,empty background, thick outline, crisp lines, vector lines. simple, big, cute, --q 5  --s 420 --ar 4:3 --niji 5

幼儿插图涂色书,白描,无背景,无色彩,黑白漫画线条艺术:春天的风景,动物园,游客和小动物,空背景,粗轮廓,清晰的线条,矢量线。简单,大,可爱,--q 5--s 420--ar 4:3--niji 5

五、春天的风景,动物园,可爱的孩子,和小动物

illustration for toddlers coloring books, line drawing, no background, no colors, black and white comic line art for:The scenery of spring, zoos, cute children, and small animals,empty background, thick outline, crisp lines, vector lines. simple, big, cute, --q 5  --s 420 --ar 4:3 --niji 5

幼儿插图涂色书,白描,无背景,无颜色,黑白漫画线条艺术:春天的风景,动物园,可爱的孩子,和小动物,空背景,粗轮廓,清晰的线条,矢量线。简单,大,可爱,--q 5--s 420--ar 4:3--niji 5

六、春天,阳光明媚,万物复苏,河水融化,柳树发芽,百花齐放,到处都是美丽的景色空背景、

网上是春天描述

illustration for toddlers coloring books, line drawing, no background, no colors, black and white comic line art for:In spring, the sunshine is bright, everything revives, the river melts, the willow trees sprout, a hundred flowers bloom, and everywhere is a beautiful scene!,empty background, thick outline, crisp lines, vector lines. simple, big, cute, --q 5  --s 420 --ar 4:3 --niji 5

幼儿涂色书籍插图,白描,无背景,无色彩,黑白连环画艺术为:春天,阳光明媚,万物复苏,河水融化,柳树发芽,百花齐放,到处都是美丽的景色空背景、粗轮廓、清晰线条、矢量线条。简单,大,可爱,--q 5--s 420--ar 4:3--niji 5

七、包含植物和动物

illustration for toddlers coloring books, line drawing, no background, no colors, black and white comic line art for:In spring, willows sprout, swallows fly, and grass grows,,empty background, thick outline, crisp lines, vector lines. simple, big, cute, --q 5  --s 420 --ar 4:3 --niji 5

幼儿涂色书插图,白描,无背景,无色彩,黑白连环画艺术:春天,柳树发芽,燕子飞翔,草长,空背景,粗轮廓,线条清晰,矢量线。简单,大,可爱,--q 5--s 420--ar 4:3--niji 5

一、整理图片,切割图片

1、把1*1正方形图片转成4:3长方形图片

2、把一张图切割成4张图

'''
把22424*1859的图片切割成2*2
作者:AI对话大师、阿夏
时间:2024年3月13日
'''

import os
from PIL import Image

# 指定123文件夹和234文件夹的路径'
input_folder = r'C:\Users\jg2yXRZ\OneDrive\桌面\春天拼图16块\00原图'
output_folder = r'C:\Users\jg2yXRZ\OneDrive\桌面\春天拼图16块\00切图'

# 遍历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文件夹中。')

代码设计思路:

第1步 把00原图里面的2424*1859的图片切割成2*2,保存在00切图中。每张原图转成4张小图

第2步 把00切图增加对比度(线条变黑),制作02贴图深色----------')

第3步 把00切图增加明度(线条变白,浅色),制作01底图浅色----------')

-第4步 把浅灰色底纹图片、深黑色贴图图片,学号图片切割成16张

03底图浅色小块

04贴图深色小块

第5步 把02按序填入上面16个格子,把深灰色学号图片打乱填入组成16+16一组,一页2组 64个路径

第6步 36个路径写入单元格

第7步:把都有PDF合并为一个打印用PDF

素材准备:

第二页的表格是打印在反面的(写学号用)

全部代码:

'''
春天拼图(16格,AI对话大师)
作者:AI对话大师、阿夏
时间:2024年3月12日
'''

print('------第1步 把2424*1859的图片切割成2*2----------')

import os
from PIL import Image

# 指定123文件夹和234文件夹的路径'
input_folder = r'C:\Users\jg2yXRZ\OneDrive\桌面\春天拼图16块\00原图'
output_folder = r'C:\Users\jg2yXRZ\OneDrive\桌面\春天拼图16块\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\桌面\春天拼图16块\00切图'
new_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\春天拼图16块\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\桌面\春天拼图16块\00切图'
new_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\春天拼图16块\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\桌面\春天拼图16块'

# 新建两个文件夹
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
# 3*3图片切割
w=4
l=4

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

        # 切割成16块拼图小块并保存
        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 = []
for x in range(0, w*2):
    for y in range(0, w):       
            bg.append('{:02d}{:02d}'.format(x, y))

for x in range(0, w*2):
    for y in range(w, w*2):
            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('---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))
# 30组

# 提取所有元素放在一起
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*w] for i in range(0, len(all_paths), w*w*w)]
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*2,int(len(nested_paths)*2), len(nested_paths)))
merged_pdf.close()

print('----------第7步:把都有PDF合并为一个打印用PDF------------')

# 删除临时文件夹    
shutil.rmtree(path + r"\零时文件夹")

运行后逐步生成五个文件夹

生成结果:

结论:

因为MJ生成黑白风景图的黑白灰样式不同,因此经过同样的对比度(30)和明度(2)调试,会出现不同的结果,有时候底图和贴图都很深色,有时候明度高,底图看不清图案。

总之,一套关键词写出来的mj"春天风景图片”明度对比度不统一,使用同样的数值调试明度(变浅)和对比度(变深),就会出现不同的对比效果。

思路:

1、优化MJ关键词,在MJ关键词里也加入“关于图案颜色的关键”(具体是什么还不清楚)

2、生成后,删除“底图贴图”对比效果不强(都是深色线条)或者“底图贴图”对比效果太强(底图看不清图案)的原图。