jzbrooks / vgo

vector graphic optimization
MIT License
43 stars 2 forks source link

vgo

vgo is a tool for optimizing and converting between vector artwork representations.

vgo is built on vgo-core, a library and intermediate representation for vector graphics.

Build Status Maven Central: vgo Maven Central: vgo-core Maven Central: vgo-plugin

Installation

Homebrew

brew install jzbrooks/repo/vgo

Manually

Download the distribution from the releases page and ensure it has execute permission. On macOS & Linux run chmod u+x vgo.

vgo requires Java 17.

Gradle Plugin

The plugin adds the shrinkVectorArtwork task to your project.

To incorporate the plugin in your build, configure maven central plugin resolution:

pluginManagement {
    repositories {
        mavenCentral()
        gradlePluginPortal()
    }
}

Then, in the relevant project, add the plugin.

[!NOTE] You must have the android tools sdk on your build classpath if you are converting SVGs to vector drawables. This is typically done by applying the Android Gradle Plugin.

plugins {
    id 'com.jzbrooks.vgo'
}

// Default configuration shown
vgo {
    inputs = fileTree(projectDir) {
        include '**/res/drawable*/*.xml'
    }
    outputs = inputs
    showStatistics = true
    format = OutputFormat.UNCHANGED
    indent = 0
}

[!TIP] For Android projects a non-zero indent is better for readability and provides no apk size impact after AAPT processing.

Command Line Interface

> vgo [options] [file/directory]

Options:
  -h --help       print this message
  -o --output     file or directory, if not provided the input will be overwritten
  -s --stats      print statistics on processed files to standard out
  -v --version    print the version number
  --indent [value]  write files with value columns of indentation
  --format [value]  output format (svg, vd, etc) - ALPHA

java -jar vgo for Windows

Examples

# Optimize files specified from standard in
> find ./**/ic_*.xml | vgo

# Optimize vector.xml and overwrite its contents
> vgo vector.xml

# Optimize vector.xml and write the result into new_vector.xml
> vgo vector.xml -o new_vector.xml

# Optimize multiple input sources write results to the
> vgo vector.xml -o new_vector.xml ./assets -o ./new_assets

Build instructions

This project uses the Gradle build system.

To build the binary: ./gradlew binary

To run the tests: ./gradlew check

To see all available tasks: ./gradlew tasks