You can use a xscreensaver as a wallpaper, and glslideshow does what you want.
Although it has a
-root option, you will usually need xwinwrap for it to work correctly:
xwinwrap -ov -fs -- \
/usr/lib/xscreensaver/glslideshow -window-id WID -zoom 100
# location of xscreensavers may vary between distros
-zoom option sets the images to fill the screen, so they don't pan around.
You can not manually select an image with this solution, but you can set a directory, from where glslideshow will take random images (it recurses into subdirectories). This can either be done on the "advanced" tab in
xscreensaver-demo or by creating a file
.xscreensaver in your home directory with the following content:
See the manpage of glscreensaver for further options to customize.
Without xwinwrap, glslideshow may do strange things, like draw over all your windows, when using compositing (e.g. with xcompmgr). But when disabling compositing, the root image is only redrawn when it moves, so you either have to set glslideshow to do continuous image transformations or you will have black boxes where windows have been since the last redraw. Sometimes it works, but it is safer to use xwinwrap.