【教学类-34-11】20240314 动物拼图(Midjounery生成线描图,8*8格拼图块 A4整张)(AI对话大师)

news2024/9/28 7:16:32

作品展示:——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张图都能用上,但是这个随机性太强)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1516969.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单例模式( Singleton)——创建型模式

单例模式——创建型模式 什么是单例模式? 单例模式是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。简单来说如果你创建了一个对象, 过一会儿后你决定再创建一个新对象, 此…

【Memcached】

memcached 有一个很大的缺陷不能持久化,不能存储在硬盘里 1.NoSQL介绍 NoSQL是对 Not Only SQL、非传统关系型数据库的统称。 NoSQL一词诞生于1998年,2009年这个词汇被再次提出指非关系型、分布式、不提供ACID的数据库设计模式。 随着互联网时代的到…

Node.js 学习笔记 fs、path、http模块;模块化;包;npm

Node.js学习 Node.js一、定义1.前端工程化2.Node.js 为何能执行 JS?3.安装nodejs、删除之前的nodejs4.使用 Node.js 二、fs模块 \- 读写文件三、path 模块案例 - 压缩前端html四、HTTP相关URL中的端口号常见的服务程序http 模块-创建 Web 服务案例:浏览时…

【Flutter 面试题】Flutter如何处理响应式布局?

【Flutter 面试题】Flutter如何处理响应式布局? 文章目录 写在前面口述回答补充说明完整代码示例运行结果详细说明 写在前面 🙋 关于我 ,小雨青年 👉 CSDN博客专家,GitChat专栏作者,阿里云社区专家博主&am…

windows下安装python3.8

一、从官网下载安装包 官网地址:https://www.python.org/downloads/ 华为云地址:https://mirrors.huaweicloud.com/python/ 第三方镜像:https://registry.npmmirror.com/binary.html?pathpython/ 注意:从python3.8.10版本开始…

注意!运用表单流程管理可一起实现提质增效

经常会有客户在我们面前抱怨:到底用什么样的方法和软件,才能实现高效率的办公?其实,大家不必苦恼。因为低代码技术平台服务商流辰信息将会给大家推荐表单流程管理的实用性,它的灵活简便、易操作等优势特点,…

C#文件交互

C#是一种流行的编程语言,广泛应用于开发各种类型的应用程序,包括需要进行文件交互的应用程序。文件交互是指应用程序与计算机文件系统进行交互,包括读取、写入、创建、删除和修改文件等操作。在C#中,文件交互通常通过.NET框架提供…

格子表单GRID-FORM | 必填项检验 BUG 修复实录

格子表单/GRID-FORM已在Github 开源,如能帮到您麻烦给个星🤝 GRID-FORM 系列文章 基于 VUE3 可视化低代码表单设计器嵌套表单与自定义脚本交互文档网站搭建(VitePress)与部署(Github Pages)必填项检验 BUG…

打卡学习kubernetes——了解五种控制器类型

目录 1 Deployment控制器 2 StatefulSet控制器 3 DaemonSet控制器 4 Job控制器 5 CronJob控制器 1 Deployment控制器 Deployment为Pod和Replica Set(下一代Replication Controller)提供声明式更新。 Deployment运行无状态应用,一般情况…

redis中的zset的原理

一、zset有序集合的原理 如果有序集合元素个数少于128个且元素值小于64字节,使用压缩列表(新版本已经废弃压缩列表改用listpack数据结构了) 如果不满足上述条件,采用跳表作为redis的底层数据结构 二、压缩列表 1.由连续内存块组…

迄今为止易用 —— 的 “盲水印“ 实现方案

前期回顾 网站的打赏 —— 新一代的思路-CSDN博客https://blog.csdn.net/m0_57904695/article/details/136704914?spm1001.2014.3001.5501 目录 CSDN 彩色之外 📝 前言: 🛠️ vue3-blind-watermark 🤖 安装 ♻️ 引入&am…

【LeetCode热题100】142. 环形链表 II(链表)

一.题目要求 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统…

GEE必须会教程—影像集合的操作方法

影像集合(Image Collection),说白了就是把一堆影像打包在一起形成的集合,我们可以用用前文讲过的矢量集合的方法来理解(http://t.csdnimg.cn/bRJOT),学习影像集合的过程中,同样需要掌…

【DL经典回顾】激活函数大汇总(八)(Maxout Softmin附代码和详细公式)

激活函数大汇总(八)(Maxout & Softmin附代码和详细公式) 更多激活函数见激活函数大汇总列表 一、引言 欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里,激活函数扮演着不…

strcat的模拟实现

一:strcat函数的定义: strcat函数功能的解释: 将源字符串追加(连接)到目的字符串的后面 strcat函数要点: 源字符串必须以 \0 结束。 目标空间必须有足够的大,能容纳下源字符串的内容。 目…

使用STM32+ESP8266(ESP-01S)+点灯科技(手机端Blinker)实现远程控制智能家居

硬件准备:STM32单片机、ESP8266(ESP-01S)、CH340C下载烧录器 软件准备:STM32CubeMX、Keil uVision5、Arduino IDE、 点灯科技(手机端APP Blinker)点灯科技 (diandeng.tech)点击进入 值得注意的是&#x…

NO9 蓝桥杯单片机之串口通信的使用

1 基本概念 简单来说,串口通信是一种按位(bit)传输数据的通信方式。 其他一些知识就直接贴图吧(单工,半双工这些学过通信的同学应该都知道,可以上网查询一下具体概念。) 来源还是:…

【CSP试题回顾】201709-3-JSON查询

CSP-201709-3-JSON查询 解题思路 1. 初始化数据结构 map<string, string> strContent: 存储字符串类型属性的内容。键是属性名&#xff08;可能包含通过点.连接的多级属性名&#xff09;&#xff0c;值是属性的字符串值。vector<string> keyVec: 存储当前正在处…

酒店客房管理系统设计与实现(论文+源码)_kaic

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本酒店客房管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

SpringBoot+vue3打造企业级一体化SaaS系统

SpringBootvue3打造企业级一体化SaaS系统 简介&#xff1a;    全面提升前后端技术水平&#xff0c;独立完成全栈项目开发能力&#xff0c;快速进击全栈工程师&#xff0c;最终在面试中脱颖而出。整合后端主流技术&#xff08;Spring Boot、物理数据库隔离、加载动态权限、多…