Bash 如何使用convert from Imagamagik在gif中居中显示图像?
我的目标是从jpg创建gif图像,我将以角度A延迟Dimagemagick旋转。所以,我有这个代码: ((i=0;i<360;i+=a))do的Bash 如何使用convert from Imagamagik在gif中居中显示图像?,bash,imagemagick,Bash,Imagemagick,我的目标是从jpg创建gif图像,我将以角度A延迟Dimagemagick旋转。所以,我有这个代码: ((i=0;i
名称=%(printf“%03d”$i)
转换$image-旋转$i“temp/$name.jpg”
完成
转换-延迟$d“temp/*.jpg”out.gif
问题是out.gif中的图像没有居中。我怎样才能使它们居中?
(图像应相对于中心旋转)
问题是out.gif中的图像没有居中
当你看最后一张gif时,似乎就是这样。但是,图像已经围绕其中心旋转。示例:我将图像1.png
旋转15°
convert 1.png -rotate 15 2.png
convert 1.png -rotate 30 3.png
convert 1.png -rotate 45 4.png
现在让我们看一下图1-4
如我们所见,图像围绕其中心旋转,但图像尺寸发生变化
当我们将这四个图像转换成一个gif动画时,我们必须为整个动画设置一个固定的维度,并在画布上设置每个帧的位置。在不提供进一步信息的情况下,ImageMagick使用第一帧的尺寸作为动画的尺寸,并将每个帧放置在左上角。由于第一帧(旋转0°)最小,因此其他帧将被裁剪。下图显示了将被裁剪的内容
要解决这个问题,我们有两种选择:
-扭曲SRT。将-旋转$i
替换为-扭曲SRT$i
ImageMagick“-rotate”操作符将增加输出尺寸,使整个输入图像仍适合输出。这将为不同的旋转角度生成不同尺寸的结果。使用“+扭曲SRT”的加号形式将具有相同的效果
和“-扭曲SRT”将在其输入尺寸内旋转图像的中心,但这将在角在原始帧外旋转时剪掉角
有一种方法可以将图像旋转几次,以中心点为轴心,在视口中容纳整个图像,即使在旋转时也是如此
通过设置输入图像名称“$image”、帧数“$f”和每帧延迟“$d”,这样的命令可以完成“for”循环所做的一切,同时消除临时文件的写入和读取。看起来比实际情况更复杂
image=input.jpg
f=20
d=50
convert -delay $d -dispose previous "$image" -background none -virtual-pixel none \
-duplicate $f +delete -set option:distort:viewport "%[fx:hypot(w,h)]x%[fx:hypot(w,h)]" \
-distort SRT "%[fx:w/2],%[fx:h/2] 1 %[fx:360/n*t] %[fx:hypot(w,h)/2],%[fx:hypot(w,h)/2]" \
out.gif
该命令将读取输入“$image”,复制它以创建总共“$f”帧,将延迟设置为“$d”,将每个图像旋转比前一个图像旋转“360/$f”度,并将最终结果输出为动画GIF。从-rotate输出的结果在输出图像中居中。但是输出大小被扩展以显示整个图像。如果希望保持与输入相同的输出大小,则可以使用-gravity center裁剪为输入大小。或使用-按照以下更详细的建议,通过Socowi