【教学类-36-05】动物头饰制作2.0(midjounery动物简笔画四图)一页两种动物

news2024/10/7 10:25:50

作品展示

 背景需求:

头饰1.0的教学实践发现,完全可以利用裁剪的边缘纸条作为头饰的套环。因此重新设计word模板,合理布局图案位置,设计了一页2份的头饰。

原来样式:一页一份动物(4个)

 现在样式:一页2份动物(8个)

材料准备

位置

 图片(一张图有4个小图)需要切割

 Word设计

 代码展示

# '''
# 四图动物 头饰制作
# 目的:引导幼儿延边剪任意一种的动物的四个图片,制作头饰,折纸物
# 作者:阿夏
# 时间:2023年7月4日17:27)

# '''

# 切割四张图片



from PIL import Image
import os
import os.path
long=int(input('图片长度像素(1024)\n'))
wide=int(input('图片宽度像素(1024)\n'))

small_long=int(input('长边切分2(4*3)\n'))
small_wide=int(input('宽边切分2(4*3)\n'))
# 目前图片都是2*2,3*3排列

# 1:1图比例是2048
# 16:9图片比例 2912:1632

z=0
longall=[]
longall.append(z)
for l in range(1,small_long+1):
    ll=float(long/small_long*l)
    longall.append(ll)
print(longall)
# 右侧边的所有参数 长/X
# [0, 512, 1024, 1536, 2048]


wideall=[]
wideall.append(z)
for w in range(1,small_wide+1):
    ww=float(long/small_wide*w)    
    wideall.append(ww)
print(wideall)
# 下边的所有参数 宽/X
# [0, 682.6666666666666, 1365.3333333333333, 2048.0]


pic=[]
for x in range(0,small_wide):
    for y in range(0,small_long):
        z1=longall[y]
        z2=wideall[x]
        z3=longall[y+1]
        z4=wideall[x+1]
        pic.append(z1)
        pic.append(z2)
        pic.append(z3)
        pic.append(z4)
print(len(pic))

# 新建一个”装N份word和PDF“的文件夹
os.mkdir(r'C:\Users\jg2yXRZ\OneDrive\桌面\头饰制作\动物四格图片')
if not os.path.exists(r'C:\Users\jg2yXRZ\OneDrive\桌面\头饰制作\动物四格图片'):
     os.mkdir(r'C:\Users\jg2yXRZ\OneDrive\桌面\头饰制作\动物四格图片')
else:
    pass
 
# 定义文件所在文件夹
image_dir = r'C:\Users\jg2yXRZ\OneDrive\桌面\头饰制作\动物图片'
for parent, dir_name, file_names in os.walk(image_dir):  # 遍历每一张图片
    for filename in file_names:
        print(filename)
        pic_name = os.path.join(parent, filename)
        image = Image.open(pic_name)
        _width, _height = image.size
        print(_width, _height)
 

        qfall=4
        # 每张图有4个坐标
        n=0  
        for p in range(int(len(pic)/4)):
            pp=pic[p*4:p*4+4]
            print(pp)

                    
            # 定义裁剪范围(left, upper, right, lower)1024
            # # box = image.crop((0,0,123,123))
            box = image.crop((pp[0],pp[1],pp[2],pp[3]))
            name = filename[:-4]+'_'+str(n) +'.png'

            print(name)
            # # # ,pp[3],pp[4],pp[5],pp[6],pp[7],pp[8],pp[9]))
            # # name = filename[:-4]+'_'+str(p) +'.png'
            
            box.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\头饰制作\动物四格图片\{}'.format(name))
            n+=1
            
#     print('Done!')   

 

print('----------第1步:提取所有的幼儿照片的路径------------')
import os
path=[]
p=r"C:\Users\jg2yXRZ\OneDrive\桌面\头饰制作\动物四格图片"
# 过滤:只保留png结尾的图片 31张(多几张备用)
imgs=os.listdir(p)
for img in imgs:
    if img.endswith(".png"):
        path.append(p+'\\'+img)
# 所有图片的路径
print(path)
# 提取动物名字倒数第4个字之前的动物名字
print(imgs)
  
# 四个为一组
path4=[]
for t in range(int(len(path)/4)):
    tt=path[t*4:t*4+4]
    path4.append(tt)
print(path4)
print(len(path4))



print('----------第2步:新建一个临时文件夹------------')
# 新建一个”装N份word和PDF“的文件夹
os.mkdir(r'C:\Users\jg2yXRZ\OneDrive\桌面\头饰制作\零时Word')


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


bg=[]
for xx in range(0,2):
    for yy in range(0,2):
        aa='{}{}'.format(xx,yy)
        bg.append(aa)
print(bg)
# ['00', '01', '10', '11']




for nn in range(0,int(len(path4)/2)):      # 4张一组路径
    doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\头饰制作\头饰制作改良(模板).docx')
    
    figures=path4[nn*2:nn*2+2]           # 图片的全路径的第一张 
    print(figures)

   
    for b in range(2):
        table = doc.tables[b]          # 4567(8)行

        for t in range(len(bg)):   # 02
            pp=int(bg[t][0:1])    
            qq=int(bg[t][1:2])  
            # print(p)               
            k=figures[b][t]  
            print(pp,qq,k)  
 
            # 写入照片
            run=doc.tables[b].cell(pp,qq).paragraphs[0].add_run()        # # 图片位置 第一个表格的0 3 插入照片
            run.add_picture(r'{}'.format(k),width=Cm(6.17),height=Cm(6.17))
            table.cell(pp,qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中       

                        
    doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\头饰制作\零时Word\{}.docx'.format('%02d'%nn))   

    from docx2pdf import convert

    # docx 文件另存为PDF文件
    inputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/头饰制作/零时Word/{}.docx".format('%02d'%nn)  # 要转换的文件:已存在
    outputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/头饰制作/零时Word/{}.pdf".format('%02d'%nn)  # 要生成的文件:不存在
    # 先创建 不存在的 文件
    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 =  'C:/Users/jg2yXRZ/OneDrive/桌面/头饰制作/零时Word'
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("C:/Users/jg2yXRZ/OneDrive/桌面/头饰制作/(打印合集)头饰制作2.0({}人共{}份).pdf".format(len(path),len(path)))
file_merger.close()
# doc.Close()

# print('----------第5步:删除临时文件夹------------')    
import shutil
shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/头饰制作/零时Word') #递归删除文件夹,即:删除非空文件夹
shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/头饰制作/动物四格图片') #递归删除文件夹,即:删除非空文件夹


终端运行;

先切割图片

 

 

 切割图片需要一段时间

 随后开始把小图片分别插入Word

 

最后的PDF打包文件 

------------END---------------

下学期暂时没有固定班级了,对教学的、办公的批量化需求减低了。缺乏实用性情况下,但愿研究还能继续下去啊

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

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

相关文章

16-Linux背景知识

目录 1.Linux是什么? 2.Unix & Linux 发展历程图 3.Linux 发行版 PS:CentOS 和 RedHat 的关系 4.关于 Linux 学习什么? 4.1.基础命令(重点) PS:使用命令相比于使用图形界面的主要好处 4.2.系统编程 &…

IP地址定位在电商行业中的应用

最新数据显示,随着电商行业的快速发展越来越多的企业开始将IP地址定位技术应用于其业务中。IP地址定位是一种利用互联网上的IP地址来确定用户地理位置的技术它通过识别用户的IP地址,从而可以实时追踪和定位他们的位置。 在电商行业中,IP地址定…

Docker 搭建sonarqube,并集成阿里P3C规则

简介 本文安装的sonarqube是7.6-community版本,未安装最新版是因为7.9之后不再支持mysql。如果你安装的是其他版本的sonarqube,那么不要使用插件包中的插件,会有版本兼容性问题。 插件 插件包 插件包中包含java语音插件,汉化插…

linux下postgresql的安装和部署

1.官网下载安装包 PostgreSQL: File Browser 2. 下载成功后上传到Linux服务器 3.解压文件 tar -zxvf postgresql-14.5.tar.gz 4.编译(后边的地址指定的就是安装数据库目录) ./configure --prefix/usr/local/postgresql 出现异常:configure: error: readline lib…

Static Timing Analysis for Nanometer Designs A Practical Approach

分享电子书籍:静态时序分析圣经 Static Timing Analysis for Nanometer Designs A Practical Approach 1 setup time Setup time (建立时间)是数据信号(D)在时钟事件(这里以时钟上升沿为例)发生之前保持稳定的最小时间。以便时钟可靠地对数据进行采样。适用于同步电路,如触…

如何制作3D虚拟人物?这篇文章告诉你

3D虚拟人物制作是一种利用计算机技术来创建并模拟逼真的虚拟角色的过程。随着科技的不断发展和创新,3D虚拟人物制作在影视特效、游戏开发、虚拟主播、辅助医疗等领域得到了广泛应用和重视。 3D虚拟人物制作是一项复杂而精细的工作。它需要具备扎实的绘画基础和美学…

如何组织一次有价值的业务巡检

1.背景 随着业务的快速迭代,开发自测需求与QA测试的需求比例相当,对于开发自测的需求,需求质量我们无法把控,并且随着自测需求的增多,QA对业务的熟悉程度也会出现断层; 部分业务整体已趋于稳定&#xff0c…

如何在Microsoft Excel中使用RANK函数快速计算排名

Excel 中的 RANK 函数是一个内置的统计函数,它返回给定数字数组中数值的秩。根据特定数据点相对于列表中其他值的大小,将等级分配给该数据点。 RANK 的公式是:=RANK(number,ref,[order]),该函数接受两个强制参数 number 和 ref,第三个参数 order 是可选的,其中: number…

JMeter定时器使用小结

目录 前言: 一、定时器的作用域 二、定时器的作用 1、BeanShell定时器(BeanShell Timer) 2、固定吞吐量定时器(Constant Throughput Timer) 3、JSR223定时器(JSR223 Timer) 4、泊松随机定…

python接口自动化(十五)--参数关联接口(详解)

简介 我们用自动化新建任务之后,要想接着对这个新建任务操作,那就需要用参数关联了,新建任务之后会有一个任务的Jenkins-Crumb,获取到这个Jenkins-Crumb,就可以通过传这个任务Jenkins-Crumb继续操作这个新建的任务。 …

Vue3 动态组件

父组件 <template><div><h1>动态组件</h1><ul class"ul"><li :class"{ actived: index isactive }" click"changeCur(index)" v-for"(item, index) in list" :key"item.name">{{item…

Elasticsearch(1)——倒排索引与HTTP操作Elasticsearch

文章目录 1 前言2 Elasticsearch 安装3 数据格式4 倒排索引5 常用HTTP请求操作Elasticsearch5.1 创建索引5.2 查询索引信息5.3 删除索引5.4 创建/修改文档5.5查找文档5.6局部修改文档5.7删除文档5.8分页查询 1 前言 Elastic Stack 核心产品包括 Elasticsearch【存储数据】、Ki…

行云管家堡垒机和传统堡垒机的区别简单讲解

据统计&#xff0c;70%以上的IT故障其实都是内部人为引起的&#xff0c;例如账号密码管理不规范、资产授权不清晰、违规执行高危敏感命令等&#xff0c;这意味着信息化安全管理首先要解决的是加强内部信息安全管控。而加强内部信息安全管控就需要用到运维审计产品&#xff0c;也…

Bito - 超越Copilot的一款神级插件

文章目录 01 引言02 Bito的安装与使用2.1 安装Bito2.2 注册并创建工作空间2.3 使用方式 03 其它3.1 插件支持的平台3.2 文档 04 文末 01 引言 Bito IDEA插件地址&#xff1a;https://plugins.jetbrains.com/plugin/18289-bito–gpt-4–chatgpt-to-write-code-explain-code-crea…

合作、参与、让开源更易用 | 亚马逊的开源文化

JAX 是一种越来越流行的库&#xff0c;它支持原生 Python 或 NumPy 函数的可组合函数转换&#xff0c;可用于高性能数值计算和机器学习研究。JAX 提供了编写 NumPy 程序的能力&#xff0c;这些程序可以使用 GPU/TPU 自动差分和加速&#xff0c;从而形成了更灵活的框架来支持现代…

举例说明什么是前馈神经网络

前馈神经网络&#xff08;Feedforward Neural Network&#xff09;是一种最基本的人工神经网络结构&#xff0c;它由多个层次的神经元组成&#xff0c;这些神经元间具有相互连接的权重。数据从输入层进入&#xff0c;然后逐层传播&#xff0c;最后到达输出层。在这个过程中&…

基于ava+Swing+Mysql图书信息管理系统

基于JavaSwingMysql图书信息管理系统 一、系统介绍二、功能展示1.主页2.新增图书信息3.删除图书信息 三、数据库四、其他系统实现五、获取源码 一、系统介绍 该系统实现了查看图书列表、新增图书信息、删除图书信息 运行环境&#xff1a;eclipse、idea、jdk1.8 二、功能展示…

YUV 8bit转10bit

在有些场景中&#xff0c;我们经常会使用到YUV 8 bit转10bit的场景。 比如YUV420p 8bit 转 P010,P010le,YUV420p10le。 首先说ffmpeg 8 bit 转 10bit. 对于ffmpeg的P010le 和P010be 分别代表小端和大端&#xff0c;那么它转化的时候非常简单&#xff0c;就是8 bit再增加 8bit&…

MSP432自主开发笔记1:编码器测速_外部中断捕获法测速\测正反转

开发板芯片型号&#xff1a;MSP432P401R 今日得以继续我的MSP432电赛速通之路&#xff01; 进入此文章阶段&#xff0c;就预示着先人的开拓已经到了尽头,看着先人“一身转战三千里&#xff0c;一剑曾当百万师”&#xff0c;我们也该“门前学种先生柳”从而“步行夺得胡马骑”…

基于SSM的教务管理系统

基于ssm教务管理系统 一、项目背景介绍&#xff1a; 教务管理系统是一种基于信息技术的管理工具&#xff0c;可以用来管理学生、教师、课程、考试、教学资源等方面的信息&#xff0c;以实现高效、科学、规范的教务管理。随着信息技术的迅速发展&#xff0c;教务管理系统已经成为…