svg / svgo

⚙️ Node.js tool for optimizing SVG files
https://svgo.dev/
MIT License
20.61k stars 1.38k forks source link

[convertPath]: combine arcs and convert full arcs to circles #1748

Open jguddas opened 1 year ago

jguddas commented 1 year ago

Is your feature request related to a problem? Please describe. There is already logic that merges curves into arcs, but it only works with curves and not a mix of curves and arcs.

Describe the solution you'd like

  1. Convert all arcs with rx == ry to curves before running the curve merge logic
  2. Convert all curves to arcs and replace the curve merge logic with an arc merge variant.

Additional context Also, 2 half circles could be converted to a circle element. This could use the same logic, but might be better placed in a separate plugin.

- <path d="M8 10a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z"/>
+ <circle cx="8" cy="8" r="2"/>
jguddas commented 7 months ago

@SethFalco I have a working version here, code is not in the shape svgo expects and a bit of a mess tho.

Example: https://lucide-site-git-feat-added-edit-page-jguddas.vercel.app/edit

KTibow commented 7 months ago

Is this intended? image gets optimized to image

jguddas commented 7 months ago

@KTibow Looks like you found a bug, did a quick test, that bug only exists in the deployed version.

I haven't had the time to clean things up and deploy the newest version, I can reproduce it on the hosted version but locally (with the code in the branch that I have linked) it works.

GreLI commented 4 weeks ago

There is a trick to do circles with one arc instead of two arcs by making a tiny step like 0.01 pixel. It makes even shorter paths than circle.