【教学类-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窗口二、菜单栏创建菜单栏在菜单栏中添加菜单创建菜单项在菜单项之间添加分割线综合练习 三、工具栏创建工具栏设置停靠位置设置浮动属性设置移动属性综合练习 四、状态栏状态栏的创建在状态栏中显示实时消息在状态栏显示永久的消息 五、浮动窗口浮动窗口的创建设…

ArcGIS Pro SDK (九)几何 12 多面体

ArcGIS Pro SDK (九)几何 12 多面体 文章目录 ArcGIS Pro SDK (九)几何 12 多面体1 通过拉伸多边形或折线构建多面体2 多面体属性3 构建多面体4 通过MultipatchBuilderEx构建多面体5 从另一个多面体构建多面体6 从 3D 模型文件构建…

Vue的计算属性和方法有什么区别

Vue中的计算属性(computed)和方法(methods)都是用于处理数据和逻辑的重要特性,但它们之间存在一些关键的区别。以下是两者的主要区别: 1. 缓存性 计算属性:计算属性是基于它们的依赖进行缓存的…

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 结构体模板①模板参数说明②构…

CentOS8无论安装更新什么都出现错误: Failed to download metadata for repo ‘AppStream‘

CentOS 已经停止维护,需要将镜像从 mirror.centos.org 更改为 vault.centos.org,依次执行以下命令即可: 1、cd /etc/yum.repos.d/ 2、sed -i s/mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS-* 3、sed -i s|#baseurlhttp://mirror.centos.org|baseu…

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

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

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

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

笔记:Enum中FlagsAttribute特性的用法

一、目的:分享Enum中FlagsAttribute特性的用法 在C#中,Enum(枚举)类型可以使用[Flags]属性来表示一个枚举可以存储多个值。这是通过按位运算符(如|(或)和&(与)&#…

HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 多选题序号1

基础认证题库请移步:HarmonyOS应用开发者基础认证题库 注:有读者反馈,题库的代码块比较多,打开文章时会卡死。所以笔者将题库拆分,单选题20个为一组,多选题10个为一组,题库目录如下,…

腾讯云简单部署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…

引入js的script标签如何做到异步加载

使用defer和async属性后,JavaScript加载和HTML解析之间的关系有所不同。了解这些差异可以帮助优化网页加载性能。 defer属性 行为: 当使用defer属性时,浏览器会异步加载JavaScript文件,不会阻塞HTML的解析。所有带有defer属性的…

Leetcode 3223. Minimum Length of String After Operations

Leetcode 3223. Minimum Length of String After Operations 1. 解题思路2. 代码实现 题目链接:3223. Minimum Length of String After Operations 1. 解题思路 这一题还是比较简单的,其实就是想明白对于任何一个字符,如果其个数在3个或以…

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

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

c++应用网络编程之五Windows常用的网络IO模型

一、Windows的网络编程 其实对开发者而言,只有Windows和其它平台。做为一种普遍流行的图形OS,其一定会与类Linux的编程有着明显的区别,这点当然也会体现在网络编程上。Windows有着自己一套相对独立的上层Socket编程模型或者说框架&#xff0…

Redis集群部署Windows版本

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

STM32 移植MQTT

在STM32上移植MQTT客户端库(如Paho MQTT C库)涉及几个关键步骤,包括库的选择、环境配置、代码集成和测试。下面是一个概括的指南,帮助你开始这个过程。 1. 选择MQTT库 对于STM32,你可以选择多个MQTT库,但…