svgo icon indicating copy to clipboard operation
svgo copied to clipboard

altered paths

Open nschloe opened this issue 2 years ago • 3 comments

Running

svgo in.svg

on

in

gives

in-opti

This is with svgo 3.0.4.

nschloe avatar Nov 29 '23 13:11 nschloe

Hey! Thanks for reporting the issue.

The issue is caused due to rounding. By default, SVGO reduces the precision of floating-point numbers to 5 decimal places.

In most cases, this is fine. However, in this SVG some of the numbers are super inflated, with matrixes applied that are really miniscule.

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 673 205">
  <path d="M0 0L6235704.138785 2260595.537351" transform="matrix(0.0000431728,0,0,0.0000431865,60.47463,20.8221)" stroke-width="12700" stroke="black"/>
</svg>

Here is a trimmed down version of the SVG that showcases the issue. See how the path commands use numbers like 6,235,704, and then to scale it down to fit in the viewport a transform is applied using numbers like 0.0000431728. The 0.0000431728 is being rounded down to 0.00004. With numbers at this scale, this ends up making a significant difference.

For now, a workaround you can do is increase the transform precision of the convertTransform plugin. You can create the following config in the directory you're running the command in, then try again.

svgo.config.js

module.exports = {
  plugins: [
    {
      name: "preset-default",
      params: {
        overrides: {
          convertTransform: {
            transformPrecision: 10
          }
        }
      }
    }
  ]
}

SethFalco avatar Nov 29 '23 23:11 SethFalco

Interesting! Is there a way to disable the float clipping entirely?

nschloe avatar Nov 30 '23 07:11 nschloe

As far as I know (reviewing documentation and the current implementation) we don't have anything to disable the rounding entirely. (Apart from disabling the plugin.)

Later, I can review if we should allow passing false to precision parameters to disable modifying the value for floating points at all, beyond trimming redundant zeros and the like.

SethFalco avatar Nov 30 '23 12:11 SethFalco