
背景需求
前期用青蛙PNG图片做了点状边框
【教学类-102-03】自制剪纸图案(留白边、沿线剪)03——Python制作白色描边和黑点虚线间隔(透明png图片)-优快云博客文章浏览阅读898次,点赞39次,收藏3次。【教学类-102-03】自制剪纸图案(留白边、沿线剪)03——Python制作白色描边和黑点虚线间隔(透明png图片)
https://blog.youkuaiyun.com/reasonsummer/article/details/147002991?spm=1011.2415.3001.5331
【教学类-102-04】自制剪纸图案(留白边、沿线剪)04——Python制作白色描边和黑线虚线间隔(透明png图片)-优快云博客文章浏览阅读350次,点赞10次,收藏2次。【教学类-102-04】自制剪纸图案(留白边、沿线剪)04——Python制作白色描边和黑线虚线间隔(透明png图片)
https://blog.youkuaiyun.com/reasonsummer/article/details/147022408?spm=1011.2415.3001.5331
但是我前期大部分图片都是用PS填充(255,255,255)白色背景,并没有把背景变成PNG透明。

因此需要
1、先识别255,255,255的图像坐标(10-01)
2、把255,255,255的地方改成透明色"RGBA"(10-02)
3、根据透明部分与非透明部分交界线,添加点状虚线(10-03)或线状虚线(10-04)。

代码一:点状虚线
'''
先把白色背景改成透明,然后在添加点状虚线
剪纸外轮廓描边虚线点制作(黑点)沿线剪——平均边缘点子的距离(最终效果)
deepseek 阿夏
20250407
'''
from PIL import Image, ImageDraw
import os
import math
# 先把图片被色部分变成透明
'''
图片透明
'''
from PIL import Image
import os
def process_image(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, 0, 0, 0))
else:
new_data.append(item)
img.putdata(new_data)
return img
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20250401边缘线剪纸'
in_folder = path+r'\10_01蛋糕白背景'
input_folder = path+r'\10_02蛋糕透明背景'
os.makedirs(input_folder,exist_ok=True)
for file_name in os.listdir(in_folder):
if file_name.endswith(".png") or file_name.endswith(".jpg") or file_name.endswith(".jpeg"):
input_file_path = os.path.join(in_folder, file_name)
input_file_path = os.path.join(input_folder, file_name)
processed_image = process_image(input_file_path)
processed_image.save(input_file_path)
# 搜索变
# 白边宽度(像素)
white_border_width = 30
# 黑点直径(像素)
dot_size = 10
# 黑点间距(像素)
dot_spacing = dot_size*2 # 增加间距确保均匀分布
def get_edge_pixels(image):
"""获取图像中不透明像素与透明像素交界的边缘像素坐标"""
edge_pixels = []
pixels = image.load()
width, height = image.size
for 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)]: