SVG,将线条形成图像

2024-04-20 12:09:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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

ScanConverted Image

我想通过从原点到终点绘制一条直线,然后在SVG行上拉伸一行“image”,从而显著减小图像大小。使用SVG是否可以做到这一点?除此之外,我愿意接受任何可能大幅降低尺寸的建议,因此我稍后可以将线条动画化。在


Tags: svg图像image尺寸绘制图片像素直线
1条回答
网友
1楼 · 发布于 2024-04-20 12:09:12

这个解决方案怎么样(见fiddle):

  1. 按所需的条带数量将图像切片。对于linkedfiddle中的示例,我使用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中,使用imagestrip元素上的transform()属性将它们旋转到所需的程度。在

对于一个16.4KB的128x128 PNG图标,我得到的SVG文件是128.1KB。其中大部分是base64编码的图像数据(128个PNG条带的总大小已经是85.1KB)。通过对一些浮点数进行舍入,可以进一步减少一点,但我认为不会有太多收获。在

可能还有另一种方法,将图像作为一个整体嵌入,并反复引用同一图像的另一个剪辑部分,但我无法实现这一点。在

相关问题 更多 >