我正在使用 svgwrite 和 python 从位图在 SVG 中形成图像,其中每条线都由 theta 围绕一个共同的原点旋转成扇形图案。目前,这张图片在 128 行中运行大约 10 MB,主要是因为在 79000 多个线段(每个像素一个线段)中保留了过多的浮点数。
我想通过从原点到终点绘制一条线,然后在该 SVG 线上拉伸一条线“图像”来显着减小图像尺寸。这可能使用SVG吗?除此之外,我对任何可能显着减小尺寸的建议持开放态度,因此我稍后可以对线条进行动画处理。
这个解决方案怎么样(见小提琴):
convert image.png -crop 1x128 +repage +adjoin strip-%d.png
for i in strip-*.png; do echo "data:image/png;base64,$(openssl base64 < $i | tr -d '\n')"; done > data-uris.txt
transform()
上的属性image
将它们旋转到所需的度数。对于一个 16.4KB 的 128x128 PNG 图标,我最终得到一个 128.1KB 的 SVG 文件。其中大部分是 base64 编码的图像数据(128 个 PNG 条带的总大小已经是 85.1KB)。通过四舍五入一些浮点数可以进一步减少它,但我认为不会有很多收获。
可能还有另一种方法,您可以将图像作为一个整体嵌入,并一遍又一遍地引用同一图像的另一个剪辑部分,但我无法让它工作。