Ich habe gerade das animate
Paket ausprobiert, um PDF-Dateien mit Animationen zu erhalten, und es funktioniert großartig!
Mir ist jedoch aufgefallen, dass die Größe der generierten Dateien zehnmal größer ist als für die von mir bearbeiteten Animationen und in den meisten Fällen ist es sogar noch schlimmer.
Ich glaube, der Grund dafür ist, dass nicht die Differenz zwischen aufeinanderfolgenden Bildern verwendet wird, sondern das gesamte Bild für jedes Bild. Das ist zum Beispiel das, was gifsicle verwendethttp://www.lcdf.org/gifsicle/ (Quelle verfügbar) „Speichert nur den geänderten Teil jedes Frames und kann Ihre GIFs radikal verkleinern.“
Besteht die Möglichkeit, dies im animate
Paket zu optimieren?
Antwort1
Sie können die Größe der PDF-Animation mithilfe differenzieller Bitmaps und der timeline
Funktion des animate
Pakets optimieren.
Beachten Sie jedoch, dass sich mit jedem neu anzuzeigenden Animationsbild die Anzahl der neu anzuzeigenden Differenzbilder um eins erhöht. Dies kann eine laufende Animation mit fortschreitender Zeit verlangsamen. Adobe Reader wurde nicht primär für die Geschwindigkeit der grafischen Darstellung optimiert. Für lange Bitmap-Sequenzen kann es daher besser sein, eine Videodatei (MP4/H.264) zu erstellen und diese mit dem media9
Paket einzubetten.
Möchten Sie dennoch differenzielle Bitmap-Sequenzen animieren, gehen Sie wie folgt vor:
(1) Erstellen Sie eine größenoptimierte Version des ursprünglichen animierten GIFs mit gifsicle
:
gifsicle -O3 animated.gif > optimized.gif
Zu Testzwecken können Sie dieses animierte GIF von der Asymptote-Website ausprobieren:http://asymptote.sourceforge.net/gallery/animations/wheel.gif
(2) Erzeugen Sie eine PNG-Sequenz ( difference-0.png
,,, difference-1.png
...) der Bildunterschiede mit dem ungif.sh
unten aufgeführten Skript. Das Skript schreibt die zu verwendende Zeitleiste in \animategraphics
die Standardausgabe, die in die Textdatei umgeleitet wird timeline.txt
:
ungif.sh optimized.gif difference.png > timeline.txt
(3) Das PDF mit der Animationssequenz lässt sich aus folgender LaTeX-Quelldatei erzeugen (hierbei muss die max. Framezahl und ggf. die Framerate angepasst werden):
\documentclass{article}
\usepackage{animate}
\begin{document}
\noindent\animategraphics[
controls,
width=0.5\linewidth,
timeline=timeline.txt
]{10}{difference-}{0}{99} %adjust the maximum frame number
\end{document}
(4) Bevor Sie die Animation im Adobe Reader betrachten, vergewissern Sie sich, dass in den Reader-Einstellungen (Bearbeiten->Einstellungen->Seitenanzeige) die Option „Glatte Bilder“ deaktiviert ist. Sonst entstehen hässliche Artefakte.
Inhalt des Bash-Skripts ungif.sh
(erfordert ImageMagick):
#!/bin/bash
wxh=$(identify -format '%Wx%H' $1[0])
fs=$(identify -format %n $1)
for (( i=0; i<$fs; i++ ))
do
convert -page $wxh ${1}[$i] -matte -background none -layers coalesce -quality 90 ${2/./-$i.}
echo "::${i}x0"
done