
背景需求
在以下的大小蝴蝶裁剪过程中,遇到三个问题:
【教学类-102-17】蝴蝶三色图(,用最大长宽作图,填入横板和竖版共16个WORD单元格模版大小,制作大小图。原图是横长方形)-CSDN博客文章浏览阅读942次,点赞21次,收藏19次。【教学类-102-17】蝴蝶三色图(,用最大长宽作图,填入横板和竖版共16个WORD单元格模版大小,制作大小图。原图是横长方形)
https://blog.csdn.net/reasonsummer/article/details/147423089?spm=1011.2415.3001.5331
1、提升裁剪效率:幼儿希望能对折再剪。

2、图案缩小后,灰色看不见:点状虚线用灰色,在小图时就会看不见边缘虚线了。

3、点状虚线弯曲厉害,剪起来容易坏。

到了小图中,这种弯曲导致剪起来更困难。

新需求:
1、蝴蝶图案上下中点添加中线
2、点状虚线从灰色变成黑色,点子直径变大
3、白色描边变宽,降低点状虚线弯曲度
用deepseek添加一个中线图的代码


代码展示
'''
优化版
剪纸外轮廓描边虚线制作(黑点虚线)沿线剪——最终稳定版
将图片变成三色(透明、黑色、蓝色)或黑白色也可以
先把255白背景图片背景部分白色放大,然后(蝴蝶)做成透明图,及点状虚线,透明\切边\统一大小,保存1图2图4图24图,虚线与上下左右有空隙
黑线在透明与非透明交界线上,透明部分5磅,非透明不放呢5磅,
将非透明部分改成纯白色,没有任何灰色。
将三色图的外轮廓和内部花纹边线都显示出来。
三种线(花纹线、轮廓线、点状虚线)都可以单独设置颜色灰度和粗细。
竖版图(瓶子都是竖长条,尝试获取所有图片的最大长宽,制作来统一背景图),再插入竖版1图2图4图8图
选择1,获取统一图大小,修改WORD里面单元格样式。
选择2,把统一图做到WORD多图内(横板8种,竖版8种))
将竖图选择高的部分转化成宽度,进行文件名标注.便于按照图片本体宽度从大到小排列
再图片上添加中线虚线,便于对折。对称剪。
扩大描边,减少弯曲度,降低裁剪难度
点状虚线从灰色变成黑色,点子直径更大
deepseek,阿夏
20250423
'''
from PIL import Image, ImageDraw
import os
import math
x=int(input('1.统一图,2、多图\n'))
print('------0、基本信息-----')
# 主路径
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20250401边缘线剪纸'
# path=r'D:\图片\20240614蛋筒彩蛋
# 图片夹名称
a='15'
b='蝴蝶三色'
c='实线花纹白色图'
# 保存
all=path+fr'\{a}_10{b}合并图'
# 参数设置
# 1、内部花纹框
# 花纹边框颜色((内部)
cchw=240
# 调整蓝色区域边框宽度(像素)
blue_width = 4
# 2、轮廓线
# 轮廓线黑线边框颜色(中间150,150,150)
ccn=100
# 轮廓线的宽度
mb_border_width = 10 # 黑边宽度(像素)
w=int(mb_border_width/2) # 内5外5
# 3、点状虚线裁剪边
# 点状虚线边框颜色(外边)
ccw=180
# 白色描边宽度(像素)轮廓线外层
white_border_width = 100
# 黑点直径(像素)
dot_size = 20
# # 黑点间距(像素)增加间距确保均匀分布
dot_spacing = dot_size * 2
# 4、裁剪时不保留额外透明边距
transparent_edge = 10 # 裁剪时不保留额外透明边距
# 5、画布尺寸放大
target_width = 2000 # 统一宽度
target_height =target_width # 统一高度
background_expand = 1000 # 白色背景放大尺寸
# 6、添加中线虚线(折痕)
# Parameters for center line
# 中线参数
xxx=180# 颜色
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 # 原始图片文件夹
cropped_folder = os.path.join(path,f'{a}_06{b}{c}切边') # 裁剪后的透明图片
final_folder = os.path.join(path,f'{a}_07{b}{c}切边统一图')
center_line_folder = os.path.join(path, f'{a}_08{b}{c}中线图')
# 创建输出文件夹
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(cropped_folder, exist_ok=True)
os.makedirs(final_folder , exist_ok=True)
os.makedirs(transparent_folder, exist_ok=True)
os.makedirs(output_folder, exist_ok=True)
os.makedirs(center_line_folder, exist_ok=True)
# 灰线深浅测试
# for cr3 in range(cchw,cchw+10,10):
# 黑色边框颜色# 灰色
if x==1:
# 中线(内)
rrw=ggw=bbw=ccw
rrn=ggn=bbn=ccn
rrh=ggh=bbh=cchw
rrx=ggx=bbx=xxx
# rrn,ggn,bbn=ccn,ccn,ccn
# # 花纹边框颜色# 灰色
# 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))
elif item[0] == 254 and item[1] == 255 and item[2] == 255:
new_data.append((254, 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(t