- From: Behdad Esfahbod <behdad@google.com>
- Date: Fri, 22 Aug 2014 20:37:39 -0400
- To: "public-svgopentype@w3.org" <public-svgopentype@w3.org>
- Message-ID: <CAOY=jUR5PjBmgZUfYz6-DKeNfp9zrSW=VsfTL=tun44e0fgScw@mail.gmail.com>
On Fri, Aug 22, 2014 at 7:50 PM, Behdad Esfahbod <behdad@google.com> wrote: > > - Noto Color Emoji SVG sources are not public: > Err. I meant: "are **now** public". > https://code.google.com/p/noto/source/browse/#git%2Fcolor_emoji%2Fsvg > > - I put together the country (region) flag SVGs from Public Domain > Wikimedia Commons into a project: > > https://github.com/behdad/region-flags > > Next logical step was to build a Noto Color Emoji SVG+OpenType font, and > I've been researching that. Which brings me to the second issue: size > > Unfortunately, as opposed to desktop (size not an issue) and web (WOFF is > compressed), on mobile devices, eg, Android, we really care about font > size. So I researched optimizing SVGs a bit, and I've found svgo, which > seems to be quite impressive: > > https://github.com/svg/svgo > > However, no amount of optimization can address the fact that in current > SVG table, SVGs are stored as plain text. So I want to suggest that we > address that by introducing a binary version of the SVG table. > > Now, one can argue that this is not a problem as compressing the whole > fonts or using WOFF is a possibility. However, in both those schemes, one > would either need to decompress the whole font / table to get one glyph > out, or has to keep the decompressed font around (in each process). Both > are a non-starter. > > So, what I like to propose is to keep the current structure of the SVG > table, but compress each SVG document independently. I'm thinking about > two possible compression schemes: > > - Good old zlib compress2() as used in WOFF, PNG, etc, > > - Some binary XML format. For me the easiest would be to use the > Android binary XML. I haven't tested it yet. I see EXI is a W3C spec, so > I researched that a bit. I find two implementations: > > * http://openexi.sourceforge.net/ (Java and C#) > * http://exip.sourceforge.net/ (C) > > Unfortunately both seem to be designed by academics / research labs and > bloated. I'm guessing that some of this is implied by XML and EXI, but > some is specific to the implementations. The exip implementation which > claims to be small and efficient compiles to a whopping 400kb stripped > library. For comparison, here are sizes of three popular libraries on the > same (64bit) system: > > 600kb libfreetype > 360kb libharfbuzz > 150kb libpng > > That said, I see that the reference WOFF2 encoder/decoder is about 1mb, so > maybe that's the price one pays. > > As far as I understand, exip doesn't even come with a command-line tool to > encode/decode exi. I tried the openexi commandline tool, and I'm glad I > did. EXI doesn't transform text strings, so bulk of SVGs (paths) don't get > compressed much other than by the embedded zlib compression in EXI. I > tested a few SVGs (large and small), and the gains over just gzip'ing was > negligible. > > I think I'm ready to rule out EXI on the basis of complexity and limited > gains. I haven't really looked into Android XML. I'm guessing that size > wasn't the primary purpose for designing Android XML. Perhaps performance > was. > > So, I think I like the zlib compression best. What do people think? > > Cheers, > behdad > >
Received on Saturday, 23 August 2014 00:38:22 UTC