There are essentially two different ways to handle images in Drupal. The first way is to use the following modules:
- image, to define the image content type.
- a custom module to add extra metadata fields to image nodes.
- image exact sizes, to resize images when they're uploaded to create two new sizes: thumbnail and preview, and add links to view each size as well as the original. A simple patch to image.module also adds a link to download the original image.
- image_gallery (part of image), which allows images to be organised into predefined galleries when they're uploaded.
- image_import, to batch import images.
- tagadelic, with added quick tags, to allow images to be browsed and tagged/categorised by any user.
- views, to display image nodes filtered by user or tags.
The second approach is to use these modules:
- CCK to define a new content type (content_image) and to add custom fields for metadata.
- imagefield, to add an image field to content_image nodes.
- imagecache, which resizes images on-the-fly to a variety of predefined sizes, when needed for display.
- views and tagadelic again (see above).
The CCK approach would seem to be better as it provides integration with Views, allowing image nodes to be filtered and sorted using the metadata fields. CCK also allows the metadata fields to be administered using the admin interface, whereas my custom module has the extra fields hard-coded. However, the modules image_extra and image_gallery, which provide a lot of useful functions, only work with image nodes, not custom content_image nodes created using CCK.
I can't see a way out of this dilemma at the moment, so ended up using the first, non-CCK-based approach. I'm still worried, though, that this is going to lead to a lot of metadata trapped in not particularly accessible fields, reducing the usefulness of an accumulated database of images.