我和我的团队在从多边形生成位图时遇到问题。为了尝试足够快地生成多边形,我们尝试了几种不同的解决方案,并发现生成SVG路径,然后使用CairoSVG作为对我们而言最好的解决方案。我们使用奇偶规则填充多边形。如果我用错误的方式描述所有内容,我深表歉意,我是SVG的新手。路径创建为:
path_entry = f'<path fill="rgb{rgb_color}" fill-rule="evenodd" d="{svg_path}"/>'
带标题
<svg
xmlnsXlink="http://www.w3.org/2000/svg"
preserveAspectRatio="xMinYMin meet"
style="color:green;"
>
我们仅允许位图具有一组颜色值。像素的值应为其内部的多边形的值。我们遇到的一个问题是多边形的边缘会“分裂”像素,即像素可以同时位于多边形A和多边形B的边缘/内侧。请参见下图,其中黑色,绿色和灰色之间的边缘区域混合了颜色。
我们目前已通过查找没有允许颜色的每个像素来解决此问题。然后,根据该站点上的解决方案,我们使用numpy roll将其像素的值填充为其邻居的值。
for shift in (-1,1):
for axis in (0,1):
a_shifted=np.roll(bitmap_only_correct_colors,shift=shift,axis=axis)
idx=~a_shifted.mask * bitmap_only_correct_colors.mask
bitmap_only_correct_colors[idx]=a_shifted[idx]
此解决方案的问题是对角线多边形较细,厚度为1-2像素。这些多边形的所有像素均获得混合值,因此将其删除。这将导致部分删除细多边形,从而形成虚线而不是实线,请参见下图。
我的问题是:我们可以解决多边形不以其他方式获得固定值的问题吗?最好的解决方案是在生成图像之前向SVG文档添加某种设置。
谢谢!
关闭抗锯齿功能,即设置shape-rendering =“ crispEdges”。有关此CSS属性的更多详细信息,请参见SVG specification。