Это то, что вы можете легко получить, сдвигая пиксели:
Хотя, вероятно, это не очень полезно для вас, вот программа Mathematica:
f[l_, sh_] := Module[{c = l, k = (Dimensions@l)[[1]]},
For[i = 1, i <= k, i++,
c[[i]] = RotateRight[l[[i]], IntegerPart[(k + 1 - i)/sh]]];
Return[c];]
b = ArrayPad[ImageData@a, {{40}, {40}, {0}}, {1, 1, 1}];
Export["c:\\anim.gif",
{Image@b, Image@f[b, 7],
Image@f[b, 5], Image@f[b, 3],
Image@f[b, 5], Image@f[b, 7], Image@b}, "DisplayDurations" -> .3]
Редактировать
Но вы можете получить лучший эффект, применив круговое преобразование:
b = Image@ArrayPad[ImageData@a, {{40, 0}, {40}, {0}}, {1, 1, 1}];
f[image_, angleMult_] := ImageForwardTransformation[image, (
fi = ArcTan[Abs[#[[2]]/(#[[1]] - .5)]];
fi1 = angleMult fi (#[[1]]^2 + #[[2]]^2)/2;
{(1/2 - Sin[fi1] #[[2]] - Cos[fi1]/2 +
Cos[fi1] #[[1]]), -Sin[fi1]/2 + Sin[fi1] #[[1]] +
Cos[fi1] #[[2]]}) &]
t = Table[f[b, x], {x, 0, .2, .02}];
t1 = Reverse@t;
Export["c:\\anim.gif", Join[t, t1], "DisplayDurations" -> .15];
Import["c:\\anim.gif", "Animation"]