This program is part of Netpbm.
ppmshift reads a PPM image as input. Shifts every row of image data to the left or right by a certain amount. The shift parameter determines by how many pixels a row is to be shifted at most.
This is another one of those effects I intended to use for MPEG tests. Unfortunately, this program will not help me here - it creates too random patterns to be used for animations. Still, it might give interesting results on still images.
#take the upper half, and leave it like it is
pamcut -top=0 -width=800 -height=300 cs.ppm >upper.ppm
#take the lower half, flip it upside down, dim it and distort it a little
pamcut -top=300 -width=800 -height=300 cs.ppm | \
pamflip -topbottom | \
ppmdim 0.7 | \
ppmshift 10 >lower.ppm
#and concatenate the two pieces
pnmcat -topbottom upper.ppm lower.ppm >newpic.ppm
The resulting picture looks like the image being reflected on a water
surface with slight ripples.