【教学类-36-12-02】20240303儿童对称正脸图(二)左列2图左脸+右列2图右脸(中班《幼儿园里朋友多》)(midjounery-v 5.1 Python图片切割)

文章介绍了如何利用Python进行图片处理,具体步骤包括从模板开始,通过代码实现将4张左脸图和4张右脸图插入word文档的左右两列,最后将生成的多个docx文件合并为PDF。作者展示了代码示例,详细说明了如何操作图片和调整布局。
摘要由CSDN通过智能技术生成

 作品展示

f12b6af674d04105ac7e788b4b6ee3ed.png

背景需求:

1、前文完成了mj图片的生成与下载,并制作了两款4图学具——4图左脸、4图右脸

【教学类-36-12-01】20240302儿童对称正脸图(一)4图右脸+4图左脸(中班《幼儿园里朋友多》)(midjounery-v 5.1 Python图片切割)-CSDN博客文章浏览阅读346次,点赞23次,收藏19次。【教学类-36-12-01】20240302儿童对称正脸图(一)4图右脸+4图左脸(中班《幼儿园里朋友多》)(midjounery-v 5.1 Python图片切割)https://blog.csdn.net/reasonsummer/article/details/136417790https://blog.csdn.net/reasonsummer/article/details/136417790d51444f3059945679d19c4ef95b567fb.png

88310066653c415c8617507d88ade3e1.png

本文继续探索其他图片布局方法——左列2图左脸+右列2图右脸

在左侧列2单元插入两张左脸图,在右侧列2单元格两张右脸脸图

31e7b69451534daba865970f8d955c8e.png

 

 

一、制作左脸图4张和右脸图4张

 

bbd0be02b0024e41893fadd1984896a0.png

word模板 ——插入2行4列,

21be18e6a3b242c4a7ca915c406aaa48.png

代码重点:

5f1b8dbd33e04e0e8e8b831620688491.png

30cf673341874b608d1cd940131d49e0.png

9e6d366f5a3e4d298b4e2879b13b053e.png

a51fc4eefba7449bbb68a6f0de978ca0.png

代码展示

'''
目的:A4横版 一页4个半脸(4个人物,左侧2个人都是2张左侧图,右侧2个人物都是2张右侧图 分别靠左靠右)
时间:2024年3月3日17:27

# '''

num=int(input('生成几份?\n'))

print('----------第1-1步:提取所有的幼儿照片的路径------------')
import os

p=r"C:\Users\jg2yXRZ\OneDrive\桌面\儿童正脸"

tall=['04左脸图','05右脸图']

path=[]
for t3 in range(len(tall)):     
    p1=p+r'\{}'.format(tall[t3])
    print(p1)
    
    imgs=os.listdir(p1)
    for img in imgs:
        if img.endswith(".png"):
            path.append(p1+'\\'+img)
print(path)
print(len(path))
# 50张图


s=int(len(path)/2)
# 25个一组
pathall=[]
for t4 in range(int(len(path)/s)):
    pathall.append(path[t4*s:t4*s+s])
print(pathall)
print(len(pathall))
# [[左脸图25个],[有脸图25个],]
    

print('----------第-2步:坐标提取------------')
bg=[]
for x in range(0,4,3):    
    # zb=int('{}'.format(t3))
    for y in range(0,t3+1):
        # for y in range(0,4,2):        # 左侧插图
        # for y in range(1,4,2):        # 右侧插图
        bg.append('{}{}'.format('%02d'%y,'%02d'%x))
print(bg)
# ['0000', '0100', '0003', '0103']
# ['0000', '0100', 是左侧两图的左侧图坐标位置
# '0003', '0103']是右侧两图的右侧图坐标位置






print('----------第2步:新建一个临时文件夹------------')
# 新建一个”装N份word和PDF“的文件夹
imagePath1=p+r'\零时Word'
if not os.path.exists(imagePath1):  # 判断存放图片的文件夹是否存在
    os.makedirs(imagePath1)  # 若图片文件夹不存在就创建


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

import docx
from docx import Document
import random
import os,time
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


for nn in range(0,num):      # 读取图片的全路径  的数量 31张    
    doc = Document(p+r'\对称脸.docx')

    # 随机抽取2+2图
    figures=[]
    for xx in range(len(pathall)):    # [[],[]]里面的每个【】里面的25个里面抽取2个
        fig=random.sample(pathall[xx],2)    # 随机抽取4个图片
        # print(fig)
        for f in fig:
            figures.append(f)
    print(figures)

    
    table = doc.tables[0]       
    for t in range(len(bg)):   # 02
        pp=int(bg[t][0:2])    
        qq=int(bg[t][2:4])                    
        k=figures[t]
        # print(pp,qq,k)        
        # 写入1张大图
        run=doc.tables[0].cell(pp,qq).paragraphs[0].add_run()        # # 图片位置 第一个表格的0 3 插入照片
        run.add_picture(r'{}'.format(k),width=Cm(5.00),height=Cm(9.9))
        if t==0 or t==1:
            table.cell(pp,qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT #居中 
        else:
            table.cell(pp,qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.LEFT #居中 
                
    doc.save(imagePath1+r'\{}.docx'.format('%02d'%nn))  
    



# 19份docx合并成1个pdf

import os
from docx2pdf import convert
from PyPDF2 import PdfMerger

# 获取docx文件列表
docx_files = os.listdir(imagePath1)
docx_files = [f for f in docx_files if f.lower().endswith('.docx')]
docx_files = docx_files[:]  # 只处理前10个docx文件 所有文件都处理

# 将docx文件转换为PDF
pdf_files = []
for docx_file in docx_files:
    docx_path = os.path.join(imagePath1, docx_file)
    pdf_file = docx_file[:-5] + '.pdf'
    pdf_path = os.path.join(imagePath1, pdf_file)
    convert(docx_path, pdf_path)
    pdf_files.append(pdf_path)

# 合并PDF文件
merger = PdfMerger()
for pdf_file in pdf_files:
    merger.append(pdf_file)

# 保存合并后的PDF文件
output_file = os.path.join(p, '(打印)儿童脸部对称图-左侧列2张左图+右侧列2张右图({}份).pdf'.format(num))
merger.write(output_file)
merger.close()

print('合并完毕,结果保存在{}'.format(p))


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

e2604e67e8334d53b4af77a23b51d938.png

2d5523e4f9f6448894a7f31f925bd855.png

ceb44025c8bc4a53b334cb5b7d4adb6a.png

a7c904cd571c4f768ae1a408929c4bd3.png

 

 

66ac641c53d849e28624f7847f08a12d.png

7dcdee972c5f430698711840d64d056c.png

3b522744d1ae4fc59f7471b414e9d8d3.png

 

f76cc76c8dbc4d1fb240fc33f7aeaea0.png

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿夏reasonsummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值