- Timestamp:
- 2021-02-26T19:39:51+13:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone2/perllib/cpan/Image/ExifTool/GIMP.pm
r24107 r34921 5 5 # 6 6 # Revisions: 2010/10/05 - P. Harvey Created 7 # 2018/08/21 - PH Updated to current XCF specification (v013) 7 8 # 8 9 # References: 1) GIMP source code 9 # 2) http ://svn.gnome.org/viewvc/gimp/trunk/devel-docs/xcf.txt?view=markup10 # 2) https://gitlab.gnome.org/GNOME/gimp/blob/master/devel-docs/xcf.txt 10 11 #------------------------------------------------------------------------------ 11 12 … … 16 17 use Image::ExifTool qw(:DataAccess :Utils); 17 18 18 $VERSION = '1.0 1';19 $VERSION = '1.03'; 19 20 20 21 sub ProcessParasites($$$); … … 29 30 }, 30 31 header => { SubDirectory => { TagTable => 'Image::ExifTool::GIMP::Header' } }, 32 # recognized properties 33 # 1 - ColorMap 34 # 17 - SamplePoints? (doc says 17 is also "PROP_SAMPLE_POINTS"??) 31 35 17 => { 32 36 Name => 'Compression', … … 39 43 }, 40 44 }, 45 # 18 - Guides 41 46 19 => { 42 47 Name => 'Resolution', 43 48 SubDirectory => { TagTable => 'Image::ExifTool::GIMP::Resolution' }, 44 49 }, 50 20 => { 51 Name => 'Tattoo', 52 Format => 'int32u', 53 }, 45 54 21 => { 46 55 Name => 'Parasites', 47 56 SubDirectory => { TagTable => 'Image::ExifTool::GIMP::Parasite' }, 48 57 }, 58 22 => { 59 Name => 'Units', 60 Format => 'int32u', 61 PrintConv => { 62 1 => 'Inches', 63 2 => 'mm', 64 3 => 'Points', 65 4 => 'Picas', 66 }, 67 }, 68 # 23 Paths 69 # 24 UserUnit 70 # 25 Vectors 49 71 ); 50 72 … … 56 78 Name => 'XCFVersion', 57 79 Format => 'string[5]', 80 DataMember => 'XCFVersion', 81 RawConv => '$$self{XCFVersion} = $val', 58 82 PrintConv => { 59 83 'file' => '0', 60 84 'v001' => '1', 61 85 'v002' => '2', 86 OTHER => sub { my $val = shift; $val =~ s/^v0*//; return $val }, 62 87 }, 63 88 }, … … 73 98 }, 74 99 }, 100 # 26 - [XCF 4 or later] Precision 75 101 ); 76 102 … … 127 153 }, 128 154 }, 155 'gimp-image-metadata' => { 156 Name => 'XML', 157 SubDirectory => { TagTable => 'Image::ExifTool::XMP::XML' }, 158 }, 159 # Seen, but not yet decoded: 160 # gimp-image-grid 161 # jpeg-settings 129 162 ); 130 163 … … 135 168 sub ProcessParasites($$$) 136 169 { 137 my ($e xifTool, $dirInfo, $tagTablePtr) = @_;138 my $unknown = $e xifTool->Options('Unknown') || $exifTool->Options('Verbose');170 my ($et, $dirInfo, $tagTablePtr) = @_; 171 my $unknown = $et->Options('Unknown') || $et->Options('Verbose'); 139 172 my $dataPt = $$dirInfo{DataPt}; 140 173 my $pos = $$dirInfo{DirStart} || 0; 141 174 my $end = length $$dataPt; 142 $e xifTool->VerboseDir('Parasites', undef, $end);175 $et->VerboseDir('Parasites', undef, $end); 143 176 for (;;) { 144 177 last if $pos + 4 > $end; … … 161 194 $name =~ s/([a-z])-([a-z])/$1\u$2/g; 162 195 $name = "GIMP-$name" unless length($name) > 1; 163 Image::ExifTool::AddTagToTable($tagTablePtr, $tag, { Name => $name, Unknown => 1 });196 AddTagToTable($tagTablePtr, $tag, { Name => $name, Unknown => 1 }); 164 197 } 165 $e xifTool->HandleTag($tagTablePtr, $tag, undef,198 $et->HandleTag($tagTablePtr, $tag, undef, 166 199 DataPt => $dataPt, 167 200 Start => $pos, … … 179 212 sub ProcessXCF($$) 180 213 { 181 my ($e xifTool, $dirInfo) = @_;214 my ($et, $dirInfo) = @_; 182 215 my $raf = $$dirInfo{RAF}; 183 216 my $buff; … … 187 220 188 221 my $tagTablePtr = GetTagTable('Image::ExifTool::GIMP::Main'); 189 my $verbose = $e xifTool->Options('Verbose');190 $e xifTool->SetFileType();222 my $verbose = $et->Options('Verbose'); 223 $et->SetFileType(); 191 224 SetByteOrder('MM'); 192 225 193 226 # process the XCF header 194 $exifTool->HandleTag($tagTablePtr, 'header', $buff); 227 $et->HandleTag($tagTablePtr, 'header', $buff); 228 229 # skip over precision for XCV version 4 or later 230 $raf->Seek(4, 1) if $$et{XCFVersion} =~ /^v0*(\d+)/ and $1 >= 4; 195 231 196 232 # loop through image properties … … 199 235 my $tag = Get32u(\$buff, 0) or last; 200 236 my $size = Get32u(\$buff, 4); 201 $verbose and $e xifTool->VPrint(0, "XCF property $tag ($size bytes):\n");237 $verbose and $et->VPrint(0, "XCF property $tag ($size bytes):\n"); 202 238 unless ($$tagTablePtr{$tag}) { 203 239 $raf->Seek($size, 1); … … 205 241 } 206 242 $raf->Read($buff, $size) == $size or last; 207 $e xifTool->HandleTag($tagTablePtr, $tag, undef,243 $et->HandleTag($tagTablePtr, $tag, undef, 208 244 DataPt => \$buff, 209 245 DataPos => $raf->Tell() - $size, … … 235 271 =head1 AUTHOR 236 272 237 Copyright 2003-20 11, Phil Harvey (phil at owl.phy.queensu.ca)273 Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com) 238 274 239 275 This library is free software; you can redistribute it and/or modify it
Note:
See TracChangeset
for help on using the changeset viewer.