ljr/wcmtools/lib/S2/EXIF.pm

136 lines
3.3 KiB
Perl
Executable File

#!/usr/bin/perl
#
# This is a helper package, contains info about EXIF tag categories and how to print them
#
package S2::EXIF;
use strict;
use vars qw(@TAG_CAT %TAG_CAT);
# rough categories which can optionally be used to display tags
# with coherent ordering
@TAG_CAT =
(
[ media => {
name => 'Media Information',
tags => [ qw (
PixelXDimension
PixelYDimension
ImageWidth
ImageLength
Compression
CompressedBitsPerPixel
)
],
},
],
[ image => {
name => 'Image Information',
tags => [ qw (
DateTime
DateTimeOriginal
ImageDescription
UserComment
Make
Software
Artist
Copyright
ExifVersion
FlashpixVersion
)
],
},
],
[ exposure => {
name => 'Exposure Settings',
tags => [ qw(
Orientation
Flash
FlashEnergy
LightSource
ExposureTime
ExposureProgram
ExposureMode
DigitalZoomRatio
ShutterSpeedValue
ApertureValue
MeteringMode
WhiteBalance
Contrast
Saturation
Sharpness
SensingMethod
FocalLength
ISOSpeedRatings
FNumber
)
],
},
],
[ gps => {
name => 'GPS Information',
tags => [ qw(
GPSLatitudeRef
GPSLatitude
GPSLongitudeRef
GPSLongitude
GPSAltitudeRef
GPSAltitude
GPSTimeStamp
GPSDateStamp
GPSDOP
GPSImgDirectionRef
GPSImgDirection
)
],
},
],
);
# make mapping into array
%TAG_CAT = map { $_->[0] => $_->[1] } @TAG_CAT;
# return all tags in all categories
sub get_tag_info {
my @ret = ();
foreach my $currcat (@S2::EXIF::TAG_CAT) {
push @ret, @{$currcat->[1]->{tags}};
}
return @ret;
}
# return hashref of category keys => names
sub get_cat_info {
return { map { $_->[0] => $_->[1]->{name} } @S2::EXIF::TAG_CAT };
}
# return ordered array of category keys
sub get_cat_order {
return map { $_->[0] } @S2::EXIF::TAG_CAT;
}
# return the name of a single category
sub get_cat_name {
return () unless $TAG_CAT{$_[0]};
return $TAG_CAT{$_[0]}->{name};
}
# return the tags in a given cateogry
sub get_cat_tags {
return () unless $TAG_CAT{$_[0]};
return @{$TAG_CAT{$_[0]}->{tags}};
}
# return all tags for all categories
sub get_all_tags {
return map { @{$TAG_CAT{$_}->{tags}} } keys %TAG_CAT;
}
1;