SVG,将线条形成图像

时间:2017-03-29 07:36:43

标签: python svg svgwrite

我使用svgwrite和python从位图在SVG中形成图像,其中每条线围绕一个公共原点旋转θ,形成扇形图案。目前这个图像在128行中大约10 MB运行,主要是因为79000+线段中保留了过多的浮点(每个像素一个线段)。

ScanConverted Image

我希望通过从原点到终点绘制一条线来显着降低图像尺寸,然后拉伸一条线'图像'在那个SVG线上。这是否可以使用SVG?除此之外,我可以接受任何可能显着缩小尺寸的建议,因此我稍后可以为这些线设置动画。

1 个答案:

答案 0 :(得分:1)

此解决方案如何(请参阅 fiddle ):

  1. 以您需要的条带数量切割图像。对于链接小提琴中的示例,我使用ImageMagick如下将128x128 PNG图像切割成128个垂直条带:
    convert image.png -crop 1x128 +repage +adjoin strip-%d.png
  2. 将所有图像条转换为数据URI格式并将其嵌入SVG中。我使用了这个bash one-liner:
    for i in strip-*.png; do echo "data:image/png;base64,$(openssl base64 < $i | tr -d '\n')"; done > data-uris.txt
  3. 在SVG中,使用transform()条带元素上的image属性将其旋转到所需的度数。
  4. 对于16.4KB的128x128 PNG图标,我最终获得了128.1KB的SVG文件。其中大部分是base64编码的图像数据(128个PNG条带的总大小已经是85.1KB)。通过对一些花车进行四舍五入可以进一步减少,但我不认为可以获得很多东西。

    可能有另一种方法可能会将图像作为一个整体嵌入,并反复引用同一图像的另一个剪切部分,但我无法使其工作。