代码合并svg

我们常常会使用svg,但如果引入的svg过多时,将他们整合成一个svg图会是更好的选择,可以减少请求次数以及保证多个图标同时加载出(避免出现svg加载顺序差异造成体验不好)
那么,我们要怎样将svg合并呢?
其实有不止一种办法,可以选择在网上找现成的工具,也可以用代码合并。
如何用代码合并?
先引入两个svg

<?xml version="1.0" encoding="UTF-8"?>
<svg width="120px" height="120px" viewBox="0 0 120 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
// ...
</svg>

<?xml version="1.0" encoding="UTF-8"?>
<svg width="120px" height="120px" viewBox="0 0 120 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
// ...
</svg>

然后将svg标签改为symbol,并且加上id

<?xml version="1.0" encoding="UTF-8"?>
<symbol  id="icon-pre" width="120px" height="120px" viewBox="0 0 120 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
// ...
</symbol>

<?xml version="1.0" encoding="UTF-8"?>
<symbol id="icon-next" width="120px" height="120px" viewBox="0 0 120 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
// ...
</symbol>

接下来,既然是要合并,那就在最外层包裹一个svg标签吧

<svg>
  <?xml version="1.0" encoding="UTF-8"?>
  <symbol  id="icon-pre" width="120px" height="120px" viewBox="0 0 120 120" version="1.1"  xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  // ...
  </symbol>

  <?xml version="1.0" encoding="UTF-8"?>
  <symbol id="icon-next" width="120px" height="120px" viewBox="0 0 120 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  // ...
  </symbol>
</svg>

完工,接下来,只需要在需要使用的地方通过id引用即可,如下:

<svg>
  <use xlink:href="#icon-pre"></use>
</svg>

做完这些,我们已经可以使用合并后的svg了,但还有一些可以优化的地方

由于svg标签本身是占空间的,所以上面那一个svg也会在页面占据空间,这不是我们所希望的,所以我们要把它隐藏掉

<svg style="display: none" >
// ...
</svg>

此时,我们的svg已经很完备了,但是就是不够优雅,毕竟那么一大堆代码放在html里,我们只要用JS动态创建插入body中就好了。

let svgWrapper = document.createElement('div')
svgWrapper.style.display = "none"
document.body.appendChild(svgWrapper)
svgWrapper.innerHTML = `<svg>
  // ...略略略
</svg>`

作者:临安linan
链接:https://www.jianshu.com/p/b9d06b04982e
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将4张SVG格式的矢量图合并为一张图像,可以使用`Pillow`库中的`Image`对象进行操作。 以下是一个示例代码,可以实现将4张SVG格式的矢量图水平并排合并为一张图像: ```python from PIL import Image import cairosvg # 读取4张SVG格式的矢量图 img1 = cairosvg.svg2png(url='image1.svg') img2 = cairosvg.svg2png(url='image2.svg') img3 = cairosvg.svg2png(url='image3.svg') img4 = cairosvg.svg2png(url='image4.svg') # 将4张图像合并为一张图像 width, height = img1.width + img2.width + img3.width + img4.width, img1.height result_image = Image.new('RGBA', (width, height), (255, 255, 255, 255)) result_image.paste(img1, (0, 0)) result_image.paste(img2, (img1.width, 0)) result_image.paste(img3, (img1.width + img2.width, 0)) result_image.paste(img4, (img1.width + img2.width + img3.width, 0)) # 显示合并后的图像 result_image.show() ``` 在这个示例中,我们首先使用`cairosvg`库中的`svg2png()`函数将4张SVG格式的矢量图转换为PNG格式的图像文件。然后,使用`Pillow`库中的`Image`对象创建一个新的RGBA图像对象,并使用`paste()`方法将4张图像按照顺序水平并排合并到一张图像中。最后,使用`show()`方法显示合并后的图像。 需要注意的是,由于SVG格式的矢量图像是基于XML语言的文本文件,因此在读取和处理时需要使用专门的库进行解析和转换。在这个示例中,我们使用了`cairosvg`库将SVG格式的矢量图像转换为PNG格式的图像文件。如果需要将矢量图像合并为其他格式的图像文件,可以使用`Pillow`库中的其他方法进行转换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值