Vectors, vectors everywhere
Modern websites contain a lot of cute images. Now it is popular to use vector graphics (they use lines, points, and polygons to represent an image) which are scalable without losing the quality, usually simple and designed in a flat manner. Steps are well-known: design a masterpiece, save as a vector image, upload and admire.
This is an example of the vector image. When you change the size of the image or zoom in/out - the image does not lose the quality. Pretty nice, huh?
Do you know that when can add one more operation between save and upload, you will decrease uploading time, you could upload more images on your hosting and improve user experience without the lose of the quality at all?
What is optimising?
A definition form the dictionary:
optimization /ɒptɪmʌɪˈzeɪʃ(ə)n/ - the action of making the best or most effective use of a situation or resource
In computer graphics it is mostly about reducing the size of the image by eliminating unnecessary image resources. The smaller image size is, the quicker is downloaded by the user’s device, your hosting is used less and the whole user experience is improved.
SVG - a vector image
Let’s create an image. For that purpose I will use Gravit Designer which is free and you can even use it in the browser.
One of the most popular vector images format is
SVG so export the image and save as a
SVG file. The output file size is
SVG file is a
XML file, so you can easily edit it using normal text editor and change same values etc. “Beautified” code (with nice indents) of this image file looks like that:
<?xml version="1.0" standalone="no"?>
<!-- Generator: Gravit.io -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 560 315" width="560" height="315">
<clipPath id="_clipPath_YegyOi5h4pIbcFU6rpeBjkWrMAei2if2"><rect width="560" height="315"/></clipPath>
<g clip-path="url(#_clipPath_YegyOi5h4pIbcFU6rpeBjkWrMAei2if2)"><rect x="172.395" y="92.546" width="149" height="151" transform="matrix(1,0,0,1,0,0)" fill="rgb(49,151,109)"/><polygon points="368.395,96.546,387.605,261.454,235.185,195.637" fill="rgb(18,116,221)"/><circle vector-effect="non-scaling-stroke" cx="311.3948822334847" cy="103.54551732809568" r="50" fill="rgb(217,28,28)"/></g>
It is nice, file is small but can it be improved?
One of the tool is SVGO. It needs
npm which is included in
Node.js so you need to install it before (
$ brew install node for
macOS). After that you can install SVGO using command
$ npm install -g svgo. Now you can use it, let’s do it in a lazy way - with a default option:
<svg xmlns="http://www.w3.org/2000/svg" style="isolation:isolate" width="560" height="315"><defs><clipPath id="a"><path d="M0 0h560v315H0z"/></clipPath></defs><g clip-path="url(#a)"><path fill="#31976D" d="M172.395 92.546h149v151h-149z"/><path fill="#1274DD" d="M368.395 96.546l19.21 164.908-152.42-65.817z"/><circle vector-effect="non-scaling-stroke" cx="311.395" cy="103.546" r="50" fill="#D91C1C"/></g></svg>
|Size of the file||Size of the file after the optimization||Difference|
The output of that command is the image with the size of
411 bytes so we save
318 bytes. Maybe it is not so much but when you think about the percentage it is about
44%! Imagine that your whole asset of the images on the website is
10 megabytes. It will be
5.6 megabytes, the website can be downloaded by the user’s browser about
x2 faster! Or you can store
x2 more content on your website’s hosting without paying more for the extra storage. 😉
This is not the only solution. If you like something with the User Interface, there is the on-line tool called SVGOMG.
You can adjust the parameters and see the live results. Feel free to find more tools but I recommend starting with something simple, verified and used by the community (which are described here).
Can it be even better?
Yes! First of all you need to think about simplifying your designed graphics, removing not needed elements, choosing the right file type for that image, reducing number of colors, using appropriate dimensions and more… And after that: optimize image. Moreover I described only one format:
SVG. There are other tools for the different formats.
Writing about it is a perfect idea for the new blog post in the future. 🙂
- Optimized graphics in lossless way are better than default, non-optimized version: the same quality and smaller size.
- Start with something simple like just run one command
$ svgo image.svg. This solution is good enough at the beginning.
- Save your hosting space and quickly improve user experience in a easy way!