[使用SVG + CairoSVG生成位图时的边值问题

问题描述 投票:0回答:1

我和我的团队在从多边形生成位图时遇到问题。为了尝试足够快地生成多边形,我们尝试了几种不同的解决方案,并发现生成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的边缘/内侧。请参见下图,其中黑色,绿色和灰色之间的边缘区域混合了颜色。

The edge between the black, green and grey area gets a mixed color.

我们目前已通过查找没有允许颜色的每个像素来解决此问题。然后,根据该站点上的解决方案,我们使用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像素。这些多边形的所有像素均获得混合值,因此将其删除。这将导致部分删除细多边形,从而形成虚线而不是实线,请参见下图。

enter image description here

我的问题是:我们可以解决多边形不以其他方式获得固定值的问题吗?最好的解决方案是在生成图像之前向SVG文档添加某种设置。

谢谢!

svg colors bitmap polygon
1个回答
0
投票

关闭抗锯齿功能,即设置shape-rendering =“ crispEdges”。有关此CSS属性的更多详细信息,请参见SVG specification

© www.soinside.com 2019 - 2024. All rights reserved.