-
Notifications
You must be signed in to change notification settings - Fork 599
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Reduce SVG output size by using CSS and paths #41
base: master
Are you sure you want to change the base?
Conversation
Good point. I will rework the patch set to change only the rle path then. |
Ok I've updated the patch set. Now the last commit only changes the RLE behavior, leaving the non-RLE path with a rectangle for each bit. |
(Rebased on current master.) |
Hi @Oblomov , thank you for your contribution. It seems great, but couple of tests with some tools is required. Give me some time to do it. |
This produces a smaller SVG (about 30% smaller for SVG without alpha channels, closer to 50% with alpha channels).
Allow the generation of SVGs without explicit dimensions set by setting DPI to 0. Since SVGs are perfectly scalable, there is no need to set the size, in general.
This reduces the SVG output size by nearly a factor of 7. As a bonus, rendering of the resulting SVG at high resolutions does not show the striping which was clearly visible with the previous approach.
Most scanlines are built from alternating small strides of black and white pixels, therefore using relative motions results in smaller numbers passed to the `m` command. On the larger QR Codes this can lead to savings of as much as 30% of the previous output file size in RLE mode.
Hello, any news about this? The changeset has been updated on top of latest master. You may want to cherry-pick ef6fcd2, which fixes an off-by-one, regardless of the rest of the changeset. |
Hello @Oblomov, I have just tested your patch. While it works very well with Inkscape, OpenOffice's Draw could not load the SVG file. Probably it means OO does not support style element but I'm not sure. Would you mind to test it? |
I can confirm that the SVG is not displayed correctly by:
I would say that these are bugs in librsvg/LibreOffice (that should be fixed upstream: the respective bugzillas mention related issue), but I can understand if you'd rather wait for these to be fixed before merging. |
@Oblomov , Thank you for the study. I encourage you to post the report to librsvg's community. As you concluded, let us wait for these to be fixed because librsvg is widely used. I'll keep this request open till the issue is resolved by librsvg. |
Can we please already merge the "one path" patch, without using the problematic css part yet? That would help with some rendering problems (more details in the link below). |
0577499
to
cf2b1a8
Compare
This commit series obtains a reduction of the output SVG size by a factor of 7, by enacting the following changes:
path
instead of a number ofrect
s to describe the ‘foreground’ of the QR Code; this is true gainer (7× size reduction).As a bonus, there is a patch that makes the SVG ‘dimensionless’ when the DPI is set to 0. I also needed autogen.sh to create the
m4
directory, so I've included a patch to do that.