Цель атрибута crispEdges
состоит в том, чтобы подчеркнуть контраст между краями на изображении, а не в том, чтобы штрихи рисовались с одинаковой шириной.
Возможно, вы захотите использовать geometricPrecision
вместо этого.Однако, если по какой-то причине важно использовать четкие края, попробуйте нарисовать линии с такими же градиентами и выровнять их начальную / конечную точки по пиксельной сетке (в идеале, смещение на 0,5 пикселя).
Вот вашSVG, с небольшими изменениями, обеспечивающими постоянство ширины хода:
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="80" shape-rendering="crispEdges" stroke-linecap="square" stroke="rgb(0,0,0)" stroke-width="1">
<rect id="background" x="0" y="0" width="300" height="80" fill="rgb(255,255,255)" stroke-width="0"/>
<line x1="0.5" y1="71.5" x2="71.5" y2="0.5"/>
<line x1="71.5" y1="0.5" x2="142.5" y2="71.5"/>
<line x1="142.5" y1="71.5" x2="213.5" y2="0.5"/>
<line x1="213.5" y1="0.5" x2="284.5" y2="71.5"/>
</svg>