【教学类-36-10】20250531蝴蝶图案描边,最适合大小(一页1图1图、2图图案不同、2图图案相同对称)

背景说明:
之前做了动物头像扇子(描边20),并制作成一页一套图案对称两张
【教学类-36-09】20250526动物头像扇子的描边(通义万相)对称图40张,根据图片长宽,自动旋转图片,最大化图片-CSDN博客文章浏览阅读1k次,点赞37次,收藏6次。【教学类-36-09】20250526动物头像扇子的描边(通义万相)对称图40张,根据图片长宽,自动旋转图片,最大化图片https://blog.csdn.net/reasonsummer/article/details/148241058?sharetype=blogdetail&sharerId=148241058&sharerefer=PC&sharesource=reasonsummer&spm=1011.2480.3001.8118
现在我需要用把“蝴蝶”做成描边、一页一图、一页两图样式
【教学类-36-07】20230707三只对称蝴蝶(midjounery-niji)(涂色、裁剪、游戏(飞舞的蝴蝶))_对称图案涂色-CSDN博客文章浏览阅读586次。【教学类-36-07】20230707三只对称蝴蝶(midjounery-niji)(涂色、裁剪、游戏(飞舞的蝴蝶))_对称图案涂色https://blog.csdn.net/reasonsummer/article/details/131598617?spm=1011.2415.3001.5331
WORD模版
图片处理
添加点状描边,因为用了5磅的圆点,所以只做了描边20磅
'''
将已经白色P图的图案放大、透明、描边、切边deepseek,阿夏
20250531
'''
from PIL import Image, ImageDraw
import os
import math# 放大和透明室共有
print('------0、基本信息-----')
# 主路径
path = r'D:\test\20桌面素材\蝴蝶\蝴蝶2.0'
# path=r'D:\图片\20240614蛋筒彩蛋# 图片夹名称
a = '01'
b = '蝴蝶'
c = '虚线描边'# # 保存
# all = path + fr'\{a}_10{b}合并图'# 参数设置# 1、内部花纹框
# 花纹边框颜色((内部)
cchw = 0
# 调整蓝色区域边框宽度(像素)
blue_width = 0# 2、轮廓线
# 轮廓线黑线边框颜色(中间150,150,150)
ccn = 0
# 轮廓线的宽度
mb_border_width = 1 # 黑边宽度(像素)
w = int(mb_border_width / 2) # 内5外5# 5、画布尺寸放大
target_width = 2000 # 统一宽度
target_height = target_width # 统一高度
background_expand = 1000 # 白色背景放大尺寸# 6、添加中线虚线(折痕)# Parameters for center line# 中线参数
xxx = 0 # 颜色
total_line_width = 10 # 总宽度10磅
left_width = int(total_line_width) / 2 # 左边5磅
right_width = left_width # 右边
# line_width = 10 # 线条粗细
dash_length = 30 # 黑线段
gap_length = 30 # 白线段# 定义文件夹路径
in_folder = os.path.join(path, f'{a}_01{b}白色') # 原始图片(白背景)
big_folder = os.path.join(path, f'{a}_02{b}{c}放大背景') # 放大背景输出
transparent_folder = os.path.join(path, f'{a}_03{b}{c}透明背景') # 透明背景输出
# output_folder = os.path.join(path, f'{a}_04{b}{c}黑边轮廓') # 最终输出
dotput_folder = os.path.join(path, f'{a}_05{b}{c}黑边点虚线轮廓') # 最终输出
# input_folder = output_folder # 原始图片文件夹# 创建输出文件夹
# os.makedirs(all, exist_ok=True)
# os.makedirs(output_folder,exist_ok=True)
os.makedirs(dotput_folder, exist_ok=True)
os.makedirs(big_folder, exist_ok=True)
os.makedirs(transparent_folder, exist_ok=True)rrh, ggh, bbh = cchw, cchw, cchwprint('------1、白色PNG背景放大一点-----')
# 遍历输入文件夹中的所有PNG文件
for filename in os.listdir(in_folder):if filename.lower().endswith('.png'):# 打开原始图片input_path = os.path.join(in_folder, filename)with Image.open(input_path) as img:original_width, original_height = img.size# 创建新画布(长宽各+200,白色背景)new_width = original_width + background_expandnew_height = original_height + background_expandnew_image = Image.new('RGB', (new_width, new_height), (255, 255, 255))# 计算粘贴位置(居中)paste_x = (new_width - original_width) // 2paste_y = (new_height - original_height) // 2# 将原始图片粘贴到新画布上new_image.paste(img, (paste_x, paste_y), img if img.mode == 'RGBA' else None)# 保存结果big_path = os.path.join(big_folder, filename)new_image.save(big_path)print('------2、白色PNG背景变成透明-----')
def process_image_to_transparent(file_path):img = Image.open(file_path)img = img.convert("RGBA")datas = img.getdata()new_data = []for item in datas:if item[0] == 255 and item[1] == 255 and item[2] == 255:new_data.append((255, 255, 255, 0))else:new_data.append(item)img.putdata(new_data)return imgprint("正在转换白背景为透明背景...")
for file_name in os.listdir(big_folder):if file_name.lower().endswith((".png", ".jpg", ".jpeg")):input_file_path = os.path.join(big_folder, file_name)output_file_path = os.path.join(transparent_folder, file_name)processed_image = process_image_to_transparent(input_file_path)processed_image.save(output_file_path)print(f"已处理: {file_name}")# 描边为20、50、80
for x in [20]:cropped_folder = os.path.join(path, f'{a}_06{b}{c}切边{x}') # 裁剪后的透明图片os.makedirs(cropped_folder, exist_ok=True)# 3、点状虚线裁剪边# 点状虚线边框颜色(外边)ccw = 150# 白色描边宽度(像素)轮廓线外层white_border_width = x# 黑点直径(像素)dot_size = 5# # 黑点间距(像素)增加间距确保均匀分布 dot_spacing = dot_size * 2# 4、裁剪时不保留额外透明边距transparent_edge = 0 # 裁剪时不保留额外透明边距# 灰线深浅测试# for cr3 in range(cchw,cchw+10,10):# 黑色边框颜色# 灰色# if x==1:# 中线(内) rrw = ggw = bbw = ccwrrn = ggn = bbn = ccnrrh = ggh = bbh = cchwrrx = ggx = bbx = xxxprint('------3、添加点状虚线轮廓-----')def get_edge_pixels(image):"""获取图像中不透明像素与透明像素交界的边缘像素坐标"""edge_pixels = []pixels = image.load()width, height = image.sizefor y in range(height):for x in range(width):if pixels[x, y][3] > 0: # 不透明像素# 检查4邻域for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:nx, ny = x + dx, y + dyif 0 <= nx < width and 0 <= ny < height:if pixels[nx, ny][3] == 0: # 邻域透明edge_pixels.append((x, y))breakreturn edge_pixelsdef expand_edge_pixels(edge_pixels, distance, width, height):"""扩展边缘像素坐标到指定距离"""expanded_pixels = set()for x, y in edge_pixels:for dy in range(-distance, distance + 1):for dx in range(-distance, distance + 1):nx, ny = x + dx, y + dyif 0 <= nx < width and 0 <= ny < height:expanded_pixels.add((nx, ny))return expanded_pixelsdef get_contour_pixels(border_pixels, width, height):"""获取白边区域的外轮廓像素(使用边缘追踪算法)"""# 找到起始点(最左上角的边界像素)start_point = Nonefor y in range(height):for x in range(width):if (x, y) in border_pixels:start_point = (x, y)breakif start_point:breakif not start_point:return []# 使用Moore-Neighbor追踪算法获取轮廓contour = []current = start_pointprevious = (current[0] - 1, current[1]) # 假设从左侧开始directions = [(0, -1), (1, -1), (1, 0), (1, 1),(0, 1), (-1, 1), (-1, 0), (-1, -1)]while True:contour.append(current)# 找到下一个
相关文章:

【教学类-36-10】20250531蝴蝶图案描边,最适合大小(一页1图1图、2图图案不同、2图图案相同对称)
背景说明: 之前做了动物头像扇子(描边20),并制作成一页一套图案对称两张 【教学类-36-09】20250526动物头像扇子的描边(通义万相)对称图40张,根据图片长宽,自动旋转图片,最大化图片-CSDN博客文章浏览阅读1k次,点赞37次,收藏6次。【教学类-36-09】20250526动物头像…...

高效DBA的日常运维主题沙龙
2024年11月10日,在宁波组织了高效DBA的日常运维沙龙活动,大概有20人左右现场参加。会议的主题为: 目标: 1、识别高频低效操作并制定自动化方案 2、建立关键运维指标健康度体系 3、输出可立即落地的优化清单 会议议程 一、效能瓶…...

AAAI 2025论文分享│STD-PLM:基于预训练语言模型的时空数据预测与补全方法
本文详细介绍了一篇发表于人工智能顶级会议AAAI 2025的论文《STD-PLM: Understanding Both Spatial and Temporal Properties of Spatial-Temporal Data with PLM》。该论文提出了一种基于预训练语言模型(Pre-trained Language Model,PLM)的…...

Ethernet/IP转DeviceNet网关:驱动大型矿山自动化升级的核心纽带
在大型矿山自动化系统中,如何高效整合新老设备、打通数据孤岛、实现统一控制,是提升效率与安全的关键挑战。JH-EIP-DVN疆鸿智能EtherNet/IP转DeviceNet网关,正是解决这一难题的核心桥梁,为矿山各环节注入强劲连接力: …...
Android 11以上App主动连接WIFI的完整方案
早期Android版本App内连接指定的WIFI还是比较简单的,但是随着Android版本的提升,限制也越来越多。以下是一套完整的Android 11以上的WIFI应用内主动连接方案。 第一步:添加到建议连接: val wifiManager getSystemService(WIFI_…...

[蓝桥杯]模型染色
模型染色 题目描述 在电影《超能陆战队》中,小宏可以使用他的微型机器人组合成各种各样的形状。 现在他用他的微型机器人拼成了一个大玩具给小朋友们玩。为了更加美观,他决定给玩具染色。 小宏的玩具由 nn 个球型的端点和 mm 段连接这些端点之间的边…...
力扣上C语言编程题
一. 简介 本文简单记录一下力扣上 C语言编程题。作为自己做题笔记。 二. 力扣上 C 语言编程题 1. 从数组中找到两个元素之和,等于一个 target目标值 具体题目说明:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为…...

卡西欧模拟器:Windows端功能强大的计算器
引言 大家还记得初中高中时期用的计算器吗?今天给大家分享的就是一款windows端的卡西欧计算器。 软件介绍 大家好,我是逍遥小欢。 CASIO fx-9860G是一款功能强大的图形计算器,适用于数学、科学和工程计算。以下是其主要功能和特点的详细介…...
鸿蒙OSUniApp结合机器学习打造智能图像分类应用:HarmonyOS实践指南#三方框架 #Uniapp
UniApp结合机器学习打造智能图像分类应用:HarmonyOS实践指南 引言 在移动应用开发领域,图像分类是一个既经典又充满挑战的任务。随着机器学习技术的发展,我们现在可以在移动端实现高效的图像分类功能。本文将详细介绍如何使用UniApp结合Ten…...

机器学习基础(三) 逻辑回归
目录 逻辑回归的概念核心思想 Sigmoid 函数 逻辑回归的原理和底层优化手段伯努利分布最大似然估计 Maximum Likelihood Estimation (MLE)伯努利分布的似然函数交叉熵损失函数(Cross-Entropy Loss),也称为 对数损失&…...
系统调试——ADB 工具
ADB 工具 1.1 概述 ADB(Android Debug Bridge) 是 Android SDK 里的一个工具, 用这个工具可以操作管理Android 模拟器或真实的 Android 设备。 主要功能有: 运行设备的 shell(命令行)管理模拟器或设备的端…...

Qwen-3 微调实战:用 Python 和 Unsloth 打造专属 AI 模型
虽然大家都忙着在 DeepSeek 上构建应用,但那些聪明的开发者们却悄悄发现了 Qwen-3 的微调功能,这可是一个隐藏的宝藏,能把通用型 AI 变成你的专属数字专家。 通过这篇文章,你将学到如何针对特定用途微调最新的 Qwen-3 模型。无论…...

微软Build 2025:Copilot Studio升级,解锁多智能体协作未来
微软Build 2025大会圆满落幕,作为年度科技盛会,它一直是开发与AI技术突破性创新的重要展示平台。对于工程师、创作者和领域专家来说,这是了解微软生态未来动向的关键时刻。今年,Microsoft Copilot Studio推出了一系列新功能&#…...

设计模式——系统数据建模设计
摘要 本文主要介绍了UML在软件系统分析和设计中的应用,详细阐述了六大类关系(泛化、实现、依赖、关联、聚合、组合)及其在UML类图中的表示方法,并通过具体例子说明了这些关系在实际编程中的应用。同时,文章还概述了UM…...

解决docker运行zentao 报错:ln: failed to create symbolic link ‘/opt/zbox/tmp/mysq
1 背景描述 禅道使用docker部署运行过一段,服务正常。 后因服务器断电重启,禅道服务也随docker一起启动,但是服务却无法访问。如下如: 2 查看日志,定位原因 查看禅道日志: # docker logs zentao容器di…...
Spring Boot MVC自动配置与Web应用开发详解
Spring Boot MVC自动配置机制 Spring Boot通过自动配置功能为MVC应用提供了开箱即用的默认配置,开发者无需手动配置即可获得完整的Web支持。以下是核心功能的实现原理: 静态资源支持 默认情况下,Spring Boot会自动从以下classpath目录提供…...

OA工程自动化办公系统 – 免费Java源码
概述 功能完备的OA工程自动化办公系统Java源码,采用主流技术栈开发,无论是学习SpringBoot框架还是开发企业级应用,都是不可多得的优质资源。 主要内容 技术架构 后端技术栈: 核心框架:SpringBoot 2.xORM框…...

Apache IoTDB V2.0.3 发布|新增元数据导入导出脚本适配表模型功能
Release Announcement Version 2.0.3 Apache IoTDB V2.0.3 已经发布! V2.0.3 作为树表双模型正式版本,主要新增元数据导入导出脚本适配表模型、Spark 生态集成(表模型)、AINode 返回结果新增时间戳,表模型新增部分聚…...

某校体育场馆结构自动化监测
1. 项目简介 某小学学校成立于2020年,是一所公办小学,以高起点定位为该区优质教育新增长极,依托当地学院及教师进修学院附属小学资源,注重学生综合素质培养,近年来,该小学聚焦“五育” 领域,不…...
MySQL 9.0 相较于 MySQL 8.0 引入了多项重要改进和新特性
MySQL 9.0 相较于 MySQL 8.0 引入了多项重要改进和新特性,以下是两者的主要区别及其详细说明: 1. 认证机制 MySQL 8.0 支持 mysql_native_password 和 caching_sha2_password 认证插件。默认使用 caching_sha2_password,但未完全移除 mysql_native_password。MySQL 9.0 完全…...

Android 3D球形水平圆形旋转,旋转动态更换图片
看效果图 1、事件监听类 OnItemClickListener:3D旋转视图项点击监听器接口 public interface OnItemClickListener {/*** 当旋转视图中的项被点击时调用** param view 被点击的视图对象* param position 被点击项在旋转视图中的位置索引(从0开始&a…...

数据结构与算法学习笔记(Acwing 提高课)----动态规划·树形DP
数据结构与算法学习笔记----动态规划树形DP author: 明月清了个风 first publish time: 2025.6.4 ps⭐️树形动态规划(树形DP)是处理树结构问题的一种动态规划方法,特征也很明显,会有一个树形结构,其实是DFS的优化。…...
FTP 和 SFTP 介绍及 C/C++ 实现分析
1. FTP 协议概述 FTP(File Transfer Protocol)是一种用于在网络上进行文件传输的标准协议,诞生于 1971 年,是互联网上最早的应用层协议之一。它基于客户端 - 服务器模型,使用 TCP 作为传输层协议,默认通过 …...

leetcode hot100刷题日记——36.最长连续序列
解答: 实际上在哈希表中存储不重复的数字。 然后遍历哈希表,找间隔,更新最大间隔。 class Solution { public:int longestConsecutive(vector<int>& nums) {unordered_set<int>hash;for(int num:nums){hash.insert(num);}in…...

CentOS7关闭防火墙、Linux开启关闭防火墙
文章目录 一、firewalld开启、关闭防火墙1、查看防火墙状态 一、firewalld开启、关闭防火墙 以下命令在linux系统CentOS7中操作开启关闭防火墙 # 查询防火墙状态 systemctl status firewalld.service # 开启防火墙 systemctl start firewalld.service # 开机自启动防火墙 syste…...

PyTorch——搭建小实战和Sequential的使用(7)
import torch from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linearclass TY(nn.Module):def __init__(self):"""初始化TY卷积神经网络模型模型结构:3层卷积池化,2层全连接设计目标:处理32x32像素的…...
基于大模型的腔隙性脑梗塞风险预测及治疗方案研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 国内外研究现状 二、腔隙性脑梗塞概述 2.1 定义与分类 2.2 发病机制与病理生理过程 2.3 临床表现与诊断方法 三、大模型技术原理与应用现状 3.1 基本概念与技术架构 3.2 在医疗领域的应用案例与优势 3.3 …...

Python 开发效率秘籍:PyCharm、VS Code 与 Anaconda 配置与实战全解
目录 一、IDE(集成开发环境)是什么?二、Python IDE有哪些,哪款适合初学者?三、Visual Studio Code下载和安装教程3.1 VS Code下载和安装3.2 VS Code运行Python程序 四、PyCharm下载和安装教程4.1 PyCharm下载4.2 PyCharm安装4.3 运行PyCharm4.4 创建工程…...
[C]C语言日志系统宏技巧解析
代码解释:日志标签字符串化宏 这段代码定义了一个名为 _LOG_TAG 的宏,用于将 LOG_TAG_CONST 转换为字符串形式。这在日志系统中很常见,用于为不同模块添加标识前缀。 宏结构分析 #define _LOG_TAG STR(LOG_TAG_CON…...
自动驾驶系统研发系列—激光雷达感知延迟:自动驾驶安全的隐形隐患?
🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中一起航行,共同成长,探索技术的无限可能。 🚀 探索专栏:学…...