Giter Club home page Giter Club logo

svgcleaner's Introduction

svgcleaner Build Status

svgcleaner helps you clean up your SVG files, keeping them free from unnecessary data.

Table of Contents

Purpose

The main purpose of svgcleaner is to losslessly reduce the size of an SVG image, created in a vector editing application, before publishing.

Usually more than half of an SVG image's data is useless for rendering. For example:

  • Temporary data used by the vector editing application
  • Non-optimal SVG structure representation
  • Unused and invisible graphical elements

... Are all unnecessary in a published SVG.

Goals

  1. Correctness - svgcleaner should not break an SVG file
  2. Cleaning ratio - Higher is better
  3. Performance - An average SVG file processing time should be closer to ~1ms on a modern PC

Alternatives

In addition to the obvious advantages of svgcleaner โ€” like correctness, cleaning ratio and performance, which are described below โ€” there are some more nuances to be aware of:

  1. svgcleaner cleans only one SVG file. It doesn't process SVGZ files. It doesn't process directories. It doesn't do anything else. Just one task*.
  2. svgcleaner is strictly lossless. There are no destructive cleaning options.
  3. svgcleaner is portable. You can build it into a single executable without any external dependencies.

* You can get all of these features using the GUI.

Charts

See 'Testing notes' for details.

All stats were collected using the latest release version.

Correctness

Less is better.

Alt text

* Most of the errors were due to incorrect font-face processing. Without including font-based errors, scores were:

  • svgo: 100
  • scour: 78

Alt text

* Errors produced by numeric rounding were ignored.

Cleaning ratio

More is better.

Alt text

* Note that svgo and scour break most of the files.


Alt text

Cleaning time

Less is better.

Alt text

Alt text

Other

Collection Size Before (MiB) Size After (MiB) Ratio (%)
Breeze icons theme 21.72 11.09 48.91
Ardis icons theme 11.82 5.23 55.74
Humanity icons theme 8.56 3.08 64.01
Open Icon Library 207.45 69.44 66.53
Elementary icons theme 17.72 7.09 59.95
Adwaita icons theme 2.21 0.37 83.08
Faience icon theme 22.35 11.14 50.16
GCP Icons 0.344 0.082 75.9

You can find more tests, with detailed explanations of errors, here.

Limitations

svgcleaner shouldn't change your file unless you tell it to, but there are still things that can't be preserved. So even if you disable all cleaning options there are still things that will be changed, such as:

  • Original indent is not preserved
  • All colors will be formatted as #RRGGBB and #RGB
  • DOCTYPE, CDATA will be processed and removed
  • CSS support is minimal
  • CSS from the style element will be extracted and processes. The style element will be removed.
  • The style attribute will be split into attributes
  • The class attribute will be processed and removed
  • Paths and transformations will be reformatted
  • currentColor and inherit attributes values will be resolved
  • Referenced elements will be moved to the defs element
  • IRI and FuncIRI attributes that reference non-existing objects will be removed
  • If the offset attribute value of the stop element is represented as percentage - it will be converted into a decimal number

Usage

CLI

svgcleaner in.svg out.svg

Change default options:

svgcleaner --indent=2 --paths-coordinates-precision=5 --join-arcto-flags=yes in.svg out.svg

Use --help for a list of the cleaning options and see the doc for more details.

GUI

You can get a GUI here.

Downloads

You can get prebuilt packages here.

Building

Dependency: Rust >= 1.13

cargo build --release

If you're a Rust programmer, you can install svgcleaner using:

cargo install svgcleaner

Contributing and Issues

See CONTRIBUTING.md for details.

License

svgcleaner is licensed under the GPL-2.0.

svgcleaner's People

Contributors

razrfalcon avatar hexcube avatar freelance-tech-writer avatar johncoates avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.