...making Linux just a little more fun! | My Guide To Digital Photography By Rob Tougher

### Contents

- Introduction
- Storing Photographs
- Manipulating Photographs
- Sharing Photographs
- Conclusion

### Introduction

Since its initial installation on my machine in 2000, Linux has fulfilled my computing needs. I use Linux for the following:

- web browsing and email
- software development
- writing articles
- web site hosting
- digital photography

This article focuses on the last item, digital photography, and describes how I use Linux to store, manipulate, and share my digital photographs.

### Storing Photographs

I store my photographs in two places: on my hard drive, which acts as short-term storage, and on CD-ROM, where the photographs are permanently stored. I keep the last few months of photographs on my machine so they can be recalled quickly, and I transfer the older ones to CD-ROM to free up space on my drive.

To download photographs from my camera to my computer, I use the USB Mass Storage Driver. This driver is part of the Linux kernel, and lets me mount my camera as a SCSI device. I then use the mv command to transfer the photographs to my hard disk. My session usually looks like the following:

    prompt$ mount -n /dev/sdb1 /mnt/camera
    prompt$ mv /mnt/camera/dcim/100msdcf/* /home/robt/docs/photographs/
    prompt$ umount -n /mnt/camera

Pretty simple, right? I mount the camera, move the photographs to a directory on my hard disk, and then unmount the camera.

(The USB Mass Storage Driver works with only a few camera models. Mine is a Sony DSC-F707. Many other cameras such as the Canon PowerShot series are recognized by the Gphoto2 program. Some cameras don't work yet under Linux -- it all depends on the camera manufacturer giving us, the free software community, enough technical specifications that we can write a driver.)

When my hard disk becomes filled, I transfer the older photographs to CD-ROM. I accomplish this by placing a blank CD-ROM in my CD Writer and typing the following at a command prompt (see the CD Writing HOWTO for information on how to use your CD Writer):

    prompt$ mkisofs -o cd_image /home/robt/docs/photographs
    prompt$ cdrecord -v speed=4 dev=0,0,0 -data cd_image

This creates a cd image containing my photographs, and burns the image to a fresh CD-ROM.

### Manipulating Photographs

In photography, composition deals with the placement of objects within the frame of the photograph. A photographer makes many important decisions when composing a photograph:

- Should I include X in the photograph?
- Should I shoot this horizontally, or vertically?
- How much depth-of-field should there be?

As a novice photographer, my composition skills are lacking. I usually include too much background in my photographs, and I am oblivious to the camera's numerous features.

I use the GIMP to salvage my poor photographs. GIMP stands for the GNU Image Manipulation Program - it is a full-featured image manipulation application, similar to Adobe's Photoshop. I use it to perform the following:

- crop photographs that are not composed correctly
- change the saturation of colors in photographs
- sharpen photographs that are blurry

These are only a few of the GIMP's features, but they greatly improve the quality of my photographs. I look forward to learning more about the GIMP.

### Sharing Photographs

I share my digital photographs with friends and family. I accomplish this by posting the photographs to a publicly-accessible web site. Before posting, however, I do the following:

- resize the photographs to a suitable web size
- create thumbnails of the photographs
- generate the HTML needed to display the photographs on a web page

I use two Python scripts to perform these operations automatically. The first is named generate_photographs. This script uses the convert command to create web-sized photographs and thumbnails (convert is part of the ImageMagick suite of tools. Definitely check them out). The following is the complete script:

    #!/usr/bin/env python

    import os

    #
    # Prints the call to
    # stdout, and then sends it
    # to the OS.
    #
    def system_call(s):
    	print s
    	os.system(s)

    #
    # Clear out the directories. "small"
    # contains thumbnails, and "medium"
    # contains web-sized photographs.
    #
    for d in ("small", "medium"):

    	system_call("rm -rf " + d)
    	system_call("mkdir " + d)

    files = os.listdir("photographs")

    for file in files:

    	if file != ".directory":

    		system_call("convert -resize 640x480 photographs/" + file + " medium/" + file)
    		system_call("convert -resize 160x120 medium/" + file + " small/" + file)

The second script is named generate_html. It loops through the photographs, and creates the HTML needed to display them on a web page. The following is the script, trimmed to show the Python code only:

    #!/usr/bin/env python

    import os

    #
    # HTML-related stuff removed....
    #
    html = ""

    files = os.listdir("photographs")
    br = 0

    for file in files:

    	html += '<a href="medium/' + file + '">'
    	html += '<img src="small/' + file + '"></img>\n'
    	html += '</a>'

    	if br:
    		html += '<br>\n'
    		br = 0
    	else:
    		br = 1

    #
    # HTML-related stuff removed....
    #

    f = open("index.php","w+b")
    f.write(html)
    f.close()

After running these two scripts, I post the files to my web site, and email the address to everyone.

### Conclusion

In this article I described how I use Linux to store, manipulate, and share my digital photographs. Hopefully I explained my techniques clearly enough so that you can use them for your digital photography needs.

#### Rob Tougher

Rob is a C++ software engineer in the New York City area.

Copyright © 2002, Rob Tougher. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 82 of Linux Gazette, September 2002