我正在寻求有关创建代码的最简单方法的建议,该代码将生成具有透明度的 PNG 图像轮廓的路径 (SVG)。它可以是 Python 脚本,也可以是命令行命令(image magick、potrace 等)。
这是一个例子。我有 PNG 透明文件,我想获取切割设备轮廓的路径。
编辑:我扫描图像的每一面以找到第一个不透明像素(红点)
然后我在每个点之间画线并修剪太长的线。
最后一步是在 alpha 通道上找到轮廓。
对于明星来说,看起来相当不错
好的,我弄清楚了如何创建PNG 的轮廓并获取轮廓点。 现在我有了大约的轮廓。如何在这些点之间创建平滑的弯曲 SVG 路径?
import cv2
from svgwrite import Drawing
image = cv2.imread('output.png', cv2.IMREAD_UNCHANGED)
if image.shape[2] == 4:
alpha_channel = image[:, :, 3]
_, mask = cv2.threshold(alpha_channel, 1, 255, cv2.THRESH_BINARY)
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
largest_contour = max(contours, key=cv2.contourArea)
epsilon = 0.001 * cv2.arcLength(largest_contour, True)
approx = cv2.approxPolyDP(largest_contour, epsilon, True)
cv2.drawContours(image, [approx], -1, (255, 123, 0), 3)
for point in approx:
cv2.circle(image, tuple(point[0]), 5, (255, 0, 0), -1) # Draw points in red
cv2.imshow('Test', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
#path_data = ...
#dwg = Drawing('output.svg', profile='tiny')
#dwg.add(dwg.path(d=path_data, fill="none", stroke="black", stroke_width=1))
#dwg.save()
print("End")
else:
print("No alpha")
结果应该是这样的