【教学类-36-09】20250526动物头像扇子的描边(通义万相)对称图40张,根据图片长宽,自动旋转图片,最大化图片+教学展示

article/2025/8/17 21:12:18

背景需求

夏天块来了,想做把动物扇。

【教学类-36-08】20240612动物面具(通义万相)-A4大小2图扇子_通义万象公开课-CSDN博客文章浏览阅读845次,点赞23次,收藏7次。【教学类-36-08】20240612动物面具(通义万相)-A4大小2图扇子_通义万象公开课 https://blog.csdn.net/reasonsummer/article/details/139682837?spm=1011.2415.3001.5331

从动物时钟里面选图(已经填充白色,并去白边)

【教学类-84-01】时钟动物——动物头像01(动物头像+钟表盘+活动扣+纸质指针)_动物钟表盘-CSDN博客文章浏览阅读2.1k次,点赞93次,收藏17次。【教学类-84-01】时钟动物——动物头像01(动物头像+钟表盘+活动扣+纸质指针)_动物钟表盘 https://blog.csdn.net/reasonsummer/article/details/144636000?spm=1011.2415.3001.5331

描边费时,所以挑选了40张

素材内容

描边代码

'''
动物扇子2.0,头像描边 20,60,100
deepseek,阿夏
20250525
'''
from PIL import Image, ImageDraw
import os
import math# 放大和透明室共有
print('------0、基本信息-----')
# 主路径
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20250516动物面具2'
# path=r'D:\图片\20240614蛋筒彩蛋# 图片夹名称
a='00'
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  # 右边5磅
# 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, cchw# print('------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_expand
#             new_height = original_height + background_expand
#             new_image = Image.new('RGB', (new_width, new_height), (255, 255, 255))#             # 计算粘贴位置(居中)
#             paste_x = (new_width - original_width) // 2
#             paste_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 img# print("正在转换白背景为透明背景...")
# 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 [60, 100]: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)# 找到下一个边界点found = Falsestart_dir = (directions.index((previous[0] - current[0], previous[1] - current[1])) + 1) % 8for i in range(8):dir_idx = (start_dir + i) % 8dx, dy = directions[dir_idx]neighbor = (current[0] + dx, current[1] + dy)if 0 <= neighbor[0] < width and 0 <= neighbor[1] < height:if neighbor in border_pixels:previous = currentcurrent = neighborfound = Truebreakif not found or current == start_point:breakreturn contourdef draw_uniform_dots(image, contour, dot_size, dot_spacing):"""在轮廓上均匀绘制黑点"""dot_layer = Image.new('RGBA', image.size, (0, 0, 0, 0))draw = ImageDraw.Draw(dot_layer)if not contour:return dot_layer# 计算轮廓总长度total_length = 0segments = []for i in range(len(contour)):p1 = contour[i]p2 = contour[(i + 1) % len(contour)]dx = p2[0] - p1[0]dy = p2[1] - p1[1]length = math.sqrt(dx * dx + dy * dy)segments.append((p1, p2, length))total_length += length# 计算需要绘制的点数num_dots = int(total_length / dot_spacing)if num_dots == 0:num_dots = 1# 均匀分布点step = total_length / num_dotscurrent_dist = 0segment_idx = 0remaining_seg = segments[0][2]for _ in range(num_dots):# 找到当前点所在线段while current_dist > remaining_seg and segment_idx < len(segments) - 1:current_dist -= remaining_segsegment_idx += 1remaining_seg = segments[segment_idx][2]p1, p2, seg_len = segments[segment_idx]ratio = current_dist / seg_lenx = p1[0] + ratio * (p2[0] - p1[0])y = p1[1] + ratio * (p2[1] - p1[1])# 绘制黑点和颜色 - 修正了ellipse坐标draw

http://www.hkcw.cn/article/DqybSQrZZj.shtml

相关文章

法律AI大模型与:应用原理、技术演进和实际案例

目录 ​编辑 摘要 1. 引言 2. 法律AI模型的核心原理 2.1 自注意力机制的法律应用 2.2 法律任务特定公式 2.3 位置编码与法律文本结构 3. 从通用模型到法律专用AI的演进 3.1 模型架构演进 3.2 训练流程优化 4. 法律AI的应用场景与案例分析 4.1 合同审查与生成 4.2 …

了解JVisualVM工具

jvisualvm是JDK自带的具有图形界面操作功能的JVM性能监控和诊断工具。集成了多个JDK命令行工具。 下载一个运行一下&#xff1b; 当前电脑没有Java程序运行&#xff0c;启动Oracle自带的SQL Developer&#xff0c;这是一个Java程序&#xff0c;然后看到Local节点下面有2个应用…

孙中山长孙女孙穗瑛去世 家人举办追思会回顾其一生

2025年5月,孙中山的长孙女孙穗瑛在美国加州去世,享年103岁。家人在加州为她举办了追思会,回顾了她的一生。孙穗瑛于1922年1月16日出生于中国广州,父亲是孙中山长子、时任广州市长的孙科,母亲为陈淑英。她的两位兄长孙治平、孙治强及妹妹孙穗华此前均已辞世。童年时代,由于…

【高频面试题】反转链表、 K 个一组翻转链表

文章目录 1.反转链表题目描述示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a;提示&#xff1a;解法1解法2解法3 2.反转链表 II题目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a;解法1解法2 3. K 个一组翻转链表题目描述示例 1&#xff1a;示例 2&#xf…

俄侦委会:两起桥梁坍塌均系爆炸引起

俄侦委会:两起桥梁坍塌均系爆炸引起 已展开刑事调查当地时间6月1日,俄罗斯联邦侦查委员会官方发言人彼得连科发布声明称,布良斯克州与库尔斯克州事故相关刑事案件已移交至侦委会侦查总局。彼得连科表示,2025年5月31日22时50分,布良斯克州维戈尼奇-皮利希诺铁路段因爆炸导致…

巴以冲突后已有超5万名儿童死亡 人间地狱中的无辜生命

5月27日,联合国儿童基金会表示,自2023年10月本轮巴以冲突爆发以来,加沙已有超过5万名儿童伤亡,当地被形容为“人间地狱”。英国外交官卡里乌基称,加沙已成为世界上儿童生存最危险的地方。据半岛电视台报道,平均每45分钟就有一名孩子死去。战前,加沙约有230万人口,其中一…

视频监控联网系统GB28181协议中事件通知流程详解以及通知失败常见原因

文章目录 9.11.2 事件通知9.11.2.1 基本要求9.11.2.2 命令流程 国标28181协议事件通知失败常见原因1. 协议规范不符合2. 网络与配置问题 智联视频超融合平台介绍 9.11.2 事件通知 9.11.2.1 基本要求 事件订阅通知满足以下基本要求&#xff1a; a) 事件源接受事件订阅后&…

余承东:我把牛吹在这 鸿蒙智驾第一 引领智能驾驶新时代

2025(第三届)未来汽车先行者大会于5月31日至6月1日在深圳国际会展中心(宝安)举办。华为常务董事、终端BG董事长余承东出席并发表演讲。在谈到智能驾驶时,余承东表示:“鸿蒙的智能驾驶不是第一阵营,而是第一名。我们有信心能持续保持并扩大领先优势。”他还提到,华为曾经…

从翻译后修饰角度解析人工合成途径与底盘细胞的适配性-文献精读136

Compatibility between synthetic pathway and chassis cells from the viewpoint of post-translational modifications 从翻译后修饰角度解析人工合成途径与底盘细胞的适配性 摘要 揭示工程化设计的人工合成途径与底盘细胞整体代谢网络的交互作用及适配性机制是合成生物学研…

中国足球队勇夺世界杯(非虚构) 机器人赛场上的辉煌

中国队大胜德国队,勇夺世界杯。不过这是机器人世界杯。今年3月,“清华火神队”以9:0战胜东道主德国Sweaty队,夺得RoboCup机器人世界杯德国公开赛类人组(成人尺寸组别)的冠军。这支冠军足球队的“球员”是北京加速进化科技有限公司研发的加速T1机器人。不只是踢足球,今年可…

孙思蓓自由式小轮车世界杯夺冠 中国选手包揽佳绩

自由式小轮车世界杯法国站女子决赛于当地时间5月31日落幕,孙思蓓以93.10分的成绩夺冠。邓雅文、周钰薇、夏皇耀和赵淑华也进入了决赛,分别获得了第4、7、8和12名。责任编辑:zhangxiaohua

【 Redis | 完结篇 缓存优化 】

前言&#xff1a;本节包含常见redis缓存问题&#xff0c;包含缓存一致性问题&#xff0c;缓存雪崩&#xff0c;缓存穿透&#xff0c;缓存击穿问题及其解决方案 1. 缓存一致性 我们先看下目前企业用的最多的缓存模型。缓存的通用模型有三种&#xff1a; 缓存模型解释Cache Asi…

深入理解8086汇编:串传送、寻址、循环与引导扇区编程

在计算机底层编程中&#xff0c;汇编语言是不可或缺的工具。今天我们将通过一个8086汇编的引导扇区程序&#xff0c;详细讲解串传送指令、寄存器与寻址方式、循环控制以及标志寄存器等核心知识点。这个程序会在屏幕上显示一段文本和一个数字&#xff08;初始为0&#xff09;&am…

87万元现金遗落高铁车站 20分钟极速寻回

端午佳节,南粤大地人潮涌动,深圳北站迎来了52万人次的出发到达旅客。在这场流动的节日图景中,一场关乎87万元现金的“物品寻亲记”悄然上演。铁路工作人员以20分钟的高效协作,让失散的巨额财物与主人重新团聚,在传统节日里书写下新的温暖刻度。5月31日9时41分,深圳北站客…

德国汉堡一医院发生火灾致3死54伤

△图片来源:HamburgNews德国汉堡市霍恩费尔德区一医院6月1日凌晨发生火灾,造成3名患者死亡、54人受伤。目前,火灾发生原因仍在调查中。据德新社报道,大火发生在该医院专门诊治老年患者的科室一楼,并蔓延至二楼。除3人死亡外,还有两名伤者生命垂危,另有16人重伤、36人轻伤…

女子吃了半根甘蔗确诊美女病 颞下颌关节紊乱

23岁的杭州姑娘小吴自从两个月前啃了半根甘蔗后,嘴巴忽然张不开了。她只能吃软的、流质的食物,一嚼就痛,已经两个月没能好好吃饭了。在杭州市中医院针灸康复科的诊室里,小吴愁眉苦脸,因为疼痛,说话也有些痛苦。磁共振检查结果显示,小吴颞下颌关节盘不可复性前移位,属于…

长春一龙舟S型走位直冲岸边 引发游客欢笑

5月31日,正值端午佳节,长春2025端午龙舟赛在伊通河上拉开帷幕。比赛河畔长约300米,挤满了前来观赛的游客。上午11时左右,随着哨声响起,两条龙舟敲鼓出击。1号龙舟一马当先,几秒钟内便遥遥领先。然而,此时岸边传来阵阵笑声,4号龙舟驶离起点后竟然走起了S型路线。许多游客…

孙中山长孙女在美去世 享年103岁 家人举办追思会

2025年5月,孙中山的长孙女孙穗瑛在美国加州举行了追思会。孙穗瑛于2025年3月24日在美国去世,享年103岁。家人为她举办了追思会,回顾了她的一生。孙穗瑛1922年1月16日出生于中国广州,父亲是孙中山长子、时任广州市长的孙科,母亲为陈淑英。她的两位兄长孙治平、孙治强及妹妹…

Blender的一些设置

1. 将Blender长度单位改为毫米(mm), 并设置guides Grid的缩放系数&#xff0c;避免网格不见了。 2. 布尔操作的(Apply)应用按钮在哪里&#xff1f;好吧&#xff0c;在这里&#xff1a; 可以按下 CTRL A 快捷键。 3. 移动、旋转、缩放快捷键: G&#xff0c;R&#xff0c;S

34岁姑娘去世捐出能用的器官 爱与希望的传递

“别人救过我的命,我也想帮帮别人!”这是34岁的武汉姑娘宁馨生前最常说的一句话。10个月前,一场肾移植手术将她从尿毒症的死亡边缘拉回。5月30日凌晨4时50分,她的生命定格,却以另一种方式重启——捐出肝脏、心脏和一对角膜,至少让3人重获新生。手术开始前,全体医务人员面…