【教学类-72-01】20240803建筑对称图纸01

news2024/9/23 5:22:52

背景需求

通义万相下载“对称建筑,简笔画”

我想把“对称建筑”做成对称的样式,类似《对称脸》

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

首先用程序,把图片切割成左边图案+右边空白(中线是虚线)、右边图案+左边空白(中线是虚线)

模板展示

代码展示

'''
建筑对称剪纸
星火讯飞、阿夏
2024年8月3日
'''


import os
from PIL import Image, ImageDraw

print('----1、房屋切割成左右对称两片------------')

path=r'C:\Users\jg2yXRZ\OneDrive\桌面\对称房子剪纸'
old_path=path+r'\01房屋'
left_path=path+r'\02左房'
os.makedirs(left_path,exist_ok=True)
right_path=path+r'\03右房'
os.makedirs(right_path,exist_ok=True)

# 获取文件夹下的所有图片文件
image_files = [f for f in os.listdir(old_path) if f.endswith(('.jpg', '.jpeg', '.png'))]


# 左边房子
for image_file in image_files:
    # 打开图片
    image_path = os.path.join(old_path, image_file)
    image = Image.open(image_path)

    # 获取图片的宽度和高度
    width, height = image.size

    # 创建一个新的空白图片,宽度为原图的一半,高度与原图相同
    new_image = Image.new('RGB', (width , height), (255, 255, 255))

    # 将原图的左半部分复制到新图片的左侧
    left_half = image.crop((0, 0, width // 2, height))
    new_image.paste(left_half, (0, 0))

    # 在新图片的右侧绘制一条从上到下的虚线
   

    # 将新图片的右侧部分设置为白色
    right_half = new_image.crop((width // 2, 0, width, height))
    white_image = Image.new('RGB', (width // 2, height), (255, 255, 255))
    new_image.paste(white_image, (width // 2, 0))

    draw = ImageDraw.Draw(new_image)
    
    for y in range(0, height, 20):  # 每10像素画一次虚线,空隙10像素
        draw.line([(width // 2, y), (width // 2, y + 10)], fill=(0, 0, 0), width=10)

        # 保存处理后的图片
    new_image_path = os.path.join(left_path, image_file)
    new_image.save(new_image_path)

# 右边房子
image_files = [f for f in os.listdir(old_path) if f.endswith(('.jpg', '.jpeg', '.png'))]

for image_file in image_files:
    # 打开图片
    image_path = os.path.join(old_path, image_file)
    image = Image.open(image_path)

    # 获取图片的宽度和高度
    width, height = image.size

    # 创建一个新的空白图片,宽度为原图的一半,高度与原图相同
    new_image = Image.new('RGB', (width , height), (255, 255, 255))

    # 将原图的右半部分复制到新图片的右侧
    right_half = image.crop((width // 2, 0, width, height))
    new_image.paste(right_half, (width // 2, 0))

    # 将新图片的左侧部分设置为白色
    left_half = new_image.crop((0, 0, width // 2, height))
    white_image = Image.new('RGB', (width // 2, height), (255, 255, 255))
    new_image.paste(white_image, (0, 0))

    
    # 在新图片的左侧绘制一条从上到下的虚线
    draw = ImageDraw.Draw(new_image)
    
    for y in range(0, height, 20):  # 每10像素画一次虚线,空隙10像素
        draw.line([(width // 2 - 10, y), (width // 2 - 10, y + 10)], fill=(0, 0, 0), width=10)


    # 保存处理后的图片
    new_image_path = os.path.join(right_path, image_file)
    new_image.save(new_image_path)

# 合并图案

import os,time
import shutil
from docx import Document
from docx.shared import Cm
from PIL import Image
from PyPDF2 import PdfFileMerger, PdfFileReader

from PIL import Image, ImageDraw, ImageFont
import os,random

print('----2、左图+右图------------')

left_files = [os.path.join(left_path, f) for f in os.listdir(left_path) if f.endswith('.jpg') or f.endswith('.png')]
right_files = [os.path.join(right_path, f) for f in os.listdir(right_path) if f.endswith('.jpg') or f.endswith('.png')]

image_files=[]
for a in range(len(left_files)):
    image_files.append(left_files[a])
    image_files.append(right_files[a])
print(image_files)
print(len(image_files))


# 将图片拆成8个一组
grouped_files = [image_files[i:i + 4] for i in range(0, len(image_files), 4)]
print(len(grouped_files))

# 创建临时文件夹
new_folder = path+r'\零时文件夹'
os.makedirs(new_folder, exist_ok=True)

print('----3、插入docx,制作pdf------------')
# 处理每一组图片
for group_index, group in enumerate(grouped_files):
    # 创建新的Word文档
    doc = Document(path+r'\房子模板.docx')
    # print(group)
    
    # 遍历每个单元格,并插入图片
    for cell_index, image_file in enumerate(group):
        # 计算图片长宽(单位:厘米)

        # 如果是空格,就跳过
        if not image_file:
            continue
    
        # 插入图片到单元格
        table = doc.tables[0]
        cell = table.cell(int(cell_index / 2), cell_index % 2)
        # 如果第一行有2个格子,两个数字都写2
        cell_paragraph = cell.paragraphs[0]
        cell_paragraph.clear()
        run = cell_paragraph.add_run()
        run.add_picture(image_file, width=Cm(14.14), height=Cm(9.75))
        
    # 保存Word文档
    doc.save(os.path.join(new_folder, f'{group_index + 1:03d}.docx'))
    


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

pdf_output_path = path+fr'\\01房屋对称{int(len(grouped_files))}张共{int(len(image_files)/2)}图.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(2)


# 合并零时文件里所有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)
time.sleep(2)

# 保存合并后的PDF文件
merger.write(pdf_output_path)
merger.close()


# 删除输出文件夹

shutil.rmtree(new_folder)
time.sleep(2)






玩法:

1、对称剪,涂色

2、中线画对称房屋

3、中间空白部分折叠起来,画房屋内部的人在做什么事情。类似抽拉卡

4、左右图片剪下来,黏贴在中间白色部分。

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

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

相关文章

高等数学精解【4】

文章目录 平面方程直角坐标及基本运算 参考文献 平面方程 直角坐标及基本运算 向量的四则运算 下面由文心一言自动生成 向量的四则运算主要包括加法、减法、数乘(标量乘法)和数量积(点积或内积),但通常不直接称为“除…

GuLi商城-商品服务-API-新增商品-获取分类关联的品牌

这个接口在上一篇文章中已经写过了,功能已经实现了,这里略

Vue3 核心模块源码解析

Vue3 核心模块源码解析 1、Vue3 模块源码解析1.1 compiler-core1.1.1 目录结构1.1.2 compile逻辑 1.2 reactivity1.2.1 目录结构1.2.2 reactivity逻辑 1.3 runtime-core1.3.1 目录结构1.3.2 runtime核心逻辑 1.4 runtime-dom1.4.1 主要功能 1.5 runtime-test1.5.1 目录结构1.5.…

深入理解接口测试:实用指南与最佳实践(一) 环境安装

​ ​ 您好,我是程序员小羊! 前言 这一阶段是接口测试的学习,我们接下来的讲解都是使用Postman这款工具,当然呢Postman是现在一款非常流行的接口调试工具,它使用简单,而且功能也很强大。不仅测试人员会使用…

【linux】【操作系统】内核之system_call.s源码阅读

system_call.s汇编代码是 Linux 内核的一部分,负责处理系统调用、定时器中断、硬盘中断、软盘中断和并行端口中断。下面是各个部分的详细说明: 系统调用处理 (_system_call) 功能 处理系统调用请求。根据传入的系统调用编号 (%eax) 调用相应的系统调用…

Linux修炼之路之进程地址空间

目录 一:程序地址空间 二:相关细节知识 接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧 一:程序地址空间 1.在学习c/c时,经常会听到堆区,栈区,代码段,常量…

IoTDB 入门教程 企业篇②——IoTDB-Workbench可视化控制台

文章目录 一、前文二、首页三、实例管理四、系统管理五、查询六、测点管理 一、前文 IoTDB入门教程——导读 IoTDB-Workbench同样是通过联系天谋科技商务,请求免费试用的。 请求试用激活启动的操作步骤,详情请见:IoTDB 入门教程 企业篇①——…

SQL注入实例(sqli-labs/less-4)

0、初始页面 1、确定闭合符号 前两条判断是否为数值型注入,后两条判断字符型注入的闭合符号 ?id1 and 11 ?id1 and 12 ?id1" ?id1") 2、确定表的列数 ?id1") order by 3 -- 3、确定回显位置 ?id-1") union select 1,2,3 -- 4、爆库…

RabbitMQ 应用

目录 1. 7种工作模式 1.1 Simple(简单模式) 1.2 Work Queue(工作队列) 1.3 Publish/Subscribe(发布/订阅) 1.4 Routing(路由模式) 1.5 Topics(通配符模式) 1.…

Yolov8在RK3588上进行自定义目标检测(四)

参考 Yolov8在RK3588上进行自定义目标检测(一) Yolov8在RK3588上进行自定义目标检测(二) Yolov8在RK3588上进行自定义目标检测(三) YOLOV8火灾检测模型的边缘端推理 验证rknn模型 1.将转换好的rknn模型上传到板子上,再在板子上安装rknn-toolkit-lite2,将上面的…

Nexus3 Repository代理pypi设置与应用

目录 1. 创建Blob库并指定路径 2. 创建pypi阿里镜像源 3. 创建pypi腾讯镜像源 4. 创建一个pypi组管理 5. 配置pip 6. 下载测试 扩展:配置好后无法下载解决思路。 Nexus 存储库中的 Blob 存储是指一种用于存储大量非结构化数据的技术。在 Nexus 存储库的上下文…

基于YOLOv8的垃圾检测系统

基于YOLOv8的垃圾检测系统 (价格85) 包含 [硬纸板,玻璃,金属,有机废物,纸,塑料] 6个类 通过PYQT构建UI界面,包含图片检测,视频检测,摄像头实时检测。 (该系统可以…

马来西亚原生静态IP注册的账号稳定吗?

马来西亚作为东南亚重要的经济体之一,其网络基础设施和互联网服务水平在近年来有了显著提升。静态IP作为一种固定的互联网协议地址,对于某些特定的网络应用和需求非常重要。本文将围绕马来西亚原生静态IP注册的账号稳定性进行探讨,分析其在不…

JVM—虚拟机类加载器

参考资料:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)周志明 1. 类加载器 JVM设计团队有意把类加载阶段中的 “通过一个类的全限定名来获取该类的二进制字节流” 这个动作放到JVM外部实现,这个动作的代码称为类…

classical Chinese

classical Chinese 中型娃娃暑假作业背诵 文言文《伯牙鼓琴》 1)拿到文言文,先看一遍 2)用白话文(现代文)翻译一次 3)用白话文对照回去文言文(白话文中那些需要替换回文言文呢) 虽…

电脑入门|如何设置默认程序打开文件的软件?弄它!

前言 最近发现一件很奇葩的事情:电脑文件使用不合适的软件打开,然后就以为打不开文件了。 千万不要笑,这个问题是电脑小白经常遇到的。 我曾经见过有小伙伴用Photoshop打开一个.rar的文件…… 奇奇怪怪的事情总会有很多,毕竟谁…

【算法设计题】合并两个非递减有序链表,第1题(C/C++)

目录 第1题 合并两个非递减有序链表 得分点(必背) 题解 函数声明与初始化变量: 初始化合并链表的头节点: 合并两个链表: 处理剩余节点: 返回合并后的链表: 完整测试代码 🌈…

如何将文件转换成PDF(四种PDF虚拟打印机介绍)

Microsoft Print To PDF 这是Windows 10及以上系统自带的转换成PDF的工具 运行输入 optionalfeatures 打开可选功能,钩上 [Microsoft Print To PDF] 安装完成后,打开一个支持打印的文件类型或者网页,选择打印,在打印机界面可以看…

4.Redis数据结构通用命令

Redis数据结构 Redis是一个键值对的数据库。 key:大多都是String value: 类型多种多样 Redis通用命令 keys :查看所有的key 不建议在生产环境上使用keys命令,因为redis是单线程的,keys命令会搜索很长一段时间,搜索的期间redi…

[数据集][目标检测]金属罐缺陷检测数据集VOC+YOLO格式8095张4类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):8095 标注数量(xml文件个数):8095 标注数量(txt文件个数):8095 标注…