Orby Online

Reinventing ourselves since 2001

Developing LitenessPhoto: a photoblog theme for Wordpress

June 13, 06

In the process of creating a Wordpress photoblog theme called LitenessPhoto for the photography section of this website, I’ve had to learn the ins and outs of PHP’s EXIF extension and GD library of image functions.

Exif display example

For the uninitiated, EXIF data is information stored in an image file that can specify what kind of camera was used to take a digital picture, exposure information, image resolution, and quite a bit more. For a good overview, check out this Wikipedia article. The GD library allows PHP to create, manipulate, and pull information from photos.

I created Orby Photo with the intention of being able to automatically display the exposure time, f/stop, exposure bias, focal length, and ISO speed of any pictures taken with my camera; all without any work needing to be done by me (use of the EXIF extension). I also want the ability to display an album picture (usually a combination of some of the photos from an album) created by myself, or have one created automatically by PHP if one created by me is not present in a specified folder (use of the GD library).

Although this was easy on paper, a number of wrenches and baby sledges were thrown into the mix at various points during and after development.

For instance, getting the f/stop value should be as easy as $aperture = $exif[FNumber];. However, it seems that the presence of the $exif[FNumber] variable is dependent upon which version of iPhoto I’m using. This forces me to use $exif[ApertureValue] whenever $aperture = $exif[FNumber]; isn’t present.

For reasons I won’t go into here, these numbers are not the same. Instead, $exif[FNumber] is equal to to the square root of two raised to the power of the value $exif[ApertureValue]. Because we’re now dealing with irrational numbers, the computed f/stop value doesn’t always come out to the correct f/stop value of the image. Because of this, a series of if/else statements must be present in order to correct for situations where the computed value is not equal to the actual f/stop value (e.g. 21.9 instead of 22). Because wider f/stop values sometimes include one decimal place, I couldn’t simply round to the closes whole number, or f/2.8 would become f/3.

Instead of a simple output statement for the f/stop value, the code quickly ballooned to:

if (isset($exif[FNumber]))
	$aperture = $exif[FNumber];
	$aperture = round(pow(sqrt(2),
		convert_fraction($exif[ApertureValue], true)),1);

if ($aperture == ‘21.9′)
	$aperture = 22;
elseif ($aperture == ‘14.1′)
	$aperture = 14;
elseif ($aperture == ‘20.1′)
	$aperture = 20;
elseif ($aperture == ‘24.9′)
	$aperture = 25;

$output .= “$tabs<h3>:Aperture</h3>:\\n$tabs<p>:f/”.$aperture.”</p>:\\n”;

I hope to finish up development of the theme soon, and then begin the process of packaging it up so other Wordpress users can easily add it to their sites.

  1. 1
    Seth says:
    June 14th, 2006 at 7:06 am «

    I’ve just started messing around with wordpress with the idea of starting something like what you’ve just accomplished. It’s truly amazing how you’ve managed to make this wordpress theme look just like the bowman gallery templates for movable type. Can’t wait to try it out for myself.

  2. 2
    Mic says:
    July 4th, 2006 at 11:06 am «

    Hey there,

    I stumbled onto your site trying to find a way to do exactly what you’re doing (particularly displaying EXIF data when using iPhoto and Wordpress.)

    Given the popularity of digital photography, I thought I would find hundreds of good options that didn’t require a computer science degree to implement, but I found none.

    Love what you’re done so far and can’t wait until you package it for other WP users!


  3. 3
    Frankie says:
    October 5th, 2006 at 3:27 pm «


    you did a fantastic job with your wordpress customization. I could not believe that someone would do such a great transition of the bowman site. You did it!


  4. 4
    Anya says:
    November 3rd, 2006 at 3:24 pm «

    Is there a way we can be sure to find out when your theme is ready? (I’m waiting! :-) )

Leave a Reply