【教学类-70-01】20240722镜子花边(适配5CM圆镜)

背景需求

我想给孩子们做一个小圆镜,花边涂色,打洞,做一个项链样式

1、使用通义万相生成了“圆形镜子,有花边”
 

边缘细,黑色面积大的图片放到另外一个文件夹里(不用)

从性价比角度,购买0,49元一个的5CM直径镜片

 挑选出一些边缘宽的图片

用代码测试这些图片中的空白圆形是不是5CM

结果,红色的圈都比图片里的空白圆小,也就是生成的图片内部的白色圆都超过了直径5CM。

偶尔有几个符合要求,数量太少

所以我重新用“通义万相”生成没有空心的圆形花纹

圆形花纹,没有空心,简单笔画,卡通,黑白,未着色,幼儿插图,线条画,没有背景,没有颜色,黑白漫画线条艺术:,空背景,粗轮廓,清晰的线条,矢量线。简单,大,

下载图片

图片上加上4.5CM直径的空白圆形。

用红色线测定一下范围

在Word里面测一下直径大小(红色4.5CM、黄色5CM)

删除白圆比用圆大的图片

经过筛选后(5CM圆形)

这些是剔除的

然后设计代码,将满格圆形花纹图上分别添加

白色圆形(正面镂空)

白色正方形(反面衬底写名字)。

用代码组合在一起。

模板样式

代码展示:

'''
花边圆镜
星火讯飞、通义万相 阿夏
2024年7月22日
'''
import os
from PIL import Image, ImageDraw
import os,time
import shutil
from docx import Document
from docx.shared import Cm
from PIL import Image
from PyPDF2 import PdfFileMerger, PdfFileReaderfrom PIL import Image, ImageDraw, ImageFont
import os,randomprint('-----1、测试镜子5CM直径,覆盖一个4.5CM的黑线白填充圆形和一个4CM的正方形--------')
def draw_circle(image_path, output_path):# 打开图片image = Image.open(image_path)width, height = image.size# 计算中心点center_x = width // 2center_y = height // 2# 创建一个ImageDraw对象draw = ImageDraw.Draw(image)# 设置圆的半径(假设每像素代表1CM)dpi=2400radius = int(2.25 * 110)  # 转换为像素print(radius)# 画一个红色的圆形draw.ellipse((center_x - radius, center_y - radius, center_x + radius, center_y + radius), outline="black",fill='white', width=10)# 保存图片image.save(output_path)def draw_square(image_path, output_path):# 打开图片image = Image.open(image_path)width, height = image.size# 计算中心点center_x = width // 2center_y = height // 2# 创建一个ImageDraw对象draw = ImageDraw.Draw(image)# 添加正方形square_size = int(3 * 110)  # 转换为像素draw.rectangle((center_x - square_size // 2, center_y - square_size // 2, center_x + square_size // 2, center_y + square_size // 2), outline="black", fill="white",width=10)# 保存图片image.save(output_path)# 获取123文件夹下的所有图片文件
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\20240722圆形花纹自制'
folder_path =path+r"\02筛选图"
zheng_path=path+r"\03测试圆正面"
fan_path=path+r"\04测试圆反面"os.makedirs(zheng_path,exist_ok=True)
os.makedirs(fan_path,exist_ok=True)image_files = [f for f in os.listdir(folder_path) if f.endswith(('.jpg', '.jpeg', '.png'))]# 遍历所有图片文件,处理并保存圆形和正方形分别保存在两个文件夹里
for image_file in image_files:input_path = os.path.join(folder_path, image_file)output_path_circle = os.path.join(zheng_path, image_file)output_path_square = os.path.join(fan_path, image_file)draw_circle(input_path, output_path_circle)draw_square(input_path, output_path_square)
# print(zheng_path)# print('----2、读取两个图,分别插入docx,制作PDF---------')zheng_files = [f for f in os.listdir(zheng_path) if f.endswith('.jpg') or f.endswith('.png')]
fan_files = [f for f in os.listdir(fan_path) if f.endswith('.jpg') or f.endswith('.png')]# 正面图与反面图一一组合
image_files_all=[]
for i in range(len(zheng_files)):image_files_all.append(os.path.join(zheng_path, zheng_files[i]))image_files_all.append(os.path.join(fan_path, fan_files[i]))
print(image_files_all)# 将图片拆成6个一组
grouped_files = [image_files_all[i:i + 6] for i in range(0, len(image_files_all), 6)]
print(len(grouped_files))
# 53# 创建临时文件夹
new_folder = path+r'\零时文件夹'
os.makedirs(new_folder, exist_ok=True)# 处理每一组图片
for group_index, group in enumerate(grouped_files):print(group)# 创建新的Word文档doc = Document(path+r'\圆镜模版.docx')# print(group)# 遍历每个单元格,并插入图片for cell_index, image_file in enumerate(group):# 计算图片长宽(单位:厘米)print(image_file)# 插入图片到单元格table = doc.tables[0]cell = table.cell(int(cell_index / 2), cell_index % 2)# 如果第一行有4个格子,两个数字都写4cell_paragraph = cell.paragraphs[0]cell_paragraph.clear()run = cell_paragraph.add_run()run.add_picture(image_file, width=Cm(9.4), height=Cm(9.4))# 保存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 PdfFileMergerpdf_output_path = path+fr'\\圆镜{int(len(zheng_path))}张共{len(zheng_path)}图.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'))# 合并零时文件里所有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)
# shutil.rmtree(zhang_path)
# shutil.rmtree(fan_path)
time.sleep(2)

一张有3组圆镜(横向2个为一套,左边是正面(白色圆形镂空装镜子,右边是反面,花纹对外面,白色正方形写名字)

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

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

相关文章

Qt窗口介绍

Qt窗口 一、Qt窗口二、菜单栏创建菜单栏在菜单栏中添加菜单创建菜单项在菜单项之间添加分割线综合练习 三、工具栏创建工具栏设置停靠位置设置浮动属性设置移动属性综合练习 四、状态栏状态栏的创建在状态栏中显示实时消息在状态栏显示永久的消息 五、浮动窗口浮动窗口的创建设…

Pytorch实现图像分类-水果数据集分类--深度学习大作业

目录 1.概述 2.设计 3.实现 4.实验 5.总结 1.概述 本次深度学习大作业,我使用AlexNet模型对"Fruits-360"数据集中的两部分水果和蔬菜图片进行分类 2.设计 模型设计:Alexnet网络 卷积层部分:构建了一系列卷积层、激活函数…

【等保测评】服务器——Windows server 2012 R2

文章目录 **身份鉴别****访问控制****安全审计****入侵防范****恶意代码防范****可信验证****测评常用命令** Windows服务器安全计算环境测评 测评对象:Windows server 2012 R2 身份鉴别 (高风险)应对登录的用户进行身份标识和鉴别&#x…

【爱上C++】list用法详解、模拟实现

文章目录 一:list介绍以及使用1.list介绍2.基本用法①list构造方式②list迭代器的使用③容量④元素访问⑤插入和删除⑥其他操作image.png 3.list与vector对比 二:list模拟实现1.基本框架2.节点结构体模板3.__list_iterator 结构体模板①模板参数说明②构…

【无人机】低空经济中5G RedCap芯片的技术分析报告

1. 引言 图一. 新基建:低空经济 低空经济作为一种新兴的经济形态,涵盖了无人机、电动垂直起降飞行器(eVTOL)、低空物流、空中交通管理等多个领域。随着5G网络的普及和演进,5G RedCap(Reduced Capability&a…

Typora 1.5.8 版本安装下载教程 (轻量级 Markdown 编辑器),图文步骤详解,免费领取(软件可激活使用)

文章目录 软件介绍软件下载安装步骤激活步骤 软件介绍 Typora是一款基于Markdown语法的轻量级文本编辑器,它的主要目标是为用户提供一个简洁、高效的写作环境。以下是Typora的一些主要特点和功能: 实时预览:Typora支持实时预览功能&#xff0…

腾讯云简单部署MYSQL 8.0

1.安装MySQL8.0资源库 yum localinstall https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm2.安装MySQL8.0 yum -y install mysql-community-server --nogpgcheck . yum -y install mysql-community-server --nogpgcheck 3.启动MySQL并配置开机自启 sys…

【效率提升】程序员常用Shell脚本

文章目录 常用Shell脚本一. 定期更新分区数据二、获取系统资源的使用情况 常用Shell脚本 一. 定期更新分区数据 在某些场景下,我们需要对N年前某一分区的数据进行删除,并添加今年该对应分区的数据,实现数据的流动式存储。 #!/bin/bash dt$…

【devops】ttyd 一个web版本的shell工具 | web版本shell工具 | web shell

一、什么是 TTYD ttyd是在web端一个简单的服务器命令行工具 类似我们在云厂商上直接ssh链接我们的服务器输入指令一样 二、安装ttyd 1、macOS Install with Homebrew: brew install ttydInstall with MacPorts: sudo port install ttyd 2、linux Binary version (recommend…

神经网络中如何优化模型和超参数调优(案例为tensor的预测)

总结: 初级:简单修改一下超参数,效果一般般但是够用,有时候甚至直接不够用 中级:optuna得出最好的超参数之后,再多一些epoch让train和testloss整体下降,然后结果就很不错。 高级:…

Redis集群部署Windows版本

Redis集群 之前因为数据量的原因,并没有进行Redis集群的配置需要,现在由于数据量大,需要进行集群部署。 最初在windows系统部署,需要Redis的windows版本,但官方没有windows版本,所以需要去gitHub上找由民…

【STM32】MPU内存保护单元

注:仅在F7和M7系列上使用介绍 功能: 设置不同存储区域的存储器访问权限(管理员、用户) 设置存储器(内存和外设)属性(可缓冲、可缓存、可共享) 优点:提高嵌入式系统的健壮…

Bash 学习摘录

文章目录 1、变量和参数的介绍(1)变量替换$(...) (2)特殊的变量类型export位置参数shift 2、引用(1)引用变量(2)转义 3、条件判断(1)条件测试结构&#xff08…

Qt+OpenCascade开发笔记(一):occ的windows开发环境搭建(一):OpenCascade介绍、下载和安装过程

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140604141 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

[C++进阶]模板进阶

此篇是学完stl后对于模板的补充 建议先看看这个[C初阶]模板初阶-CSDN博客 一、类模板 此处是对初阶讲过的 1. 类模板的定义格式 template<class T1, class T2, …, class Tn> class 类模板名 {}; 例如我们之前学习过的vector类&#xff1a; template<class T>…

C++中的多路转接技术之epoll

epoll 是干什么的&#xff1f;举个简单的例子 epoll的相关系统调用**epoll_create**和epoll_create1区别 epoll_ctl参数解释 **epoll_wait**参数说明返回值 epoll的使用 **epoll**工作原理epoll的优点(和 **select** 的缺点对应)epoll工作方式**水平触发**Level Triggered 工作…

Springboot 启动时Bean的创建与注入(一)-面试热点-springboot源码解读-xunznux

Springboot 启动时Bean的创建与注入&#xff0c;以及对应的源码解读 文章目录 Springboot 启动时Bean的创建与注入&#xff0c;以及对应的源码解读构建Web项目流程图&#xff1a;堆栈信息&#xff1a;堆栈信息简介堆栈信息源码详解1、main:10, DemoApplication (com.xun.demo)2…

HashMap与ConcurrentHashMap

文章目录 HashMap1.1 HashMap 的数据结构&#xff1f;1.2 HashMap 的动态扩容1.3 Hash实现方法1.4 如何解决Hash冲突 ConcurrentHashMap HashMap 1.1 HashMap 的数据结构&#xff1f; 哈希表结构&#xff08;链表散列&#xff1a;数组链表&#xff09;实现&#xff0c;结合数…

详细分析Springboot自定义启动界面(附Demo)

目录 前言1. banner.text1.1 配置文件关闭1.2 启动类关闭1.3 命令行关闭 2. 自定义Banner类3. 自动配置类4. 总结 前言 实现自定义启动动画是一项有趣的任务&#xff0c;虽然Spring Boot本身不提供内置的动画功能&#xff0c;但可以通过一些技巧来实现 以下主要以Demo的形式展…

三字棋游戏(C语言详细解释)

hello&#xff0c;小伙伴们大家好&#xff0c;算是失踪人口回归了哈&#xff0c;主要原因是期末考试完学校组织实训&#xff0c;做了俄罗斯方块&#xff0c;后续也会更新&#xff0c;不过今天先从简单的三字棋说起 话不多说&#xff0c;开始今天的内容 一、大体思路 我们都知…