|It's better to pass command line args as an array than a string.|
Since Java's early days I have been manipulating images inside of web apps. In the 1990s, Java image manipulation was very crude and slow. If I recall correctly, it could not be done, easily, on a headless server. I believe it required instantiating a Java applet (canvas) to do the manipulation, hence the need for a windowing system.
I've tried other Java image APIs including ImageMagick, but none could hold a candle to OS X's SIPS when it came to speed. The first time I tried SIPS, in 2005, I resized a 24 megapixel image into a thumbnail. When I hit enter the command prompt immediately returned so I thought it failed. It turns out it worked, flawlessly. A quick call to the command line is an elegant and simple way to implement SIPS in Java, or any other language. If you want to get fancy, you can spin it off in it's own thread so it doesn't block. As always, be careful to avoid any race conditions. (Now that I think about it, it's probably a better idea not to spin it off in it's own thread until you need to scale your code.)
I used SIPS exclusively with my photo sharing website (Epics3) that let users upload photos for storage in their own S3 bucket as a static web page. Although the Epics3 (and Adjix) servers are now defunct, along with Posterous, my images live on in AWS S3:
The downside of SIPS is it hasn't been continuously developed. Some of the things it can't do is overlay text or read GPS EXIF metadata.
But, after reading Dave Winer's request for a text image overlaying API, it got me thinking again. Especially when I proposed this idea for Twitter 519 days ago. I'm surprised there isn't already a popular text image overlaying REST API. Perhaps soon, very soon, there will be the API we seek.