This article describes how to create "wavy" buttons with text, such as on the front page of my website.
It was written in the early-to-mid 2000s. I'm sure Gimp has changed unrecognizably since then, and none of this advice may be useful anymore.
A high level overview:
I created the background image for the front page of my site with Gimp Fractal Explorer.
Fig. 1. A 200 x 200 image filled with Nebula fractal.
Fig. 2. The image above is the Nebula fractal image made seamless.
When you tile this image, you'll get seamless tiles:
Fig. 3. Seamless Nebula image, tiled.
If you tiled the original Nebula image before it was made seamless, you would get this:
Fig. 4. Non-seamless (original) Nebula image, tiled.
I started by duplicating the background image.
2.1. Type the textFig. 5. Seamless image with text.
At this point the text is in its own layer, separate from background. (If there is more than one word, as in my example above, you may have put each word in a different layer, so that you could move them separately.) Once you are satisfied that the text is the right size, color, and font, and the words are aligned the way you want them, the text layers will need to be merged with the background layer. After that it will be no longer possible to edit the text. If there is a chance that you may change your mind about the color, size or other attributes of the text, it is better at this point to make a duplicate of this image and work with a duplicate, leaving the layers of the original image unmerged.
Let's merge the text layer(s) with the background layer. In the Layers window, right-click on any layer and select "Merge Visible Layers". In the dialog box that opens, select the radio button "Clip to image" (although in this case probably any of the 3 options will give the same result). So now we only have one layer.
2.2. Draw the guidesWith an Elipse tool (the second from the left tool in the top row of the The Gimp toolbox, shaped as an elipse), draw a selection outline around the text. You can make it any size you want, but I personally tried to keep it as small as possible. Considering that the animation will consist of several frames (for me, 4 was the minimum I needed for a "decent" waving effect), we want to keep each frame as small as possible in terms of number of bytes, which can be achieved by making its area as small as possible.
Fig. 6. Image with an elipse selection outline around the text.
Put horizontal guides at the top and bottom of the elipse, and vertical ones at the sides of the elipse. A horizontal guide can be created by pressing the left mouse button down on the horizontal ruler at the top of the image, and dragging the mouse to where you want to put the guide.
Fig. 7. Image with an elipse selection outline around the text and the guides.
The guides are needed so that we could cut out an elipse of exactly the same size and in the same location in each animation frame. (Each frame will be its own separate image. As will become clear shortly, each frame will be created by duplicating this base image. Each duplicate will contain the guides.)
Now that we have the guides, we can remove the elipse selection, because the eliptical shape does not need to be cut out yet. First we need to create the animation frames based on this image.
This is probably not necessary, but I create a separate image for each of the animation frames. I'm pretty sure this can be done by duplicating just the layer with the base image, and applying appropriate operations to each layer. But I just didn't want to think about it. :-) I don't think it is really any more work this way.
I start by duplicating the previous image, the one with guides.
To create the first animation frame, bring up the Waves filter from Filters->Distort->Waves. I set the amplitude to be small and the wavelength big; otherwise, at a bigger amplitude or a smaller wavelength the text will be distorted unrecognizeably. In this example I am using amplitude 4 and wavelength 14.
Fig. 8. Waves filter
Here is the result of applying the Waves filter with the above settings to the image in Fig. 5. It represents Phase 0 of the wave.
Here is the result of applying the Waves filter with the above settings to the image in Fig. 5.
And now we will combine those 4 separate images -- phase 0, 90, 180 and 270 -- into an animation.
Fig. 9. The Layers window after all 4 layers have been pasted.
Now that all 4 layers representing different phases of the animation have been created, we need to export this file as an animated GIF. Shift+Ctrl+S will bring up Save Image dialog box. In this box, type in a file name you want to save it as, making sure its extension is gif. Then when you click "OK", another dialog box will pop up, saying that GIF format can't handle layers and asking if you want to merge the visible layers or save as animation. It will also ask you to convert it to Indexed mode or Grayscale. Choose Indexed.
Then in the Save as GIF dialog box you need to set the delay between frames. In this example I set it to be 300 miliseconds.