-
SVGOMG
- Inspect Element
- copy svg – /svg
- paste makeup into this url:
jakearchibald.github.io/svgomg/
- Download SVG
- It may not open in Illustrator
- Use “Inkscape” to open
- export as pdf
- then open in Illustrator
SVGO – svg compressor
https://wpengine.com/resources/jquery-wordpress/
SVG Optimizer is a Node.js-based tool for optimizing SVG vector graphics files.
Why?
SVG files, especially those exported from various editors, usually contain a lot of redundant and useless information. This can include editor metadata, comments, hidden elements, default or non-optimal values and other stuff that can be safely removed or converted without affecting the SVG rendering result.
Installation
npm -g install svgo
or
yarn global add svgo
CLI usage
svgo one.svg two.svg -o one.min.svg two.min.svg
Or use the --folder
/-f
flag to optimize a whole folder of SVG icons
svgo -f ./path/to/folder/with/svg/files -o ./path/to/folder/with/svg/output
See help for advanced usage
svgo --help
Configuration
Some options can be configured with CLI though it may be easier to have the configuration in a separate file. SVGO automatically loads configuration from svgo.config.js
or module specified with --config
flag.
module.exports = {
multipass: true, // boolean. false by default
datauri: 'enc', // 'base64', 'enc' or 'unenc'. 'base64' by default
js2svg: {
indent: 2, // string with spaces or number of spaces. 4 by default
pretty: true, // boolean, false by default
}
}
SVGO has a plugin-based architecture, so almost every optimization is a separate plugin. There is a set of built-in plugins. See how to configure them:
module.exports = {
plugins: [
// enable a built-in plugin by name
'builtinPluginName',
// or by expanded version
{
name: 'builtinPluginName'
},
// some plugins allow/require to pass options
{
name: 'builtinPluginName',
params: {
optionName: 'optionValue'
}
}
]
}
The default list is fully overridden if the plugins
field is specified. To extend the default list use the extendDefaultPlugins
utility:
const { extendDefaultPlugins } = require('svgo');
module.exports = {
plugins: extendDefaultPlugins([
{
name: 'builtinPluginName',
params: {
optionName: 'optionValue'
}
}
])
}
To disable one of the default plugins use the active
field:
const { extendDefaultPlugins } = require('svgo');
module.exports = {
plugins: extendDefaultPlugins([
{
name: 'builtinPluginName',
active: false
}
])
}
See the list of the default plugins:
module.exports = {
plugins: [
'removeDoctype',
'removeXMLProcInst',
'removeComments',
'removeMetadata',
'removeEditorsNSData',
'cleanupAttrs',
'inlineStyles',
'minifyStyles',
'cleanupIDs',
'removeUselessDefs',
'cleanupNumericValues',
'convertColors',
'removeUnknownsAndDefaults',
'removeNonInheritableGroupAttrs',
'removeUselessStrokeAndFill',
'removeViewBox',
'cleanupEnableBackground',
'removeHiddenElems',
'removeEmptyText',
'convertShapeToPath',
'convertEllipseToCircle',
'moveElemsAttrsToGroup',
'moveGroupAttrsToElems',
'collapseGroups',
'convertPathData',
'convertTransform',
'removeEmptyAttrs',
'removeEmptyContainers',
'mergePaths',
'removeUnusedNS',
'sortDefsChildren',
'removeTitle',
'removeDesc'
]
}
It's also possible to specify a custom plugin:
const anotherCustomPlugin = require('./another-custom-plugin.js')
module.exports = {
plugins: [
{
name: 'customPluginName',
type: 'perItem', // 'perItem', 'perItemReverse' or 'full'
params: {
optionName: 'optionValue',
},
fn: (ast, params, info) => {}
},
anotherCustomPlugin
]
}
API usage
SVGO provides a few low level utilities. extendDefaultPlugins
is described above.
optimize
The core of SVGO is optimize
function.
const { optimize } = require('svgo');
const result = optimize(svgString, {
// optional but recommended field
path: 'path-to.svg',
// all config fields are also available here
multipass: true
})
const optimizedSvgString = result.data
loadConfig
If you write a tool on top of SVGO you might need a way to load SVGO config.
const { loadConfig } = require('svgo');
const config = await loadConfig()
// you can also specify a relative or absolute path and customize the current working directory
const config = await loadConfig(configFile, cwd)