Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何使用convert from Imagamagik在gif中居中显示图像?_Bash_Imagemagick - Fatal编程技术网

Bash 如何使用convert from Imagamagik在gif中居中显示图像?

Bash 如何使用convert from Imagamagik在gif中居中显示图像?,bash,imagemagick,Bash,Imagemagick,我的目标是从jpg创建gif图像,我将以角度A延迟Dimagemagick旋转。所以,我有这个代码: ((i=0;i

我的目标是从jpg创建gif图像,我将以角度A延迟Dimagemagick旋转。所以,我有这个代码:

((i=0;i<360;i+=a))do的

名称=%(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°)最小,因此其他帧将被裁剪。下图显示了将被裁剪的内容

要解决这个问题,我们有两种选择:

  • 创建动画时,将每个帧居中
  • 旋转时,裁剪结果,使所有帧具有相同的大小
  • 我会和你一起去。ImageMagick具有运算符
    -扭曲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