【教学类-89-08】20250624新年篇05——元宵节灯笼2CM黏贴边(倒置和正立数字 )

背景需求:

【教学类-89-06】20250220新年篇05——元宵节灯笼2CM黏贴边(3边形到50边形,一页1图、2图、4图,适合不同水平,适合不同阶段)-CSDN博客文章浏览阅读1.6k次,点赞35次,收藏27次。【教学类-89-06】20250220新年篇05——元宵节灯笼2CM黏贴边(3边形到50边形,一页1图、2图、4图,适合不同水平,适合不同阶段) https://blog.csdn.net/reasonsummer/article/details/145761966?spm=1011.2415.3001.5331

我发现这种图纸制作后,数字7会倒过来,

所以我需要在手柄条上的两端做两个数字,顶部的数字是倒置下划线,底部的数字是正立下划线

第一步:图纸上做两个数字

'''
202506新年05元宵节灯笼python制作图片
制作等比例的图纸,1图、2图、4图
(提示数字倒置下划线)
星火讯飞、阿夏
2025062
'''import math,os
from PIL import Image, ImageDraw, ImageFont# 1 width=Cm(20.2),height=Cm(26.45)
# 2 width=Cm(13.26),height=Cm(20.1))
# 4 width=Cm(10.1),height=Cm(13.23))
ww=['2100','2020','1326','1010']
hh=['2970','2645','2010','1323']
nn=[0,1,2,4]
ntb=200
sum=50# 创建一个新的列表来存储结果
result_list_w = [1]# 遍历列表并计算相邻数对的商
for i in range(len(ww) - 1):num1 = int(ww[0])num2 = int(ww[i + 1])quotient = num1 / num2result_list_w.append(round(quotient, 2))print(result_list_w)result_list_h=[1]
# 遍历列表并计算相邻数对的商
for i in range(len(hh) - 1):num1 = int(hh[0])num2 = int(hh[i + 1])quotient = num1 / num2result_list_h.append(round(quotient, 2))
print(result_list_h)for aa in range(len(ww)):# 宽w =int(ww[aa])# 高h = int(hh[aa])# 骨架贴边(2厘米)t = ntb# 上下贴边b = int(150/result_list_h[aa])# 外边高度(需要乘以2)g = int(710/(result_list_h[aa]))# 内柱高度n = int(910/(result_list_h[aa]))# 虚线dash_length = 20space_length = 20path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20250624元宵灯笼'pic=path+fr'\02多边形灯笼\{nn[aa]:02}灯笼多边形图片'os.makedirs(pic,exist_ok=True)for d in range(3,sum+1):# X边形(可修改遍历)# d = 3# 创建一个2100x2900的白色背景图片img = Image.new('RGB', (w,h), 'white')draw = ImageDraw.Draw(img)# 画外框图纸border_width = 5# 制作外边# 画一个从(0,0)到(15,210)的长方形灰色底纹填充# (右侧黏贴变宽度200)rectangle_color = (128, 128, 128)  # 灰色# 两个灰色draw.rectangle([(0, 0), (w-t, b)], fill=rectangle_color)draw.rectangle([(0, b + g * 2), (w - t, b * 2 + g * 2)], fill=rectangle_color)# 外边框线draw.rectangle([(0, 0), (w - t, b * 2 + g * 2)], outline='black', width=border_width)# 在(0, b*1+g*1)), (w-200, b*1+g*1))的地方画一条黑色2磅间隔2磅的虚线start_y = b + gend_y = start_y + gfor x in range(0, w - t, dash_length + space_length):draw.line([(x, start_y), (x + dash_length, start_y)], fill='black', width=border_width)# 画圆形radius = 80border_width = 10draw.ellipse([(w-t/2 - radius, start_y - radius), (w-t/2 + radius, start_y + radius)], fill="white", outline="black", width=border_width)# 插分等dd = []for x in range(d):f = (w - t) / d * (x)print(f)dd.append(f)print(dd)# 画从0,dd到100,dd的直线(多条)border_width2 = 10for x in dd:draw.line([(x, b), (x, b + g * 2)], fill='black', width=border_width2)# 画内柱图纸# 外边框线draw.rectangle([(w-t,g*2+b*2), (w, h)], fill=rectangle_color, width=border_width2)# 画白色draw.rectangle([(0, b * 2 + g * 2), (w-t, h)], fill='white')# border_width = 5# 制作外边# 画一个从(0,0)到(15,210)的长方形灰色底纹填充# (右侧黏贴变宽度200)rectangle_color = (150, 150, 150)  # 灰色# 两个灰色draw.rectangle([(0, b + g * 2), (w - t, b * 3 + g * 2)], fill=rectangle_color)draw.rectangle([(0, h - b), (w - t, h)], fill=rectangle_color)# 外边框线draw.rectangle([(0, b * 2 + g * 2), (w , h)], outline='black', width=border_width2)draw.rectangle([(0, 0), (w-t, b * 2 + g * 2)], outline='black', width=border_width2)# 如果大于10变形,棱柱近似圆形,没有必要这些棱柱的虚线,就不要画虚线了if d>10:passelse:# 插分等dd1 = []for x in range(d):f = (w - t) / d * (x+1)print(f)dd1.append(f)print(dd1)# 画从0,dd到100,dd的直线(多条)border_width2=10# # 画从0,dd到100,dd的直线(多条)# 设置虚线的参数dash_length = 30  # 黑线长度space_length = 30  # 空白间隔长度for x1 in dd1:start_x = x1  # 起始x坐标end_x = start_x  # 结束x坐标与起始x坐标相同,因为是竖线start_y = b*2+g*2  # 起始y坐标end_y = h   # 结束y坐标# 画从上到下的虚线for y in range(start_y, end_y, dash_length + space_length):draw.line([(start_x, y), (start_x, y + dash_length)], fill='black', width=border_width2)# 写入数字1(旋转180度并带下划线)- 顶部倒置数字font_size = 150font = ImageFont.truetype("arial.ttf", font_size) # 创建第一个数字(倒置)text = f'{d}'text_width, text_height = font.getsize(text)underline_thickness = 10underline_spacing = 20# 创建临时图像temp_img = Image.new('RGBA', (text_width + 20, text_height + underline_thickness + underline_spacing + 10), (0, 0, 0, 0))temp_draw = ImageDraw.Draw(temp_img)# 绘制文本和下划线temp_draw.text((10, 0), text, font=font, fill="black")underline_y = text_height + underline_spacingtemp_draw.line([(10, underline_y), (10 + text_width, underline_y)], fill="black", width=underline_thickness)# 旋转180度temp_img = temp_img.rotate(180, expand=True)# 放置位置(顶部)if len(str(d)) == 1:paste_x = w - t + 60  # 单数字位置else:paste_x = w - t + 18  # 双数字位置paste_y = 10  # 顶部位置# 粘贴到主图像img.paste(temp_img, (paste_x, paste_y), temp_img)# 写入数字2(正置带下划线)- 交接线上方数字# 计算交接线上方的位置text_position_y = g * 2 + text_height - (aa+1)*50# 交接线(g*2)上方减去字符高度和间距# - text_height + 20 # 创建第二个数字(正置)temp_img2 = Image.new('RGBA', (text_width + 20, text_height + underline_thickness + underline_spacing + 10), (0, 0, 0, 0))temp_draw2 = ImageDraw.Draw(temp_img2)# 绘制文本和下划线temp_draw2.text((10, 0), text, font=font, fill="black")underline_y2 = text_height + underline_spacingtemp_draw2.line([(10, underline_y2), (10 + text_width, underline_y2)], fill="black", width=underline_thickness)# 放置位置(交接线上方)if len(str(d)) == 1:paste_x2 = w - t + 60  # 单数字位置else:paste_x2 = w - t + 18  # 双数字位置paste_y2 = text_position_y  # 计算好的位置# 粘贴到主图像img.paste(temp_img2, (paste_x2, paste_y2), temp_img2)# 保存图片img.save(pic + fr'\{d:02}边形灯笼图纸(A4).png')

现在的手柄上都是两个数字,两边看都能数字正立。

合并成PDF

'''
元宵灯笼X变形3-50边型 两个数字
(插入WORD,分别插入1图2图4图)2CM黏贴边
星火讯飞、阿夏
2025年6月24日
'''
from docx import Document
from docx.shared import Cm
import os,time
from PIL import Image
from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT
from PyPDF2 import PdfFileMerger
import pikepdfpath = r'C:\Users\jg2yXRZ\OneDrive\桌面\20250624元宵灯笼'
image_folders = os.path.join(path, '02多边形灯笼')# 获取 image_folders 目录下所有文件夹的完整路径
folder_paths = [os.path.join(image_folders, f) for f in os.listdir(image_folders) if os.path.isdir(os.path.join(image_folders, f))]
folder_paths = folder_paths[1:]
print(folder_paths)l = [1, 2, 4]
bg = [['00'], ['00', '01'], ['00', '01', '10', '11']]
size = [['20.2', '26.45'], ['13.26', '20.1'], ['10.1', '13.23']]# Convert size strings to floats
size = [[float(num) for num in sublist] for sublist in size]for t in range(len(l)):cs = l[t]temp_folder = os.path.join(path, '临时')os.makedirs(temp_folder, exist_ok=True)image = [os.path.join(folder_paths[t], f) for f in os.listdir(folder_paths[t]) if f.endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif'))]print(image)image_files = []for i in image:for z in range(cs):image_files.append(i)grouped_images = [image_files[i:i + cs] for i in range(0, len(image_files), cs)]print(grouped_images)for i in range(len(grouped_images)):doc = Document(os.path.join(path, f'{cs}图.docx'))table = doc.tables[0]for j in range(len(bg[t])):pp = int(bg[t][j][0])qq = int(bg[t][j][1])picture = grouped_images[i][j]print(pp, qq, picture)cell = table.cell(pp, qq)run = cell.paragraphs[0].add_run()run.add_picture(f'{picture}', width=Cm(size[t][0]), height=Cm(size[t][1]))cell.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTERdoc_path = os.path.join(temp_folder, f"{i+1:02}.docx")doc.save(doc_path)time.sleep(1)import osfrom docx import Documentfrom reportlab.pdfgen import canvasfrom PyPDF2 import PdfFileMergerfrom docx2pdf import convert# 获取所有docx文件docx_files = [f for f in os.listdir(temp_folder) if f.endswith('.docx')]# 获取所有docx文件# 将每个docx文件转换为PDFfor docx_file in docx_files:doc_path = os.path.join(temp_folder, docx_file)pdf_path = os.path.join(temp_folder, docx_file.replace('.docx', '.pdf'))convert(doc_path, pdf_path)time.sleep(5)# 合并所有的PDF文件# 获取所有生成的PDF文件pdf_files = [f for f in os.listdir(temp_folder) if f.endswith('.pdf')]# 创建PdfFileMerger对象merger = PdfFileMerger()# 将所有PDF文件添加到合并器中for pdf_file in pdf_files:pdf_path = os.path.join(temp_folder, pdf_file)merger.append(pdf_path)# 输出合并后的PDF文件output_pdf_path = os.path.join(path, f'两个数字元宵灯笼2CM贴边一页{cs}张3-{len(image)+2}边形共{len(image)}种.pdf')merger.write(output_pdf_path)time.sleep(20)merger.close()print(f"所有PDF文件已合并到 {output_pdf_path}")import shutilshutil.rmtree(temp_folder)

一页 一图

一页2图

一页4图

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

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

相关文章

【DB2】SQL0104N An unexpected token “OCTETS“ was found following “……

db2创建表时报标题的错误,建表语句如下 db2 "CREATE TABLE YS.TEST_1(ID VARCHAR(64 OCTETS))"去掉octets就好了 经过测试,在9.7版本报错,在10.5.11没问题,怀疑版本差异导致 在官网查找资料,应该是10.5才…

暴雨以信创委员会成员单位身份参与南京专题活动

6月19日,中国电子工业标准化技术协会信息技术应用创新工作委员会(简称信创工委会)联合南京市工业和信息化局共同举办的“智启未来:AI赋能信息技术应用创新办公新势力”专题活动在南京成功举办。南京市工业和信息化局副局长代吉上、…

基于keepalived、vip实现高可用nginx (centos)

基于keepalived、vip实现高可用nginx (centos) 1、安装keepalived yum install keepalived2、选同一局域网空置ip作vip 我这里测试是: 主:192.168.163.134 副:192.168.163.135 vip:192.168.163.1403、ke…

使用 launch 启动 rviz2 并加载机器人模型

视频资料:《ROS 2机器人开发从入门到实践》6.2.2 在RViz中显示机器人_哔哩哔哩_bilibili 1、创建工作空间 chapt6_ws/src,创建包 fishrobot_description ros2 create fishrobot_description --build-type ament_cmake --license Apache-2.0 2、创建机器…

华为云Flexus+DeepSeek征文 | 基于CCE容器的AI Agent高可用部署架构与弹性扩容实践

华为云FlexusDeepSeek征文 | 基于CCE容器的AI Agent高可用部署架构与弹性扩容实践 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 …

Python学习Day41

学习来源:浙大疏锦行 知识回顾 数据增强卷积神经网络定义的写法batch归一化:调整一个批次的分布,常用与图像数据特征图:只有卷积操作输出的才叫特征图调度器:直接修改基础学习率 卷积操作常见流程如下: …

数组题解——最长回文子串【LeetCode】

5. 最长回文子串 一、向右拓展 算法思路 你用res记录当前找到的最长回文子串。每次遍历到s[i]时,尝试找到以s[i]结尾的、比当前res更长的回文子串。 先尝试长度为len(res)2(即起点i-len(res)-1)的子串,看是不是回文。如果不是&…

✨从零搭建 Ubuntu22.04 + Python3.11 + PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub

🚀 从零搭建 Ubuntu22.04 Python3.11 PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub 在 AI 项目开发中,构建统一的运行环境是一件非常重要的事情。使用 Docker 可以极大地提升部署效率、保证环境一致性。本文将手把手带你: ✅ 构建一个…

纪念抗战胜利知识答题pk小程序

纪念抗战胜利知识答题PK小程序通常有以下功能: 一、基础答题功能 题目展示:清晰呈现题目内容,支持文字、图片、音频或视频等多种形式的题目素材,且能按选择题、填空题、判断题等不同题型分类展示。答案提交与判断:用…

AI模型本质与学习范式解析

从统计学习(也就是数学)的角度来分析深度学习模型的本质。 频率派与贝叶斯派对模型本质理解的差异:前者认为学习参数估计,后者认为学习后验分布。不过这个问题下概率分布的视角更本质。 三个核心部分:任务类型分类&a…

【AI落地应用实战】Chaterm:重新定义终端操作的AI智能工具

目录 一、AI Agent 终端新范式二、Chaterm安装与基础功能体验2.1、源码安装与配置2.2、基础功能体验 三、Chaterm运维案例实践四、从 Chaterm 看智能终端工具的演进方向4.1 更低门槛:面向“非专业人员”的运维民主化4.2 更强扩展性:从工具到平台的演化 五…

IO多路复用——Select底层原理深度分析(流程图)

文章目录 1.kern_select 参数验证和初始化流程2. do_select() 详细实现流程3. 位图数据结构详解4. 文件描述符处理详细流程5. Poll方法调用链6. 等待机制实现7. 用户态处理就绪事件8. 性能瓶颈分析9. 与其他I/O多路复用对比 Select 整体调用流程: #mermaid-svg-766A…

多光谱扫描技术在实物建模中的应用:如何实现1:1真实材质还原

在实物建模领域,传统方式常常陷入尴尬境地:耗费大量时间精力构建的模型,材质看起来却与真实物体相差甚远,塑料质感的 “金属”、模糊不清的纹理,让模型失去了应有的真实感。而在文物保护、产品设计等对真实材质还原要求…

Python复杂网络分析和建模库之networkx使用详解

概要 在当今信息爆炸的时代,复杂网络无处不在。NetworkX是一个用于创建、操作和研究复杂网络结构、动态和功能的Python库。它提供了丰富的数据结构来表示各种类型的网络,如无向图、有向图、加权图等,并支持大量的图算法,包括最短路径计算、中心性分析、社区发现等。 安装 …

前端依赖升级完全指南:npm、pnpm、yarn 实践总结

在前端项目开发过程中,定期升级依赖不仅能享受新特性、修复安全问题,还能保证工具链长期稳定运行。本文全面总结 npm、pnpm、yarn 三大主流包管理器在 依赖包升级 方面的实践方法,并补充版本符、依赖安装的基础知识,适合新手与有经…

[持续集成]

学习目标 能够使用 Git 代码托管平台管理代码能够实现 jenkinspostman 的持续集成能够实现 jenkins代码 的持续集成 持续集成 概念 : 将自己工作成果持续不断地把代码聚集在一起,成员可以每天集成一次或多次相关工具 : git : 代码管理工具,自带本地仓库gitee : 远程代码管理…

FSMC控制LCD(TFTLCD:Z350IT002)显示案例

显存不一定要擦除,只要来一个地址就可以对其进行读写,而且一般的需求是不停的写入(不同的像素点给不同的值),所以是RAM(flash和E2PROM要擦除才能写入),由于FSMC没有DRAM所以我们只能…

云原生周刊:Argo CD v3.1 正式发布

开源项目推荐 Kubewall Kubewall 是一个轻量级的开源 Kubernetes 仪表盘,支持多集群管理,主打单二进制部署和浏览器访问,提供实时资源监控、YAML 编辑、拓扑视图、日志查看等功能。它使用 Go 与 React 构建,支持通过 Docker、He…

Aerotech系列(3)开发库介绍

库对象模型 名空间列表 NamespaceDescriptionAerotech.A3200 The main namespace of the Aerotech A3200 .NET library Aerotech.A3200.Callbacks Contains the classes that allow interacting with callbacks Aerotech.A3200.Commands Contains the classes that allows …

Spring--IOC容器的一些扩展属性

一、BeanFactoryPostProcessor和BeanPostProcessor BeanFactoryPostProcessor的作用是在实例化前修改BeanDefinition的属性 BeanPostProcessor的作用是在bean完成创建实例、填充属性之后,初始化阶段的前后都会对bean进行操作,使用postProcessBeforeIni…