我正在使用Fred的Imagemagick脚本,特别是fx转换来创建两个图像之间的转换效果。我正在创建jpeg图像帧。稍后,我将使用ffmpeg将它们转换成视频。这是我使用Imagemagick的第三天,目前我可以通过以下脚本成功应用两个图像之间的转换效果。然而,我还需要满足以下两个标准:
$result = shell_exec("bash /cygdrive/path/to/fxtransitions -e explode -f 50 -d 1 -p 1 -r first.jpg second.jpg output.jpg");
echo $result;
>
每个图像必须停留大约9秒而不失真,然后快速转换成下一个图像。
目前,Fred的脚本允许两个图像输入。脚本中是否可以使用两个以上的图像?如何使用php循环浏览多个图像?
不确定你在3天内用ImageMagick收集了什么——这是一款功能强大的软件,你可以花一生的时间在上面。不管怎样,让我们制作一些动画,看看我的漫谈是否能帮助你。
首先,我们制作一个红色、绿色和蓝色的图像来玩:
convert -size 100x100 xc:red r.png
convert -size 100x100 xc:green g.png
convert -size 100x100 xc:blue b.png
然后我们用8个中间步骤从红色变成绿色,总共10幅图像,并将它们放在一个动画系列中,帧间延迟20厘米,称之为r2g.gif
(对于红色到绿色):
convert -delay 20 r.png g.png -morph 8 r2g.gif # Make 10 frame morph called "r2g.gif"
identify r2g.gif # look at frames
r2g.gif[0] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[1] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[2] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[3] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[4] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[5] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[6] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[7] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[8] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
r2g.gif[9] GIF 100x100 100x100+0+0 8-bit sRGB 2c 1.74KB 0.000u 0:00.000
我们也可以用同样的方法将绿色变成蓝色
convert -delay 20 g.png b.png -morph 8 g2b.gif
这给了我们这些人:
想法1
我想告诉你的第一件事是,你可以像这样将动画GIF与ImageMagick连接在一起:
convert r2g.gif g2b.gif both.gif
所以你先从红色到绿色,然后从绿色到蓝色。
关键是,如果你使用弗雷德的脚本,你可以将动画A连接到动画B。所以,只要你能在两点之间做动画(你可以),你就可以通过连接两个动画来动画到第三点,因此你不需要通过超过2点弗雷德的剧本。
想法2
-延迟
参数是一个设置,而不是操作,因此它将保持设置,直到命令结束或更改它。因此,您可以在一帧中使帧延迟变长,然后在随后的帧中恢复到更短的时间,如下所示:
convert -delay 300 r2g.gif[0] \
-delay 20 r2g.gif \
-delay 300 g2b.gif[0] \
-delay 20 g2b.gif \
staccato.gif
基本上,我们将动画的第一帧暂停3秒,并将红绿和绿蓝动画之间的过渡帧也保持3秒,同时将其他帧周期保持在20厘米秒。您还应该注意,我们可以通过将动画的各个帧放在文件名后的方括号中,并使用-1
指示最后一帧来处理这些帧。
您现在可以检查单个帧之间的时间/延迟,这是由前面的命令引起的,如下所示:
identify -format "%f[%s] %T\n" anim.gif
anim.gif[0] 300 <--- first frame has 3 second frame time
anim.gif[1] 20
anim.gif[2] 20
anim.gif[3] 20
anim.gif[4] 20
anim.gif[5] 20
anim.gif[6] 20
anim.gif[7] 20
anim.gif[8] 20
anim.gif[9] 20
anim.gif[10] 20
anim.gif[11] 300 <--- first frame of second animation also held for 3 seconds
anim.gif[12] 20
anim.gif[13] 20
anim.gif[14] 20
anim.gif[15] 20
anim.gif[16] 20
anim.gif[17] 20
anim.gif[18] 20
anim.gif[19] 20
anim.gif[20] 20
anim.gif[21] 20
问题内容: 我有一个程序,需要使用Image Magick将PDF转换为图像。我使用包来做到这一点: 我得到的错误是: 其中最重要的是: 我认为这是因为ImageMagick无权访问PDF。现在应该怎么办?我在Linux服务器上。任何帮助表示赞赏。 问题答案: emcconville是正确的。更具体地说,编辑Imagemagick policy.xml文件以取消注释此行: 并将其从rights =
我有一个程序,在这个程序中,我需要使用image Magick将PDF转换为图像。我使用包来实现这一点: 我得到的错误是: 其中最重要的是: 我认为这是因为ImageMagick无权访问PDF。现在该怎么办?我在Linux服务器上。感谢您的帮助。
我试图使用ImageMagick将PDF转换为图像,但出现以下错误: 转换-im6. q16:尝试执行安全策略'PDF'@false/宪法. c/IsCoderAuthorize/408不允许的操作。 Convert-im6. q16:没有定义'tmp/d.png'的图像@error/转换. c/ConvertImageCommand/3258。 我找到了一堆建议修改policy.xml文件的答案
问题内容: 我有一个程序,需要使用Image Magick将PDF转换为图像。我使用包来做到这一点: 我得到的错误是: 其中最重要的是: convert-im6.q16: not authorized `temp2.pdf’ @ error/constitute.c/ReadImage/412. 我认为这是因为ImageMagick无权访问PDF。现在应该怎么办?我在Linux服务器上。任何帮助表
问题内容: 这个问题 不是 关于将long正确地强制转换为int,而是当我们将其错误地强制转换为int时会发生什么。 因此,请考虑以下代码- 这给出了输出- 现在假设我进行以下更改- 然后我得到输出- 问题是, 如何 将long的值转换为int? 问题答案: 的低32位被取出并放入。 不过,这是数学运算: 将负值视为该值的正值。因此被视为2 ^ 64-1。(这是 无符号的 64位值,这是该值实际以
我创建了一个对话框,用户可以在其中浏览图像,然后看到画布上绘制的图像的预览。图像被缩放,以便在框中安装时保持其宽高比。我使用了在这个答案中找到的调整大小的方法,包括将图像从SWT转换为AWT,执行调整大小,从AWT转换回SWT,最后在画布上绘制。由于这个过程在时间和处理能力方面非常昂贵,如果图像大小完全正确,我选择跳过调整大小的步骤,因此不需要以任何方式进行转换。 在处理alpha透明的图像时会出