136 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			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;
 |