Writing Your Own Image Gallery Application with the UNIX Shell

Digital photography has become so ubiquitous today that even medium-range
mobile phones can capture photographs. Once you
transfer photos to the PC, you need to be able to share them with
friends and relatives. Most digital cameras produce such high-resolution
images that sending them directly to folks via e-mail is
not always convenient.

This is when you need an on-line photo-sharing Web site, such as flickr.com,
to help share photographs simply by uploading them. Of course, you
also can do the heavy lifting with tools such as gallery2.

But, in this article, I discuss how to utilize the power of the
Linux command line to create an image gallery.

A Brief Survey of the Graphics Tools in Linux

All of you have heard of the GNU Image Manipulation Program (GIMP). It is
useful for interactive image manipulation, photo retouching
and other editing purposes, but I find it quite difficult to use. There are
often much simpler alternatives that do a much better job for
commonplace image editing. The nice
thing about these alternatives is that you can run them directly from the almighty
command line, which can save time and facilitate easy scripting.
Here are some such tools that interest me:

qiv: this one is the fastest of the lot. It is lightweight, and it can handle a
huge list of images on the command line. In fact, you can reproduce the
“persistence of vision” effect of video by dumping the frames
using MPlayer's -vo jpeg or -vo png driver and view them using
qiv *. Pressing
the spacebar gives the same effect of actually watching the
video sans the audio.

xloadimage: xloadimage, or xli, is another application for viewing images.

xv: this one is rather outdated now, but it is worth taking a look at it. Some of its
image processing algorithms are cool.

tgif: tgif, along with dia, xfig and friends, is most useful for creating
technical drawings, block diagrams and the like. I find tgif to be really user-friendly and powerful when it comes to certain common image processing
tasks, such as generating a collage or mosaic of images and annotating
images with text.

Netpbm suite: this suite has more than 200 command-line utilities and is
used for
advanced image processing purposes that primarily are designed to be
invoked from the Linux command line.

ImageMagick suite: this suite can be described as the be-all end-all of
image processing.
It has mind-boggling capabilities that can create animations,
logos, convert file formats and, of course, do highly sophisticated image
processing. Go to www.imagemagick.org/Usage for
details on all it can do.

In this article, I focus primarily on using the ImageMagick toolkit
for the purpose of creating an image gallery.

A Few Basics

Obviously, you will want the gallery to be an HTML page for sharing
with friends using the Web.

The first step involves generating thumbnails for all the images. These
have to be linked to the images using HTML tags. But, before that, you need
to take care of the images' varying orientations. Different photographs may
have different dimensions, and you should be able to categorize the
thumbnails based on that. This is no hard and fast rule, but I prefer it
this way.

The next task is to annotate the images with relevant text,
by watermarking either below or above the image.
ImageMagick has a rich toolchest for achieving this task in an
elegant manner.

You also will want to be able to retrieve, save and
optionally display the EXIF data embedded in the photographs. After
annotating the images, you may want to generate borders, frames
or 3-D reliefs for better visual appeal. Usually, they look nice on Web
pages with a white background.

Another nice-to-have feature is to be able to generate black-and-white photo
equivalents. Of course, in addition to all
this, if users want to download the original, untouched, pristine
photo in full size, they should be able to do so. It might be worthwhile
to provide a download link for all the photos in one single zip file.

For people who don't like clicking on each of the thumbnails, you can
provide a slideshow. But, on Linux, you can do much better.
You can create a full-fledged video with sound effects. I prefer a
nice MIDI tune, appropriate for the occasion and mood of the snaps. This
has a side benefit of being directly writable to DVD too.

But before this, it's a good idea to create vertical and horizontal
mirror images of each of the photos. That way, the video has a better
flow and visual appeal. It so happens that this is extremely easy to do with
the Linux command line and ImageMagick.

You might have other requirements, such as correcting the exposure,
brightness or contrast, cropping out certain parts of the image or
doing photo retouching with more interesting effects. Again, ImageMagick
can do the trick (as can qiv and other image display tools). To correct
images, you might prefer an interactive tool, such as The GIMP or
tgif.

Other possibilities exist, such as creating a mosaic of images annotated
with nice fonts, but this does not make much sense in an image gallery
application.

Trending Topics

Upcoming Webinar

Getting Started with DevOps - Including New Data on IT Performance from Puppet Labs 2015 State of DevOps Report

August 27, 2015
12:00 PM CDT

DevOps represents a profound change from the way most IT departments have traditionally worked: from siloed teams and high-anxiety releases to everyone collaborating on uneventful and more frequent releases of higher-quality code. It doesn't matter how large or small an organization is, or even whether it's historically slow moving or risk averse — there are ways to adopt DevOps sanely, and get measurable results in just weeks.