Find file Copy path
116f089 Oct 11, 2017
1 contributor

Users who have contributed to this file

46 lines (37 sloc) 1.99 KB
layout title date categories icon permalink
Using SVG to Shrink Your PNGs
2014-09-06 17:00:00 -0700

Wouldn’t it be great if you could get the compression of a JPEG and keep the transparency of a PNG? Well, you can, sort of. Here’s a little trick that I discovered while working on the new Sapporo Beer website.

![Saporro Beer]({{ site.baseurl }}/images/sapporo.jpg)

Notice how the beer can on the Sapporo website has a transparent area (it’s hard to notice but there’s a video playing behind it). As a PNG, the beer can graphic would have been over 1.2 MB! So how did I get it down to 271KB?

First, I created two files. The first is a regular JPEG without any transparency. You can compress this one as much as you like. The second is an 8-bit PNG (alpha mask). This is just a black and white image that represents the transparent areas of the beer can. Notice how the PNG is only 11KB; that’s because it contains so few colors and no transparency.

![Files]({{ site.baseurl }}/images/2files1.jpg)

Next, I created a little snippet of inline SVG:

<svg viewBox="0 0 560 1388">
    <mask id="canTopMask">

Here I am loading the two images inside an SVG container. The alpha channel image is included as a mask which is then applied to the JPEG to create the transparent region. The result? A transparent image with JPEG compression!


  • To work in most browsers the SVG must be inline. You can’t move it into an external file and load it with an <img> tag.
  • No IE8 support
  • Masks don’t work in older versions of Android