在 GIF 中将 PDF/Images 转换为基于翻转的效果

Convert PDF/Images to a flip based effect in GIF

我想将 PDF 或图像序列转换为 GIF 中基于翻转的效果(类似于下面的效果)。

是否有任何方便的软件可以用来生成此输出?还是我必须使用 imageMagicK 编写脚本?请提出建议?

提前致谢!

很棒的项目!这不是生产就绪的、经过军事强化的、防弹代码,但以下代码将完成大部分繁重的工作,包括设置、附加单独的页面、在页面翻转时扭曲页面并最终将所有内容放在一起在动画 GIF 序列中。

#!/bin/bash
################################################################################
# flipbook
# Mark Setchell
#
# Give me 4 pages as parameters and I create an animated GIF book out of them
# called book.gif.
#
# Requires ImageMagick
################################################################################
# Names of the 4 pages
p0=${1:-page0.gif}  # Use first arg, or "page-0.gif" if none given
p1=${2:-page1.gif}
p2=${3:-page2.gif}
p3=${4:-page3.gif}

# Get width and height of images - I assume, but do not check all are identical sizes
read w h < <(convert "$p0" -format "%w %h" info: )
((twow=w+w))

# Layout first and last flat double-page spreads 
convert "$p0" "$p1" +append frame0.png
convert "$p2" "$p3" +append frame4.png

# Make right page taller and thinner and save as "distorted.png"
((deltah=20*h/100))
((deltaw=20*w/100))
((hplusdeltah=h+deltah))
((wminusdeltaw=w-deltaw))
((hplus2deltah=h+deltah+deltah))
points="0,0 0,$deltah $wminusdeltaw,0 $wminusdeltaw,0 $wminusdeltaw,$hplus2deltah $wminusdeltaw,$hplus2deltah 0,$hplus2deltah 0,$hplusdeltah"

convert "$p1" +matte -virtual-pixel transparent         \
      -resize ${wminusdeltaw}x${hplus2deltah}! +repage  \
      -distort Perspective "$points" +repage distorted.png

# Make second frame by overlaying distorted right page ontop of pages 0 and 3
convert "$p0" "$p3" +append                  \
        -bordercolor white -border 0x$deltah \
        +repage                              \
        distorted.png                        \
        -geometry +${w}x                     \
        -composite frame1.png

# Make left page taller and thinner and save as "distorted.png"
((deltaw=70*w/100))
((wminusdeltaw=w-deltaw))
points="0,0 0,0 $wminusdeltaw,0 $wminusdeltaw,$deltah $wminusdeltaw,$hplus2deltah $wminusdeltaw,$hplusdeltah 0,$hplus2deltah 0,$hplus2deltah"

convert "$p2" +matte -virtual-pixel transparent         \
      -resize ${wminusdeltaw}x${hplus2deltah}! +repage  \
      -distort Perspective "$points" +repage distorted.png

# Make third frame by overlaying distorted left page ontop of pages 0 and 3
convert "$p0" "$p3" +append                  \
        -bordercolor white -border 0x$deltah \
        +repage                              \
        distorted.png                        \
        -geometry +${deltaw}x                \
        -composite frame2.png

# Make left page taller and thinner and save as "distorted.png"
((deltaw=20*w/100))
((wminusdeltaw=w-deltaw))
points="0,0 0,0 $wminusdeltaw,0 $wminusdeltaw,$deltah $wminusdeltaw,$hplus2deltah $wminusdeltaw,$hplusdeltah 0,$hplus2deltah 0,$hplus2deltah"

convert "$p2" +matte -virtual-pixel transparent         \
      -resize ${wminusdeltaw}x${hplus2deltah}! +repage  \
      -distort Perspective "$points" +repage distorted.png

# Make fourth frame by overlaying distorted right page ontop of pages 0 and 3
convert "$p0" "$p3" +append                  \
        -bordercolor white -border 0x$deltah \
        +repage                              \
        distorted.png                        \
        -geometry +${deltaw}x                \
        -composite frame3.png

# Make final animation from frame0.png...frame4.png
convert -gravity center -delay 100 frame*.png -background white -extent ${twow}x${hplus2deltah} book.gif

因此,如果您从 page0.gifpage1.gifpage2.gifpage3.gif...

开始

你会得到这个 book.gif

如果你的书超过 4 页,你可以一次做四个,然后很简单地附加动画。

更新答案

看来您很不幸不得不使用 Windows - 这在 BATCH 中非常麻烦。我不是专家,但可以稍微分批处理。我认为上面的脚本很容易翻译。我会帮助你开始,但你需要自己做一些 - 如果你遇到困难,你可以随时提出新问题 - 问题是免费的!

脚本的第一部分只是获取命令行中提供的参数,因此它看起来像这样:

REM Pick up commandline parameters
set p0=%1
set p1=%2
set p2=%3
set p3=%4

然后我们需要计算输入图像的宽度和高度,如下所示:

REM Get width and height of images in variable "w" and "h"
FOR /F %%A IN ('identify -format "w=%%w\nh=%%h" %p0%') DO set %%A

我在 ((..)) 中的原始脚本中的所有内容都只是简单的数学运算,可以使用 SET /A 在 BATCH 中完成,所以这些行看起来像这样:

((twow=w+w))
((deltah=20*h/100))

看起来像这样:

SET /A TWOW=w+w
SET /A DELTAH=20*h/100

剩下的只是 convert 命令 - 您需要在那里做几件事:

  • 替换行尾的续行,所以将\改为^

  • 我用$variable或者${variable}的地方,换成%variable%

  • 将我拥有的任何 % 符号加倍,因此 % 变为 %%

  • \(改成^(——我觉得

  • 将任何单引号 ' 更改为双引号 "

最好先完成它,看看转换每一行时会发生什么,如果无法解决,请再问一个问题。

这些地方有一些很好的信息 - ss64 - general, ss64 - set command on BATCH in general. Also, an English guy called Alan Gibson, uses IM with Windows very competently and you can see his scripts here, and also more generally here 可以启发如何在 Windows 下有效地使用 IM。