【教学类-36-09】20240622钓鱼(通义万相)-A4各种大小的鱼

news2024/12/29 10:34:39

背景需求:

用通义万相获得大量的简笔画鱼的图片,制作成不同大小,幼儿用吸铁石钓鱼的纸片(回形针),涂色、排序等

补一张通义万相的鱼图

素材准备

(一)优质的鱼图片

(二)剔除的鱼(两个眼睛、很多鱼鳍、不是鱼的造型)

(三)模板

模板4条(14.2*7.9)

模板9条(9.5*5.23)

模板10条(9.66*5.62)

把模板里面的图片清空,

代码展示:


'''
02钓鱼(通义鱼类图片)3款模板,4张、9张、10张)
作者:AI对话大师,阿夏
2024年6月9日

'''
import os
import time
from docx import Document
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from PyPDF2 import PdfMerger
from docx.shared import Cm
import random, itertools





h=[4,9,10]
size=[['14.2','7.9'],['9.5','5.23'],['9.66','5.62']]
gz=[2,3,2]

for v in range(len(h)):

    # 文件信息
    path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20240618鱼'
    image_folder = path + r'\02鱼'
    new_folder = path + r'\零时文件夹'
    os.makedirs(new_folder, exist_ok=True)

    # 读取图片
    image_file = [os.path.join(image_folder, file) for file in os.listdir(image_folder) if file.endswith('.png')]
    image_files = random.sample(image_file, len(image_file))
    
    # 图片数量
    g=int(h[v])

    # 图片按照4张一组分割
    grouped_files = [image_files[i:i + g] for i in range(0, len(image_files),  g)]
    print(len(grouped_files))

    # 处理每一组图片
    for group_index, group in enumerate(grouped_files):
        # 创建新的Word文档
        doc = Document(path+fr'\模板{g}条.docx')
        # print(group)
        
        # 遍历每个单元格,并插入图片
        for cell_index, image_file in enumerate(group):
            # 计算图片长宽(单位:厘米)        
            
            # 插入图片到单元格
            table = doc.tables[0]
            cell = table.cell(int(cell_index / int(gz[v])), cell_index % int(gz[v]))
            # 如果第一行有4个格子,两个数字都写4
            cell_paragraph = cell.paragraphs[0]
            cell_paragraph.clear()
            run = cell_paragraph.add_run()
            run.add_picture(image_file, width=Cm(float(size[v][0])), height=Cm(float(size[v][1])))
            
        # 保存Word文档
        doc.save(os.path.join(new_folder, f'{group_index + 1:03d}.docx'))


   
    # 将N个docx转为PDF
    import os
    from docx2pdf import convert
    from PyPDF2 import PdfFileMerger
    import time  

    pdf_output_path = path+fr'\\钓鱼{g}图.pdf'

    # 将所有DOCX文件转换为PDF
    for docx_file in os.listdir(new_folder):
        if docx_file.endswith('.docx'):
            docx_path = os.path.join(new_folder, docx_file)
            convert(docx_path, docx_path.replace('.docx', '.pdf'))
            time.sleep(20)            # 图片比较大,多保存几秒

    
    # 合并“零时文件”里所有PDF文件
    merger = PdfFileMerger()
    for pdf_file in os.listdir(new_folder):
        if pdf_file.endswith('.pdf'):
            pdf_path = os.path.join(new_folder, pdf_file)
            merger.append(pdf_path)
           

    # 保存合并后的PDF文件
    merger.write(pdf_output_path)
    time.sleep(10)  # 图片比较大,多保存几秒
    merger.close()
    
    # 删除输出文件夹   
    import shutil    
    shutil.rmtree(new_folder)
  
   

结果

钓鱼4图:28张*4=112,实际110,所以空了2格

钓鱼9图:13张*9=117,实际110,所以空了7格

钓鱼10图:11张*10=110,实际110,所以空了0格

我发现:9图和10图的尺寸大小差不多,所以只要大一套10图就可以了。

那么最好再做一套图片更大的模版。

于是我做了模版2条

效果是一页上两条不一样的大鱼,最下面10条格子里放两条不一样的小鱼。

代码展示


'''
02钓鱼(通义鱼类图片,模板2图(2个大图2个小图)
作者:AI对话大师,阿夏
2024年6月22日

'''


import os

print('----------第1步:提取所有的幼儿照片的路径------------')
# 文件信息
folder_path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20240618鱼'
ppp =folder_path + r'\02鱼'
qqq = folder_path+r'\零时Word'
os.makedirs(qqq , exist_ok=True)


paths=[]
# 过滤:只保留png结尾的图片 31张(多几张备用)
imgs=os.listdir(ppp)
for img in imgs:
    if img.endswith(".png"):
        paths.append(ppp+'\\'+img)
# 所有图片的路径
print(paths)
# 提取动物名字倒数第4个字之前的动物名字
print(imgs)



print('----------第3步:随机抽取12张图片 ------------')

import docx
from docx import Document
from docx.shared import Pt 
from docx.shared import RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn
import random

import os,time
import docx
from docx import Document
from docx.shared import Inches,Cm,Pt
from docx.shared import RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
# # from docx.enum.text import WD_VERTICAL_ALIGNMENT
# from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT         #用来设置单元格垂直对齐方式
from docx.oxml.ns import qn

from docxtpl import DocxTemplate
import pandas as pd
from docx2pdf import convert
from docx.shared import RGBColor


pic=['00','10','20','21']
long=['19.32','19.32','9.66','9.66']
wide=['11.24','11.24','5.62','5.62']
# 每4个图片一组进行处理

path=[]
grouped_files = [paths[i:i+2] for i in range(0, len(paths), 2)]
for g in grouped_files:
    p=g*2
    path.append(p)

print(path)
print(len(path))
# 55




for nn in range(0,int(len(path))):      # 读取图片的全路径  的数量 31张
    doc = Document(folder_path+r'\模板2条.docx')
    
    

    table = doc.tables[0]          # 4567(8)行

    for l in range(len(long)):
        # 单元格坐标
        a=int(pic[l][0])
        b=int(pic[l][1])
        figures=path[nn][l]           # 图片的全路径的第一张 
#
        # 写入1张大图
        run=doc.tables[0].cell(a,b).paragraphs[0].add_run()        # # 图片位置 第一个表格的0 3 插入照片
        run.add_picture(r'{}'.format(figures),width=Cm(float(long[l])),height=Cm(float(wide[l])))
        table.cell(a,b).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中 
    
   
                
    doc.save(qqq+r'\{}.docx'.format('%02d'%nn))   

    from docx2pdf import convert

    # docx 文件另存为PDF文件
    inputFile = qqq+fr'\{nn:02d}.docx'  # 要转换的文件:已存在
    outputFile = qqq+fr'\{nn:02d}.pdf'  # 要生成的文件:不存在
    # 先创建 不存在的 文件
    f1 = open(outputFile, 'w')
    f1.close()
    # 再转换往PDF中写入内容
    convert(inputFile, outputFile)
    
print('----------第4步:把都有PDF合并为一个打印用PDF------------')
    
# 多个PDF合并(CSDN博主「红色小小螃蟹」,https://blog.csdn.net/yangcunbiao/article/details/125248205)
import os
from PyPDF2 import PdfFileMerger
target_path =  qqq
pdf_lst = [f for f in os.listdir(target_path) if f.endswith('.pdf')]
pdf_lst = [os.path.join(target_path, filename) for filename in pdf_lst]
pdf_lst.sort()
file_merger = PdfFileMerger()
for pdf in pdf_lst:
    print(pdf)
    file_merger.append(pdf)
file_merger.write(folder_path+fr"\钓鱼2图({len(path)}人共{len(path)}份).pdf")
file_merger.close()
# doc.Close()

# print('----------第5步:删除临时文件夹------------')    
import shutil
shutil.rmtree(qqq) #递归删除文件夹,即:删除非空文件夹


所以我准备打印三款大小的鱼

实际就打印两份:

1、考虑到幼儿的兴趣是钓鱼,所以鱼图片数量要多,(吸铁石瞬间就能吸走很多回形针)

2、图片数量多,为了节省纸张,就需要鱼小一点

(1)但图片太小,回形针不一定能卡上

(2)图片多,卡回形针需要很长时间(图片大点,让孩子们自己插回形针)

(3)而且图片小,容易满地碎纸。收拾不便利。

3、所以第一次实验,还是投放三种大小——19、14、9CM。

第一款19的(4图)26张,准备打印15张=60条

第二款14+9(2图*2)55张,准备打印20张=80条

合计140张。29平均每人5条

4、最好一次能钓完拿光,否则小碎片太多,我也没地方存放。

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

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

相关文章

(2024)豆瓣电影TOP250爬虫详细讲解和代码

(2024)豆瓣电影TOP250爬虫详细讲解和代码 爬虫目的 获取 https://movie.douban.com/top250 电影列表的所有电影的属性。并存储起来。说起来很简单就两步。 第一步爬取数据第二步存储 爬虫思路 总体流程图 由于是分页的,要先观察分页的规…

VS Code安装及环境配置(超详细)

VS Code简介 Visual Studio Code(简称 VS Code )是 Microsoft 于2015年4月发布的一款代码编辑器,以界面简洁、轻量著称。 它是一款免费开源的现代化轻量级代码编辑器,支持几乎所有主流开发语言的语法高亮、智能代码补全、自定义…

投票多功能小程序(ThinkPHP+Uniapp+FastAdmin)

🎉你的决策小助手! 支持图文投票、自定义选手报名内容、自定义主题色、礼物功能(高级授权)、弹幕功能(高级授权)、会员发布、支持数据库私有化部署,Uniapp提供全部无加密源码。​ 一、引言:为什么我们需要多功能投票小程序&#…

1. ELK日志分析

ELK日志分析 一、ELK作用、组件1、作用2、核心组件2.1 beat软件2.1 Logstash2.2 Elasticsearch2.3 Kibana 二、ELK部署、测试1、环境规划2、确保SELinux关闭、时间同步3、所有主机添加主机名解析4、三台ES主机安装jdk 1.155、调整系统资源限制6、部署es集群6.1 创建普通用户elk…

HMI 的 UI 风格,超凡脱俗

HMI 的 UI 风格,超凡脱俗

“Driver not loaded“问题解决方案

这两天又碰到了离谱的,愚蠢的,莫名其妙的,丧尽天良的错误。 之前已经解决过这个问题。这几天又碰上了,明明都已经把相应的dll放到了exe的同级目录,NND还是有问题!!!卡了我一个晚上加…

【服务器】之【如何不开外网连接GitHub】

登录GitHub官网 GitHub: Let’s build from here GitHub 注册账号 登录账号 输入一个自定义名字,点击创建存储库就可以了 首先 如何在不开外网的条件下使用GitHub 第一步 下载安装Steam(Watt TooklKit) 区分一下如何查看哪个官网(没有百度广告就是…

Android面试题(四大组件篇)

Q:说下Activity的四种启动模式?(有时会出个实际问题来分析返回栈中Activity的情况)https://blog.csdn.net/augfun/article/details/54897871 Q:谈谈singleTop和singleTask的区别以及应用场景 栈顶复用:解…

【网络安全常用术语解读 :什么是0day、1day、nday漏洞】

脆弱性攻击的时间窗被称作脆弱性窗口。通常情况下,一个安全漏洞的时间越久,攻击者就会有更多的机会去攻击它。 2. 0day 漏洞 0天漏洞,也被称作"零日漏洞",是指尚未由供应商公布的缺陷,表示攻击者已知晓该缺…

22.智能指针(下)

标题 五、引用计数智能指针5.1 共享引用计数智能指针共享数据5.2 使用Box定义三个共享链表5.3 使用Rc代替Box5.4 引用计数增加实验 六、RefCell和内部可变性模式6.1 通过RefCell在运行时检查借用规则6.2 内部可变性:不可变值的可变借用1)内部可变性的用例…

Vue40 修改默认配置

修改默认配置 在官网查看各个属性的作用 ### 在vue.config.js文件中,修改属性的值

【数据结构与算法】图的存储(邻接矩阵,邻接表)详解

图的邻接矩阵数据结构 typedef enum { NDG, DG, NDN, DN } GraphKind;using VRType int; using InfoType int;typedef struct ArcCell {VRType adj;InfoType *info; } Arc[N][N];struct MGraph {ElemType vexs[N];Arc arc;int vexnum, arcnum;GraphKind kind; };ArcCell 结构…

Pip换源秘籍:让你的Python包飞行起来!

在Python的包管理中,Pip是最重要的工具之一。它允许开发者从Python Package Index (PyPI)安装包,但有时由于网络问题或服务器负载过高,直接从PyPI安装包可能会非常慢。这时,更换Pip源到一个更快的镜像站点是一个常见的解决方案。本…

Vue-双向数据绑定指令

v-model指令 双向数据绑定就是当数据设置给表单元素时&#xff0c;修改这个数据会修改表单元素的值&#xff0c; 修改表单元素的值同样也会修改这个数据 <body><div id"app"><input type"text" v-model"name"><p>{{name…

BookSim2 安装步骤教程 Network-on-Chips (NoCs) 片上网络模拟器 含视频

BookSim简介 BookSim2 一个用于Network-on-Chips (NoCs) 芯片上网络的周期精确模拟器。该模拟器的设计是为了实现网络组件的模拟灵活性和精确建模。 BookSim1 是一个通用的网络模拟器&#xff0c;并不专门针对片上环境。不支持在片上网络环境中提出的一些更先进的功能和拓扑…

如何实现外部编码器轴和虚轴电子齿轮比例随动(汇川AM400PLC)

1、如何添加虚轴可以参考下面文章链接: 如何添加虚轴(AM400PLC)-CSDN博客文章浏览阅读2次。EtherCAT运动控制总线启用的时候,选择EtherCAT总线任务周期。选择好后,选择点击添加。https://blog.csdn.net/m0_46143730/article/details/139898985?csdn_share_tail=%7B%22type…

《PyTorch计算机视觉实战》:一、二章

目录 第一章&#xff1a;人工神经网络基础 比较人工智能和传统机器学习 人工神经网络&#xff08;Artificial Neural Network&#xff0c;ANN&#xff09; 是一种受人类大脑运作方式启发而构建的监督学习算法。神经网络与人类大脑中神经元连接和激活的方式比较类似&#xff0…

django学习入门系列之第三点《CSS基础样式介绍3》

文章目录 浮动什么是浮动浮动的特性清除浮动 往期回顾 浮动 什么是浮动 float属性用于创建浮动框&#xff0c;将其移动到一边&#xff0c;直到左边缘或右边缘触及包含块或另一个浮动框的边缘。 浮动的特性 浮动元素会脱离标准流(脱标) 浮动的元素会一行内显示并且元素顶部对…

PostMan动态设置全局变量

1. 前言 在开发过程中调试接口&#xff0c;一般都会使用PostMan。 其中有几个变量可能是好几个接口共用的&#xff0c;就会出现频繁手动复制(ctrlc)、粘贴(ctrlv)的情况。 这个过程得非常留意&#xff0c;生怕复制错了&#xff0c;或删减了某些东西&#xff0c;导致接口报错。…

Centos7.9系统对于文件和文件夹的常用命令操作说明

一、背景描述 在我们的日常工作和生活中&#xff0c;会遇到需要连接Linux服务器操作的情况&#xff0c;最常遇到的一些操作就是文件和文件夹的操作&#xff0c;将这些常用操作记录一下&#xff0c;方便后续的使用。 二、文件常用操作指令 Linux下的指令可以通过按下【tab】键进…