将 pstricks 动画转换为 SVG(+SMIL)

将 pstricks 动画转换为 SVG(+SMIL)

受到这些问题的启发——

—如何将 PSTricks 动画转换为动画 SVG 图像?

SVG 动画比 GIF 更好,因为 SVG 是一种支持流畅动画和任意颜色的矢量格式。

答案1

M. Gieseking 的dvisvgm是用于从 LaTeX 输入生成 SVG 的最先进的实用程序。最近,dvisvgm添加了对 的支持animate

动画 PSTricks 示例,摘自beamer 演示文稿中的 gif 图像

使用以下方式编译

乳胶李萨如
乳胶李萨如
dvisvgm --exact --font-format=woff --zoom=-1 利萨如

文件lissajous.tex

\documentclass[dvisvgm]{article}
\usepackage{pst-plot,animate}
\pagestyle{empty}

\begin{document}

\begin{animateinline}[%
  scale=1.2,
  begin={\begin{pspicture}(-2.1,-2.1)(2.1,2.1)},
  end={\end{pspicture}},
  controls, %palindrome, %autoplay,
  poster=last
]{12}
\newframe
\multiframe{144}{rA=25+25,rB=2.5+2.5}{
  \psset{algebraic,plotpoints=\rA,linecolor=red}
  \parametricplot{0}{\rB}{2*sin(7*t*Pi/180)|2*cos(11*t*Pi/180)}
}
\end{animateinline}

\end{document}

答案2

pdf2svgLinux 发行版有,或者http://www.cityinthesky.co.uk/opensource/pdf2svg 但我还没尝试过将其制作成动画。

答案3

我唯一能回答你这个问题的方法是:目前不可能,除非你编写(或委托)所需的[额外]软件。

我用于网页动画的一些替代方案:

额外更新:显然有一种方法可以使用 MP4Box 将 SWF 转换为 SVG+SMIL;请参阅http://www.slideshare.net/cconcolato/streaming-of-svg-animations-on-the-web从第 10 张幻灯片开始。我刚刚发现这个演示文稿,所以我不知道它在实践中效果如何。

更新2:似乎唯一对 SVG 动画具有原生支持的 TeX 引擎是 BaKoMa,但它并不是免费的:http://www.bakoma-tex.com/menu/svgwrite.php(这里讨论的 svg.sty 是不是来自 CTAN 的,但是专有的,它依赖于后端/驱动程序上的 SVG 特性,而免费的 TeX 似乎不提供这种特性。)他们有一个演示,其中大部分是免费的动画,网址为http://www.bakoma-tex.com/samples/svgtour.svg。我本来希望看到一些更有用的功能......(为了完整起见,非免费版本的 VTeX 8 也声称对 SVG 动画有某种支持,同样使用他们自己的特色。示例位于http://www.micropress-inc.com/svg.htm在现代浏览器上无法开箱即用,而 VTeX 本身近十年没有更新了,所以我不会真正试图找出他们的示例有什么问题。查看他们生成的 SVG 的源代码,似乎他们使用 Javascript 来制作 SVG 动画,而 BaKoMa 则使用 SMIL,至少在他们的演示的第一张幻灯片中是这样的。)

实用更新(3):好吧,我毫不费力地将 pdf 转换为如何将 pstricks 动画转换为 GIF 文件?转换为 SWF(通过 pdf2swf),在网络浏览器中播放效果很好,但让 MP4box 执行除生成的 SWF 崩溃之外的其他操作到目前为止都是一项挑战。您可能希望继续关注https://sourceforge.net/p/gpac/discussion/287547/thread/ee0d387d/

我使用 Google Swiffy 转换 SWF 没有任何问题(https://www.google.com/doubleclick/studio/swiffy/),它生成 SVG(在渲染时,存储格式为 JSON),但动画使用 Javascript(以及从 JSON 到 SVG 的运行时转换)。以下摘自 Swiffy 论文的内容通常与将关键帧动画转换为 SVG 相关:

选择 SVG 进行渲染为我们提供了几种动画 SVG 内容的选项。乍一看,CSS 动画和 SMIL 都符合我们的设计目标,即尽可能使用声明性表示。但是,当需要支持 ActionScript 脚本时,这两种技术都无法提供足够的动画控制。例如,尽管 CSS 动画中存在关键帧的概念,但它不提供将 JavaScript 代码同步到这些关键帧或从 JavaScript 修改时间轴的机制,而这是 SWF 兼容性所需的基本功能。另一个限制因素是 SWF 文件本身中的动画不是根据高级转换来定义的,而是定义每个对象在特定关键帧的位置。将这些定义映射回 CSS 或 SMIL 转换并不总是可行的。最后,这些标准并不广泛可用:CSS 动画规范仍处于工作草案状态,而 SMIL 尚未在 Internet Explorer 浏览器中实现。因此,我们选择使用 JavaScript 在客户端上为 SVG 制作动画。尽管这种命令式方法可能效率较低,但它提供的控制级别足以匹配所有 SWF 功能。

相关内容