manim 解析svg 图片为SVGMobject
manim 可以用SVGMobject 类解析svg 图片,然后将SVG 图片渲染到动画中。但是目前manim 在解析svg 图片时,其支持比较基础不太友好,例如颜色和样式等可能会被忽略,更坑的是,SVGMobject并不能处理所有svg 中的元素,例如通过<line> 创建的线条可能会被忽略。于是问题来了,除了等待manim 更新SVGMobject 解析svg 功能外,有没有办法让manim 正确渲染我们的svg 图片呢?
一个简单的办法,就是安装cairosvg包,对manim不能正确解析的svg 图片,先用命令
cairosvg old.svg -o new.svg
将svg 格式的图片转换一下,然后再用manim 去解析和渲染。
cairosvg 安装很简单
pip install cairosvg
但是安装后使用时可能会报错
OSError: no library called "cairo" was found
no library called "libcairo-2" was found
cannot load library 'libcairo.so': error 0x7e
cannot load library 'libcairo.2.dylib': error 0x7e
cannot load library 'libcairo-2.dll': error 0x7e
这些错可以通过安装 GTK+ 来解决,到 http://ftp.acc.umu.se/pub/GNOME/binaries/win64/gtk+/2.22/ 下载安装后,cairosvg 就能正常运行了。
在github 上,yoshiask 对这个问题提交了PR ,其中主要修改了manim/mobject/svg/svg_mobject.py、manim/mobject/types/vectorized_mobject.py、manim/utils/color.py 这三个文件,但目前没有被合并到master 分支,想尝试一下的也可以试试这个分支对svg 图片的支持程度。
冀公网安备 13010402001886号