![将多幅照片拼接起来制作成动画](https://linux22.com/image/373734/%E5%B0%86%E5%A4%9A%E5%B9%85%E7%85%A7%E7%89%87%E6%8B%BC%E6%8E%A5%E8%B5%B7%E6%9D%A5%E5%88%B6%E4%BD%9C%E6%88%90%E5%8A%A8%E7%94%BB.png)
我想在 Beamer 中制作动画,将一个图像分成 900 个相等的部分。我将它们命名为 image_part_001 到 image_part_900。现在我想通过将它们逐个连接起来以在最后一帧中制作完整的照片来制作动画。我尝试了以下方法,但得到的是一张一张分开的动画。我的要求是将它们并排连接起来以在最后制作完整的照片。
\documentclass{beamer}
\usetheme{Warsaw}
\usepackage{animate}
\begin{document}
\begin{frame}
\begin{center}
\textsc{\bf Knowledge g{\Large r}{\LARGE o}{\huge w}{\Huge S} When Shared}
\animategraphics[loop,autoplay,width=0.1\linewidth]{30}{image_part_}{001}{900}
\end{center}
\end{frame}
\end{document}
先感谢您
答案1
这是一个迟来的答案,对你来说可能太迟了,但是尽管如此:
该animate
软件包不支持逐块拼凑图片。因此,此代码包括完整的图片,覆盖它,然后从左到右、从上到下将其揭开。
不幸的是,animate
动画似乎被剪掉了,这可能会导致可见的边框变细,具体取决于分辨率和查看器。解决这个问题的方法是使用图片应该覆盖的颜色在图片上绘制一条细边框。
代码中描述了新命令的参数\animatepicture
。如果您只想从上到下揭开,请将 x-slices ( #3
) 设置为 1。而要从左到右揭开,请将 y-slices ( #4
) 设置为 1。
\documentclass{beamer}
\usetheme{Warsaw}
\usepackage{tikz}
\usepackage{xparse}
\usepackage{animate}
\makeatletter
\newsavebox\imagebox
\newcount\@animate@frames
\newcount\@animate@start
% parameters
% #1 optional arguments for animateline
% #2 frame rate
% #3 x-slices
% #4 y-slices
% #5 optional arguments for \includegraphics
% #6 picture file
% #7 cover color, default: white
\NewDocumentCommand{\animatepicture}{O{}mmmO{}mO{white}}{%
\sbox{\imagebox}{\includegraphics[#5]{#6}}%
\makebox[0pt][l]{\usebox{\imagebox}}%
\pgfmathsetcount{\@animate@start}{#3*#4}%
\pgfmathsetcount{\@animate@frames}{\@animate@start+1}%
\begin{animateinline}[#1]{#2}
\multiframe{\@animate@frames}{iuc=\@animate@start+-1}{
\begin{tikzpicture}
\useasboundingbox (0,0) rectangle (\wd\imagebox,\ht\imagebox);
\pgfmathsetmacro{\xparts}{#3-mod(\iuc,#3)}
\pgfmathsetmacro{\yparts}{floor(\iuc/#3)}
\pgfmathsetmacro{\xstep}{\wd\imagebox/#3}
\pgfmathsetmacro{\ystep}{\ht\imagebox/#4}
\pgfmathsetmacro{\xe}{\wd\imagebox}
\pgfmathsetmacro{\xm}{ifthenelse(\xparts==0,\xe,\xparts*\xstep)}
\pgfmathsetmacro{\xs}{ifthenelse(\yparts==0,\xm,0)}
\pgfmathsetmacro{\ys}{0}
\pgfmathsetmacro{\ym}{\yparts*\ystep}
\pgfmathsetmacro{\ye}{ifthenelse(\xparts==#3,\ym,\ym+\ystep)}
\filldraw[#7,fill=#7,very thick]
(\xs pt,\ys pt) -- (\xe pt,\ys pt) -- (\xe pt,\ye pt) --
(\xm pt,\ye pt) -- (\xm pt,\ym pt) -- (\xs pt,\ym pt) -- cycle;
\end{tikzpicture}
}
\end{animateinline}
}
\makeatother
\begin{document}
\begin{frame}
\begin{center}
\textsc{\bf Knowledge g{\Large r}{\LARGE o}{\huge w}{\Huge S} When Shared}
\animatepicture[loop,autoplay]{30}{30}{30}[scale=0.75]{example-image.pdf}
\end{center}
\end{frame}
\end{document}
答案2
另一种解决方案是将图像包含在循环中。为了确保换行符位于正确的位置,可用的文本宽度(以下示例中的小页面大小)需要是单个图像宽度的 n 倍。
\documentclass{beamer}
\usepackage{xmpmulti}
\usetheme{Warsaw}
\usepackage{pgffor}
\begin{document}
\begin{frame}
\begin{center}%
\begin{minipage}{.5\textwidth}%
\foreach \x in {1,...,9} {%
\includegraphics<+->[width=.3333\textwidth]{test-\x}\hspace{0pt}%
}%
\end{minipage}%
\end{center}%
\end{frame}
\end{document}