0.6.9
This commit is contained in:
144
bin/lib/Image/ExifTool/Radiance.pm
Normal file
144
bin/lib/Image/ExifTool/Radiance.pm
Normal file
@@ -0,0 +1,144 @@
|
||||
#------------------------------------------------------------------------------
|
||||
# File: Radiance.pm
|
||||
#
|
||||
# Description: Read Radiance RGBE HDR meta information
|
||||
#
|
||||
# Revisions: 2011/12/10 - P. Harvey Created
|
||||
#
|
||||
# References: 1) http://www.graphics.cornell.edu/online/formats/rgbe/
|
||||
# 2) http://radsite.lbl.gov/radiance/refer/filefmts.pdf
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
package Image::ExifTool::Radiance;
|
||||
|
||||
use strict;
|
||||
use vars qw($VERSION);
|
||||
use Image::ExifTool qw(:DataAccess :Utils);
|
||||
|
||||
$VERSION = '1.01';
|
||||
|
||||
# Radiance tags
|
||||
%Image::ExifTool::Radiance::Main = (
|
||||
GROUPS => { 2 => 'Image' },
|
||||
NOTES => q{
|
||||
Information extracted from Radiance RGBE HDR images. Tag ID's are all
|
||||
uppercase as stored in the file, but converted to lowercase by when
|
||||
extracting to avoid conflicts with internal ExifTool variables. See
|
||||
L<http://radsite.lbl.gov/radiance/refer/filefmts.pdf> and
|
||||
L<http://www.graphics.cornell.edu/online/formats/rgbe/> for the
|
||||
specification.
|
||||
},
|
||||
_orient => {
|
||||
Name => 'Orientation',
|
||||
PrintConv => {
|
||||
'-Y +X' => 'Horizontal (normal)',
|
||||
'-Y -X' => 'Mirror horizontal',
|
||||
'+Y -X' => 'Rotate 180',
|
||||
'+Y +X' => 'Mirror vertical',
|
||||
'+X -Y' => 'Mirror horizontal and rotate 270 CW',
|
||||
'+X +Y' => 'Rotate 90 CW',
|
||||
'-X +Y' => 'Mirror horizontal and rotate 90 CW',
|
||||
'-X -Y' => 'Rotate 270 CW',
|
||||
},
|
||||
},
|
||||
_command => 'Command',
|
||||
software => 'Software',
|
||||
view => 'View',
|
||||
'format' => 'Format', # <-- this is the one that caused the conflict when uppercase
|
||||
exposure => {
|
||||
Name => 'Exposure',
|
||||
Notes => 'divide pixel values by this to get watts/steradian/meter^2',
|
||||
},
|
||||
gamma => 'Gamma',
|
||||
colorcorr => 'ColorCorrection',
|
||||
pixaspect => 'PixelAspectRatio',
|
||||
primaries => 'ColorPrimaries',
|
||||
);
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Extract information from a Radiance HDR file
|
||||
# Inputs: 0) ExifTool object reference, 1) DirInfo reference
|
||||
# Returns: 1 on success, 0 if this wasn't a valid RGBE image
|
||||
sub ProcessHDR($$)
|
||||
{
|
||||
my ($et, $dirInfo) = @_;
|
||||
my $raf = $$dirInfo{RAF};
|
||||
my $buff;
|
||||
local $/ = "\x0a"; # set newline character for reading
|
||||
|
||||
# verify this is a valid RIFF file
|
||||
return 0 unless $raf->ReadLine($buff) and $buff =~ /^#\?(RADIANCE|RGBE)\x0a/s;
|
||||
$et->SetFileType();
|
||||
my $tagTablePtr = GetTagTable('Image::ExifTool::Radiance::Main');
|
||||
|
||||
while ($raf->ReadLine($buff)) {
|
||||
chomp $buff;
|
||||
last unless length($buff) > 0 and length($buff) < 4096;
|
||||
unless ($buff =~ /^(.*)?\s*=\s*(.*)/) {
|
||||
$et->HandleTag($tagTablePtr, '_command', $buff);
|
||||
next;
|
||||
}
|
||||
# use lower-case tag names to avoid conflicts with reserved tag table entries
|
||||
my ($tag, $val) = (lc $1, $2);
|
||||
my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag);
|
||||
unless ($tagInfo) {
|
||||
my $name = $tag;
|
||||
$name =~ tr/-_a-zA-Z0-9//dc;
|
||||
next unless length($name) > 1;
|
||||
$name = ucfirst $name;
|
||||
$tagInfo = { Name => $name };
|
||||
AddTagToTable($tagTablePtr, $tag, $tagInfo);
|
||||
}
|
||||
$et->FoundTag($tagInfo, $val);
|
||||
}
|
||||
# get image dimensions
|
||||
if ($raf->ReadLine($buff) and $buff =~ /([-+][XY])\s*(\d+)\s*([-+][XY])\s*(\d+)/) {
|
||||
$et->HandleTag($tagTablePtr, '_orient', "$1 $3");
|
||||
$et->FoundTag('ImageHeight', $2);
|
||||
$et->FoundTag('ImageWidth', $4);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
1; # end
|
||||
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Image::ExifTool::Radiance - Read Radiance RGBE HDR meta information
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
This module is used by Image::ExifTool
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
This module contains definitions required by Image::ExifTool to extract meta
|
||||
information from Radiance RGBE images. RGBE (Red Green Blue Exponent)
|
||||
images are a type of high dynamic-range image.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Copyright 2003-2018, Phil Harvey (phil at owl.phy.queensu.ca)
|
||||
|
||||
This library is free software; you can redistribute it and/or modify it
|
||||
under the same terms as Perl itself.
|
||||
|
||||
=head1 REFERENCES
|
||||
|
||||
=over 4
|
||||
|
||||
=item L<http://radsite.lbl.gov/radiance/refer/filefmts.pdf>
|
||||
|
||||
=item L<http://www.graphics.cornell.edu/online/formats/rgbe/>
|
||||
|
||||
=back
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
L<Image::ExifTool::TagNames/Radiance Tags>,
|
||||
L<Image::ExifTool(3pm)|Image::ExifTool>
|
||||
|
||||
=cut
|
||||
|
||||
Reference in New Issue
Block a user