[cd label sample]

arclayer: a GIMP plug-in for bending text (or anything else) in an arc.

I used to make a lot of CD labels in GIMP. And one thing that kept coming up was that I wanted to be able to take some text (or maybe even something else in a layer) and bend it in a circular arc.

Seems like lots of other people wanted that, too -- people are always asking how to do that on #gimp. So I wrote it.

Initially I wrote a little python plugin. It was slow, so I re-wrote it in C. But then GIMP Python wizard Joao S. O. Bueno showed me how to do fast GIMP pixel ops in Python, and that totally cured the speed problem (as well as some problems I'd had with clearing the layer, which turned out to be a bug in GIMP, now fixed).

Download the latest arclayer.py from GitHub or a static arclayer-0.3.py.
Install it in the plug-ins subfolder of your GIMP profile (e.g. on Linux, $HOME/.gimp-2.4/plug-ins/arclayer.py). If you don't know where your profile folder is, bring up GIMP's Preferences, click on the expander next to Folders and look to see where Plug-ins are saved. That's where you need to put arclayer.py. On Linux, Mac OS X and other Unix systems, you'll probably also need to make it executable: chmod uga+w file.py

It shows up in the menus as Filters->Distorts->Arclayer(py)...

This uses GIMP Python-fu, so you need to have that installed. You can tell by looking for a Filters->Python-fu menu. If you're on Linux, you probably already have it. On Windows, follow the steps in the GIMP-Windows FAQ under "What do I need to do to get Python scripts to work?" On Mac, it's harder and I don't have a good answer, sorry!

Just for historical purposes, here's the old C version, set up to build and install via gimptool. Extract it with: tar czvf arclayer.tar.gz, then install it by running: gimptool --install-strip arclayer.c When it's installed (restart gimp if it's already running) it should show up in the Filters->Distorts menu.

Related GIMP functions

I (and others on #gimp) had been telling people for a while that they could get the same functionality using the built-in methods

Filters->Distorts->Polar Coords..., or Filters->Alpha to Logo->Text Circle...

You know what? It's not true. Text Circle is tricky because you can only run it to create a new text layer (from File->Create->Logos) but even then, the results it gives aren't clean at all -- far worse than the holes you sometimes get from arclayer.

Polar Coords could do a much better job, in theory (be sure to un-check "Map from top"); but it doesn't do a straight mapping from rectangular to polar coordinates, instead scaling the result in some way known only to the original author. I worked at it for hours and couldn't figure out how to map existing text into a circle using Polar Coords without shrinking the text so much it was worthless. (If anyone knows the secret, please tell me! I thought it might be easier on everybody if I wrote a script-fu that made an arc using Polar Coords, but I couldn't find any layer size that would reliably do that.)

If you're only trying to bend text, nothing else, there is a way: the Text along path option in the Text tool options. The trick is making a path that looks anything like a circle. The easiest way is to make a two-point horizontal path, then drag the center of the point straight up until it looks like a circle. Then while it's the active path, create your text layer (or activate its Text tool options in the context menu of the Layers dialog), then click the Text along path button in tool options. That gives you another path, so go to the paths dialog and turn it into a selection and fill (or stroke, or whatever) the selection. Lots of steps, but it's flexible and does a nice job.

You might think Filters->Distorts->Curve Bend... would do it, but although that lets you shape the top and bottom of the text, it won't actually rotate any letters.

What a hassle! I guess writing arclayer was worth it after all.

Known Issues

Arclayer sometimes leaves "holes" that need to be filled in by hand.

The C version uses a lot of memory, allocating a chunk the size of the new layer, and it still doesn't always fill all the holes in the layer being bent. There's code in there to fix the memory problem (the SMALL_TILE code) but it doesn't always work, sometimes crashes and I'm not sure why. If the layer is bigger than some fixed size (currently hardwired to 130000000 for no good reason at all), it will switch to pixel-by-pixel code, which is slow but memory efficient. One more problem: the UI was written for gimp 1.3 and gtk 2.0; in gimp 1.2 it doesn't show a number for the radius slider. I'll fix that when I get a chance.

Arclayer was originally on my CD Plug-ins page, which also has a GIMP script to make a template for a printable CD label.


My GIMP book!
More of my Software
Linux Imaging
Shallowsky Home
mail me