diff options
author | exiftool <phil@work3.phy.queensu.ca> | 2017-07-21 08:11:15 -0400 |
---|---|---|
committer | exiftool <phil@work3.phy.queensu.ca> | 2017-07-21 08:11:15 -0400 |
commit | 03c3b7e1e9eb64cf39fc5e8282bd5e3e04960f13 (patch) | |
tree | 14982153a9a1496d44dc2f8cf2b67cb587c57403 /lib/Image/ExifTool | |
parent | 62ad2a0dd008ed6cc793703a9f8ede109326533b (diff) |
Update to 10.60
Diffstat (limited to 'lib/Image/ExifTool')
-rw-r--r-- | lib/Image/ExifTool/BuildTagLookup.pm | 7 | ||||
-rw-r--r-- | lib/Image/ExifTool/Canon.pm | 1 | ||||
-rw-r--r-- | lib/Image/ExifTool/Exif.pm | 1 | ||||
-rw-r--r-- | lib/Image/ExifTool/FLIR.pm | 3 | ||||
-rwxr-xr-x[-rw-r--r--] | lib/Image/ExifTool/Lang/de.pm | 62 | ||||
-rw-r--r-- | lib/Image/ExifTool/Minolta.pm | 68 | ||||
-rw-r--r-- | lib/Image/ExifTool/PNG.pm | 7 | ||||
-rw-r--r-- | lib/Image/ExifTool/Pentax.pm | 3 | ||||
-rw-r--r-- | lib/Image/ExifTool/Sony.pm | 52 | ||||
-rw-r--r-- | lib/Image/ExifTool/TagNames.pod | 10 | ||||
-rw-r--r-- | lib/Image/ExifTool/Writer.pl | 52 |
11 files changed, 150 insertions, 116 deletions
diff --git a/lib/Image/ExifTool/BuildTagLookup.pm b/lib/Image/ExifTool/BuildTagLookup.pm index 9bf75570..6c5e40eb 100644 --- a/lib/Image/ExifTool/BuildTagLookup.pm +++ b/lib/Image/ExifTool/BuildTagLookup.pm @@ -34,7 +34,7 @@ use Image::ExifTool::Nikon; use Image::ExifTool::Validate; use Image::ExifTool::MacOS; -$VERSION = '3.09'; +$VERSION = '3.10'; @ISA = qw(Exporter); sub NumbersFirst($$); @@ -240,6 +240,11 @@ The EXIF meta information is organized into different Image File Directories ExifTool family 1 group names. When writing EXIF information, the default B<Group> listed below is used unless another group is specified. +Mandatory tags (indicated by a colon after the B<Writable> type) may be +added automatically with default values when creating a new IFD, and the IFD +is removed automatically when deleting tags if only default-valued mandatory +tags remain. + The table below lists all EXIF tags. Also listed are TIFF, DNG, HDP and other tags which are not part of the EXIF specification, but may co-exist with EXIF tags in some images. Tags which are part of the EXIF 2.31 diff --git a/lib/Image/ExifTool/Canon.pm b/lib/Image/ExifTool/Canon.pm index c668cd3f..633381f6 100644 --- a/lib/Image/ExifTool/Canon.pm +++ b/lib/Image/ExifTool/Canon.pm @@ -144,6 +144,7 @@ $VERSION = '3.78'; # 27 => 'Carl Zeiss Distagon T* 28mm f/2 ZF', #PH (must be with an adapter, because the ZF version is a Nikon mount) # 27 => 'EMF adapter for Canon EOS digital cameras', #50 (reports MaxFocalLength of 65535) # 27 => optix adapter + # 27 => Venus Optics Laowa 12mm f2.8 Zero-D or 105mm f2 (T3.2) Smooth Trans Focus (ref IB) 28 => 'Canon EF 80-200mm f/4.5-5.6 or Tamron Lens', #32 28.1 => 'Tamron SP AF 28-105mm f/2.8 LD Aspherical IF', #15 28.2 => 'Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical [IF] Macro', #4 diff --git a/lib/Image/ExifTool/Exif.pm b/lib/Image/ExifTool/Exif.pm index 1de14bb9..16f89352 100644 --- a/lib/Image/ExifTool/Exif.pm +++ b/lib/Image/ExifTool/Exif.pm @@ -5093,6 +5093,7 @@ sub ExifTime($) #------------------------------------------------------------------------------ # Generate TIFF file from scratch (in current byte order) # Inputs: 0) hash of IFD entries (TagID => Value; multiple values space-delimited) +# 1) raw image data reference # Returns: TIFF image data, or undef on error sub GenerateTIFF($$) { diff --git a/lib/Image/ExifTool/FLIR.pm b/lib/Image/ExifTool/FLIR.pm index 5afeabb9..e2b8f623 100644 --- a/lib/Image/ExifTool/FLIR.pm +++ b/lib/Image/ExifTool/FLIR.pm @@ -1222,8 +1222,7 @@ sub GetImageType($$$) } elsif (length $val != $w * $h * 2) { $et->Warn("Unrecognized FLIR $tag data format"); } elsif (GetByteOrder() eq 'II') { - require Image::ExifTool::Sony; - $val = Image::ExifTool::Sony::MakeTiffHeader($w,$h,1,16) . $val; + $val = Image::ExifTool::MakeTiffHeader($w,$h,1,16) . $val; $type = 'TIFF'; } else { $et->Warn("Don't yet support big-endian TIFF $tag"); diff --git a/lib/Image/ExifTool/Lang/de.pm b/lib/Image/ExifTool/Lang/de.pm index 54986340..5c77a36e 100644..100755 --- a/lib/Image/ExifTool/Lang/de.pm +++ b/lib/Image/ExifTool/Lang/de.pm @@ -11,7 +11,7 @@ package Image::ExifTool::Lang::de; use strict; use vars qw($VERSION); -$VERSION = '1.32'; +$VERSION = '1.33'; %Image::ExifTool::Lang::de::Translate = ( 'AEAperture' => 'AE-Blende', @@ -1094,7 +1094,7 @@ $VERSION = '1.32'; }, 'Artist' => 'Künstler', 'ArtworkCreator' => 'Artwork Ersteller', - 'AsShotICCProfile' => 'Aufnahme ICC-Profil', + 'AsShotICCProfile' => 'Aufnahme Farbprofil', 'AsShotNeutral' => 'Aufnahme Neutral', 'AsShotPreProfileMatrix' => 'Aufnahme Pre Profil Matrix', 'AsShotProfileName' => 'Aufnahme Pre Profilname', @@ -2334,7 +2334,7 @@ $VERSION = '1.32'; 'Country' => 'Land', 'Country-PrimaryLocationCode' => 'ISO-Ländercode', 'Country-PrimaryLocationName' => 'Land', - 'CountryCode' => 'Länderkennzeichen', + 'CountryCode' => 'ISO-Ländercode', 'Coverage' => 'Anwendungsbereich', 'CreateDate' => 'Digitalisierungsdatum/-uhrzeit', 'CreationDate' => 'Aufnahmedatum', @@ -2376,8 +2376,8 @@ $VERSION = '1.32'; 'CreatorContactInfo' => 'Ersteller Kontaktinfo', 'CreatorCountry' => 'Ersteller - Land', 'CreatorPostalCode' => 'Ersteller - PLZ', - 'CreatorRegion' => 'Ersteller - Staat/Provinz', - 'CreatorTool' => 'Erzeugertool', + 'CreatorRegion' => 'Ersteller - Bundesland/Kanton', + 'CreatorTool' => 'Erstellertool', 'CreatorWorkEmail' => 'Ersteller - E-Mail', 'CreatorWorkTelephone' => 'Ersteller - Telefon', 'CreatorWorkURL' => 'Ersteller - Webseite(n)', @@ -3651,7 +3651,7 @@ $VERSION = '1.32'; 'FirmwareVersion' => 'Firmware-Version', 'FixtureIdentifier' => 'Kennzeichnung', 'Flash' => { - Description => 'Blitz', + Description => 'Blitzmodus', PrintConv => { 'Auto, Did not fire' => 'Blitz wurde nicht ausgelöst, Automodus', 'Auto, Did not fire, Red-eye reduction' => 'Blitz wurde nicht ausgelöst, Rote-Augen-Reduzierung', @@ -4277,9 +4277,9 @@ $VERSION = '1.32'; }, 'GEImageSize' => 'GE Bildgröße', 'GIFVersion' => 'GIF-Version', - 'GPSAltitude' => 'Höhe', + 'GPSAltitude' => 'GPS Höhe', 'GPSAltitudeRef' => { - Description => 'Bezugshöhe', + Description => 'GPS-Höhe Bezug', PrintConv => { 'Above Sea Level' => 'Höhe über Normal-Null (Meeresspiegel)', 'Below Sea Level' => 'Höhe unter Normal-Null (Meeresspiegel)', @@ -4288,7 +4288,7 @@ $VERSION = '1.32'; 'GPSAreaInformation' => 'Name des GPS-Gebietes', 'GPSDOP' => 'Messgenauigkeit', 'GPSDateStamp' => 'GPS Datum', - 'GPSDateTime' => 'GPS-Zeit (Atomuhr)', + 'GPSDateTime' => 'GPS Zeitstempel', 'GPSDestBearing' => 'Motivrichtung', 'GPSDestBearingRef' => { Description => 'Referenz für Motivrichtung', @@ -4297,9 +4297,9 @@ $VERSION = '1.32'; 'True North' => 'Geographische Ausrichtung', }, }, - 'GPSDestDistance' => 'Distanz zum Ziel', + 'GPSDestDistance' => 'GPS Zielentfernung', 'GPSDestDistanceRef' => { - Description => 'Reference for distance to destination', + Description => 'GPS-Zielentfernung Maßeinheit', PrintConv => { 'Kilometers' => 'Kilometer', 'Miles' => 'Meilen', @@ -4323,7 +4323,7 @@ $VERSION = '1.32'; }, }, 'GPSDifferential' => { - Description => 'GPS-Differentialkorrektur', + Description => 'GPS Differentialkorrektur', PrintConv => { 'Differential Corrected' => 'Differentialkorrektur angewandt', 'No Correction' => 'Messung ohne Differentialkorrektur', @@ -4356,7 +4356,7 @@ $VERSION = '1.32'; }, 'GPSMapDatum' => 'Geodätisches Datum', 'GPSMeasureMode' => { - Description => 'GPS-Messverfahren', + Description => 'GPS Messverfahren', PrintConv => { '2-D' => '2-Dimensionale Messung', '2-Dimensional' => '2-Dimensionale Messung', @@ -4378,13 +4378,13 @@ $VERSION = '1.32'; }, }, 'GPSStatus' => { - Description => 'GPS-Empfänger-Status', + Description => 'GPS-Empfänger Status', PrintConv => { 'Measurement Active' => 'Messung aktiv', 'Measurement Void' => 'Messung ungültig', }, }, - 'GPSTimeStamp' => 'GPS-Zeit (Atomuhr)', + 'GPSTimeStamp' => 'GPS-Zeit UTC', 'GPSTrack' => 'Bewegungsrichtung', 'GPSTrackRef' => { Description => 'Referenz für Bewegungsrichtung', @@ -4468,7 +4468,7 @@ $VERSION = '1.32'; }, 'Headline' => 'Überschrift', 'HeightResolution' => 'Vertikale Bildauflösung', - 'HierarchicalSubject' => 'Hierarchische Schlüsselworte', + 'HierarchicalSubject' => 'Hierarchische Schlüsselwörter', 'HighISONoiseReduction' => { Description => 'Rauschunterdrückung bei hoher Empfindlichkeit', PrintConv => { @@ -4536,7 +4536,7 @@ $VERSION = '1.32'; 'HuffmanTable' => 'Huffman Tabelle', 'HyperfocalDistance' => 'Hyperfokale Entfernung', 'ICCProfile' => 'ICC-Profil', - 'ICCProfileName' => 'Name des ICC-Profils', + 'ICCProfileName' => 'ICC-Profil Name', 'ICC_Profile' => 'ICC-Profil', 'ID3Size' => 'ID3 Datenlänge', 'IDCCreativeStyle' => { @@ -4862,7 +4862,7 @@ $VERSION = '1.32'; }, }, 'Instructions' => 'Anweisungen', - 'IntellectualGenre' => 'Genre', + 'IntellectualGenre' => 'Intellektuelles Genre', 'IntelligentAuto' => { PrintConv => { 'Advanced' => 'Erweitert', @@ -4954,7 +4954,7 @@ $VERSION = '1.32'; 'InternalName' => 'Interner Name', 'InternalSerialNumber' => 'Interne Seriennummer', 'InteropIndex' => { - Description => 'Interoperabilitäts-Identifikation', + Description => 'Interoperabilität Identifikation', PrintConv => { 'R03 - DCF option file (Adobe RGB)' => 'R03: DCF Option-Format (Adobe RGB)', 'R98 - DCF basic file (sRGB)' => 'R98: DCF Basic-Format (sRGB)', @@ -4998,14 +4998,14 @@ $VERSION = '1.32'; }, 'JPEGSize' => 'JPEG Größe', 'JPEGTables' => 'JPEG Tabellen', - 'JobID' => 'Job-ID', + 'JobID' => 'Job-Kennung', 'JpgFromRaw' => 'Jpg From Raw Bild', 'JpgFromRawLength' => 'Jpg From Raw Datenlänge', 'JpgFromRawStart' => 'Jpg From Raw Datenposition', 'JpgRecordedPixels' => 'JPEG-Auflösung', 'Key' => 'Schlüssel', 'Keyword' => 'Schlüsselwort', - 'Keywords' => 'Schlüsselwort', + 'Keywords' => 'Schlüsselwörter', 'KodakImageHeight' => 'Kodak-Bildhöhe', 'KodakImageWidth' => 'Kodak-Bildbreite', 'LC1' => 'Objektiv-Wert', @@ -5054,7 +5054,7 @@ $VERSION = '1.32'; 'On' => 'Ein', }, }, - 'Label' => 'Bezeichnung', + 'Label' => 'Beschriftung', 'Landmark' => 'Sehenswürdigkeit', 'Language' => 'Sprache', 'LanguageCode' => { @@ -6051,7 +6051,7 @@ $VERSION = '1.32'; 'OriginalTHMFileType' => 'Original THM Dateityp', 'OriginalTHMImage' => 'Original THM Bild', 'OriginalTHMResource' => 'Original THM Basisdaten', - 'OriginalTransmissionReference' => 'Jobkennung', + 'OriginalTransmissionReference' => 'Anbietervermerk Verweis', 'OriginatingProgram' => 'Erstellungsprogramm', 'OtherImage' => 'Other Image Vorschaubild', 'OtherImageLength' => 'OtherImage Datenlänge', @@ -6511,7 +6511,7 @@ $VERSION = '1.32'; 'ProcessingInfo' => 'Verarbeitungsinformationen', 'ProcessingSoftware' => 'Verarbeitungssoftware', 'Producer' => 'Produzent', - 'ProducerKeywords' => 'Hersteller Schlüsselwort', + 'ProducerKeywords' => 'Hersteller Schlüsselwörter', 'Producers' => 'Produzent', 'ProductID' => 'Produkt-ID', 'ProductionCode' => 'Herstellungskennzeichen', @@ -6533,8 +6533,8 @@ $VERSION = '1.32'; 'ProfileCopyright' => 'Urheberrechtsvermerk', 'ProfileCreator' => 'Profilersteller', 'ProfileDateTime' => 'Profil-Erstellungszeit', - 'ProfileDescription' => 'Profil-Beschreibung', - 'ProfileDescriptionML' => 'Profil-Beschreibung ML', + 'ProfileDescription' => 'Farbprofil Name', + 'ProfileDescriptionML' => 'Farbprofil Name mehrsprachig', 'ProfileFileSignature' => 'Profil-Datei-Signatur', 'ProfileID' => 'Profile-ID', 'ProfileSequenceDesc' => 'Profilsequenz-Beschreibung', @@ -7722,9 +7722,9 @@ $VERSION = '1.32'; 'Monochrome' => 'Monochrom', }, }, - 'Subject' => 'Thema', + 'Subject' => 'Themen/Schlüsselwörter', 'SubjectArea' => 'Hauptobjektposition', - 'SubjectCode' => 'Themencode', + 'SubjectCode' => 'IPTC Themencode', 'SubjectDistance' => 'Objektentfernung', 'SubjectDistanceRange' => { Description => 'Objektdistanzbereich', @@ -8092,7 +8092,7 @@ $VERSION = '1.32'; 'Rotate 90 CW' => '90° im Uhrzeigersinn', }, }, - 'TransmissionReference' => 'Übertragungsbezug', + 'TransmissionReference' => 'Anbietervermerk', 'Trapped' => { PrintConv => { 'Unknown' => 'Unbekannt', @@ -8198,7 +8198,7 @@ $VERSION = '1.32'; 'Enable' => 'Möglich', }, }, - 'UsageTerms' => 'Verwendungsvorschriften', + 'UsageTerms' => 'Nutzungsbedingungen', 'UserComment' => 'Benutzerkommentar', 'UserDef1PictureStyle' => { Description => 'Bildstil Benutzerdefiniert 1', @@ -8632,7 +8632,7 @@ $VERSION = '1.32'; 'XMP' => 'XMP Metadaten', 'XPAuthor' => 'XP Autor', 'XPComment' => 'XP Kommentar', - 'XPKeywords' => 'XP Schlüsselwort', + 'XPKeywords' => 'XP Schlüsselwörter', 'XPSubject' => 'XP Thema', 'XPTitle' => 'XP Titel', 'XResolution' => 'Horizontale Bildauflösung', diff --git a/lib/Image/ExifTool/Minolta.pm b/lib/Image/ExifTool/Minolta.pm index 72346a58..ba3b4b2a 100644 --- a/lib/Image/ExifTool/Minolta.pm +++ b/lib/Image/ExifTool/Minolta.pm @@ -49,7 +49,7 @@ use vars qw($VERSION %minoltaLensTypes %minoltaTeleconverters %minoltaColorMode use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; -$VERSION = '2.52'; +$VERSION = '2.53'; # Full list of product codes for Sony-compatible Minolta lenses # (ref http://www.kb.sony.com/selfservice/documentLink.do?externalId=C1000570) @@ -576,43 +576,45 @@ $VERSION = '2.52'; '65535.42' => 'Sony FE 16-35mm F2.8 GM', #JR (32831 - SEL1635GM) '65535.43' => 'Sony FE 70-200mm F2.8 GM OSS + 1.4X Teleconverter', #JR (33072 - SEL70200GM + SEL14TC) '65535.44' => 'Sony FE 70-200mm F2.8 GM OSS + 2X Teleconverter', #JR (33073 - SEL70200GM + SEL20TC) + '65535.45' => 'Sony FE 100-400mm F4.5-5.6 GM OSS + 1.4X Teleconverter', #JR (33077 - SEL100400GM + SEL14TC) + '65535.46' => 'Sony FE 100-400mm F4.5-5.6 GM OSS + 2X Teleconverter', #JR (33078 - SEL100400GM + SEL20TC) # # 3rd party E lenses # - '65535.45' => 'Samyang AF 50mm F1.4 FE', #JR (32789) - '65535.46' => 'Samyang AF 14mm F2.8 FE', #JR (32790 and 51505) - '65535.47' => 'Samyang AF 35mm F2.8 FE', #PH (51505) - '65535.48' => 'Sigma 19mm F2.8 [EX] DN', #JR (0) - '65535.49' => 'Sigma 30mm F2.8 [EX] DN', #JR (0) - '65535.50' => 'Sigma 60mm F2.8 DN', #JR (0) - '65535.51' => 'Sigma 30mm F1.4 DC DN | C 016', #IB (50480) - '65535.52' => 'Tamron 18-200mm F3.5-6.3 Di III VC', #JR (0 - Model B011) - '65535.53' => 'Tokina Firin 20mm F2 FE MF', #JR (0) - '65535.54' => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR (50992) - '65535.55' => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB (50993) - '65535.56' => 'Voigtlander ULTRA WIDE-HELIAR 12mm F5.6 III', #IB (50994) - '65535.57' => 'Voigtlander NOKTON 40mm F1.2', #JR (50996) - '65535.58' => 'Zeiss Touit 12mm F2.8', #JR (49201 or 0) - '65535.59' => 'Zeiss Touit 32mm F1.8', #JR (49202 or 0) - '65535.60' => 'Zeiss Touit 50mm F2.8 Macro', #JR (49203 or 0) - '65535.61' => 'Zeiss Batis 25mm F2', #JR (49216) - '65535.62' => 'Zeiss Batis 85mm F1.8', #JR (49217) - '65535.63' => 'Zeiss Batis 18mm F2.8', #IB (49218) - '65535.64' => 'Zeiss Batis 135mm F2.8', #IB (49219) - '65535.65' => 'Zeiss Loxia 50mm F2', #JR (49232 or 0) - '65535.66' => 'Zeiss Loxia 35mm F2', #JR (49233 or 0) - '65535.67' => 'Zeiss Loxia 21mm F2.8', #JR (49234) - '65535.68' => 'Zeiss Loxia 85mm F2.4', #JR (49235) + '65535.47' => 'Samyang AF 50mm F1.4 FE', #JR (32789) + '65535.48' => 'Samyang AF 14mm F2.8 FE', #JR (32790 and 51505) + '65535.49' => 'Samyang AF 35mm F2.8 FE', #PH (51505) + '65535.50' => 'Sigma 19mm F2.8 [EX] DN', #JR (0) + '65535.51' => 'Sigma 30mm F2.8 [EX] DN', #JR (0) + '65535.52' => 'Sigma 60mm F2.8 DN', #JR (0) + '65535.53' => 'Sigma 30mm F1.4 DC DN | C 016', #IB (50480) + '65535.54' => 'Tamron 18-200mm F3.5-6.3 Di III VC', #JR (0 - Model B011) + '65535.55' => 'Tokina Firin 20mm F2 FE MF', #JR (0) + '65535.56' => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR (50992) + '65535.57' => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB (50993) + '65535.58' => 'Voigtlander ULTRA WIDE-HELIAR 12mm F5.6 III', #IB (50994) + '65535.59' => 'Voigtlander NOKTON 40mm F1.2', #JR (50996) + '65535.60' => 'Zeiss Touit 12mm F2.8', #JR (49201 or 0) + '65535.61' => 'Zeiss Touit 32mm F1.8', #JR (49202 or 0) + '65535.62' => 'Zeiss Touit 50mm F2.8 Macro', #JR (49203 or 0) + '65535.63' => 'Zeiss Batis 25mm F2', #JR (49216) + '65535.64' => 'Zeiss Batis 85mm F1.8', #JR (49217) + '65535.65' => 'Zeiss Batis 18mm F2.8', #IB (49218) + '65535.66' => 'Zeiss Batis 135mm F2.8', #IB (49219) + '65535.67' => 'Zeiss Loxia 50mm F2', #JR (49232 or 0) + '65535.68' => 'Zeiss Loxia 35mm F2', #JR (49233 or 0) + '65535.69' => 'Zeiss Loxia 21mm F2.8', #JR (49234) + '65535.70' => 'Zeiss Loxia 85mm F2.4', #JR (49235) # # other lenses # - '65535.69' => 'Arax MC 35mm F2.8 Tilt+Shift', #JD - '65535.70' => 'Arax MC 80mm F2.8 Tilt+Shift', #JD - '65535.71' => 'Zenitar MF 16mm F2.8 Fisheye M42', #JD - '65535.72' => 'Samyang 500mm Mirror F8.0', #19 - '65535.73' => 'Pentacon Auto 135mm F2.8', #19 - '65535.74' => 'Pentacon Auto 29mm F2.8', #19 - '65535.75' => 'Helios 44-2 58mm F2.0', #19 + '65535.71' => 'Arax MC 35mm F2.8 Tilt+Shift', #JD + '65535.72' => 'Arax MC 80mm F2.8 Tilt+Shift', #JD + '65535.73' => 'Zenitar MF 16mm F2.8 Fisheye M42', #JD + '65535.74' => 'Samyang 500mm Mirror F8.0', #19 + '65535.75' => 'Pentacon Auto 135mm F2.8', #19 + '65535.76' => 'Pentacon Auto 29mm F2.8', #19 + '65535.77' => 'Helios 44-2 58mm F2.0', #19 ); %minoltaTeleconverters = ( @@ -2719,7 +2721,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' ); return \ "Binary data 7404 bytes" unless $et->Options('Binary'); my @dat = unpack('n*', $val); # for Big-endian # TIFF header for a 16-bit RGB 10dpi 40x30 image - $val = Image::ExifTool::Sony::MakeTiffHeader(40,30,3,16,10); + $val = Image::ExifTool::MakeTiffHeader(40,30,3,16,10); # re-order data to RGB pixels my ($i, @val); for ($i=0; $i<40*30; ++$i) { diff --git a/lib/Image/ExifTool/PNG.pm b/lib/Image/ExifTool/PNG.pm index d5de3060..edeb27db 100644 --- a/lib/Image/ExifTool/PNG.pm +++ b/lib/Image/ExifTool/PNG.pm @@ -26,7 +26,7 @@ use strict; use vars qw($VERSION $AUTOLOAD %stdCase); use Image::ExifTool qw(:DataAccess :Utils); -$VERSION = '1.43'; +$VERSION = '1.44'; sub ProcessPNG_tEXt($$$); sub ProcessPNG_iTXt($$$); @@ -258,10 +258,7 @@ $Image::ExifTool::PNG::colorType = -1; # eXIf $stdCase{exif} => { Name => $stdCase{exif}, - Notes => q{ - proposed but not yet registered. This is where ExifTool will create new - EXIF - }, + Notes => 'this is where ExifTool will create new EXIF', SubDirectory => { TagTable => 'Image::ExifTool::Exif::Main', DirName => 'EXIF', # (to write as a block) diff --git a/lib/Image/ExifTool/Pentax.pm b/lib/Image/ExifTool/Pentax.pm index 723c5a7d..13232294 100644 --- a/lib/Image/ExifTool/Pentax.pm +++ b/lib/Image/ExifTool/Pentax.pm @@ -58,7 +58,7 @@ use Image::ExifTool::Exif; use Image::ExifTool::GPS; use Image::ExifTool::HP; -$VERSION = '3.17'; +$VERSION = '3.18'; sub CryptShutterCount($$); sub PrintFilter($$$); @@ -325,6 +325,7 @@ sub DecodeAFPoints($$$$;$); '8 30' => 'Sigma 17-70mm F2.8-4 DC Macro HSM | C', #27 '8 31' => 'Sigma 18-35mm F1.8 DC HSM', #27 '8 32' => 'Sigma 30mm F1.4 DC HSM | A', #27 + '8 33' => 'Sigma 18-200mm F3.5-6.3 DC MACRO HSM', #DieterPearcey (C014) '8 34' => 'Sigma 18-300mm F3.5-6.3 DC Macro HSM', #NJ '8 59' => 'HD PENTAX-D FA 150-450mm F4.5-5.6 ED DC AW', #29 '8 60' => 'HD PENTAX-D FA* 70-200mm F2.8 ED DC AW', #29 diff --git a/lib/Image/ExifTool/Sony.pm b/lib/Image/ExifTool/Sony.pm index af1840d7..d6d5a839 100644 --- a/lib/Image/ExifTool/Sony.pm +++ b/lib/Image/ExifTool/Sony.pm @@ -31,7 +31,7 @@ use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; use Image::ExifTool::Minolta; -$VERSION = '2.63'; +$VERSION = '2.64'; sub ProcessSRF($$$); sub ProcessSR2($$$); @@ -45,7 +45,6 @@ sub ConvLensSpec($); sub ConvInvLensSpec($); sub PrintLensSpec($); sub PrintInvLensSpec($;$$); -sub MakeTiffHeader($$$$;$); # (%sonyLensTypes is filled in based on Minolta LensType's) @@ -58,6 +57,7 @@ my %sonyLensTypes2 = ( 2 => 'Sony LA-EA2 Adapter', 3 => 'Sony LA-EA3 Adapter', #(NC) ILCE-7 image with A-mount lens, but also has 0x940e 2nd byte=2 6 => 'Sony LA-EA4 Adapter', #(NC) ILCE-7R image with A-mount lens and having phase-detect info blocks in 0x940e AFInfo + # 27 => Venus Optics Laowa 12mm f2.8 Zero-D or 105mm f2 (T3.2) Smooth Trans Focus (ref IB) 44 => 'Metabones Canon EF Smart Adapter', #JR 78 => 'Metabones Canon EF Smart Adapter Mark III or Other Adapter', #PH/JR (also Mark IV, Fotodiox and Viltrox) 234 => 'Metabones Canon EF Smart Adapter Mark IV', #JR @@ -117,6 +117,8 @@ my %sonyLensTypes2 = ( 33072 => 'Sony FE 70-200mm F2.8 GM OSS + 1.4X Teleconverter', #JR 33073 => 'Sony FE 70-200mm F2.8 GM OSS + 2X Teleconverter', #JR 33076 => 'Sony FE 100mm F2.8 STF GM OSS (macro mode)', #JR (with macro switching ring set to "0.57m - 1.0m") + 33077 => 'Sony FE 100-400mm F4.5-5.6 GM OSS + 1.4X Teleconverter', #JR + 33078 => 'Sony FE 100-400mm F4.5-5.6 GM OSS + 2X Teleconverter', #JR 49201 => 'Zeiss Touit 12mm F2.8', #JR (lens firmware Ver.02) 49202 => 'Zeiss Touit 32mm F1.8', #JR (lens firmware Ver.02) @@ -2715,7 +2717,7 @@ my %meterInfo2 = ( return \ "Binary data 7404 bytes" unless $et->Options('Binary'); my @dat = unpack('n*', $val); # TIFF header for a 16-bit RGB 10dpi 40x30 image - $val = MakeTiffHeader(40,30,3,16,10); + $val = Image::ExifTool::MakeTiffHeader(40,30,3,16,10); # re-order data to RGB pixels my ($i, @val); for ($i=0; $i<40*30; ++$i) { @@ -2775,7 +2777,7 @@ my %meterInfo2 = ( return \ "Binary data 7404 bytes" unless $et->Options('Binary'); my @dat = unpack('v*', $val); # TIFF header for a 16-bit RGB 10dpi 40x30 image - $val = MakeTiffHeader(40,30,3,16,10); + $val = Image::ExifTool::MakeTiffHeader(40,30,3,16,10); # re-order data to RGB pixels my ($i, @val); for ($i=0; $i<40*30; ++$i) { @@ -8467,7 +8469,7 @@ my %pictureProfile2010 = ( return \ "Binary data 2640 bytes" unless $et->Options('Binary'); my @dat = unpack('v*', $val); # TIFF header for a 16-bit RGB 10dpi 44x30 image - $val = MakeTiffHeader(44,30,3,16,10); + $val = Image::ExifTool::MakeTiffHeader(44,30,3,16,10); # re-order data to RGB pixels - use same value for R, G and B my ($i, @val); for ($i=0; $i<44*30; ++$i) { @@ -9268,44 +9270,6 @@ sub ProcessSonyPIC($$$) } #------------------------------------------------------------------------------ -# Make TIFF header for raw data -# Inputs: 0) width, 1) height, 2) num colour components, 3) bits, 4) resolution -# Returns: TIFF header -# Notes: Multi-byte data must be little-endian -sub MakeTiffHeader($$$$;$) -{ - my ($w, $h, $cols, $bits, $res) = @_; - $res or $res = 72; - my $saveOrder = GetByteOrder(); - SetByteOrder('II'); - my $hdr = - "\x49\x49\x2a\0\x08\0\0\0\x0e\0" . # 0x00 14 menu entries: - "\xfe\x00\x04\0\x01\0\0\0\x00\0\0\0" . # 0x0a SubfileType = 0 - "\x00\x01\x04\0\x01\0\0\0" . Set32u($w) . # 0x16 ImageWidth - "\x01\x01\x04\0\x01\0\0\0" . Set32u($h) . # 0x22 ImageHeight - "\x02\x01\x03\0" . Set32u($cols) . # 0x2e BitsPerSample - Set32u($cols == 1 ? $bits : 0xb6) . - "\x03\x01\x03\0\x01\0\0\0\x01\0\0\0" . # 0x3a Compression = 1 - "\x06\x01\x03\0\x01\0\0\0" . # 0x46 PhotometricInterpretation - Set32u($cols == 1 ? 1 : 2) . - "\x11\x01\x04\0\x01\0\0\0\xcc\0\0\0" . # 0x52 StripOffsets = 0xcc - "\x15\x01\x03\0\x01\0\0\0" . Set32u($cols) .# 0x5e SamplesPerPixel - "\x16\x01\x04\0\x01\0\0\0" . Set32u($h) . # 0x6a RowsPerStrip - "\x17\x01\x04\0\x01\0\0\0" . # 0x76 StripByteCounts - Set32u($w * $h * $cols * int(($bits+7)/8)) . - "\x1a\x01\x05\0\x01\0\0\0\xbc\0\0\0" . # 0x82 XResolution - "\x1b\x01\x05\0\x01\0\0\0\xc4\0\0\0" . # 0x8e YResolution - "\x1c\x01\x03\0\x01\0\0\0\x01\0\0\0" . # 0x9a PlanarConfiguration = 1 - "\x28\x01\x03\0\x01\0\0\0\x02\0\0\0" . # 0xa6 ResolutionUnit = 2 - "\0\0\0\0" . # 0xb2 (no IFD1) - (Set16u($bits) x 3) . # 0xb6 BitsPerSample value - Set32u($res) . "\x01\0\0\0" . # 0xbc XResolution = 72 - Set32u($res) . "\x01\0\0\0"; # 0xc4 YResolution = 72 - SetByteOrder($saveOrder); # 0xcc (data goes here) - return $hdr; -} - -#------------------------------------------------------------------------------ # LensSpec value conversions # Inputs: 0) value # Returns: converted value @@ -9316,6 +9280,7 @@ sub ConvLensSpec($) return \$val unless length($val) == 8; my @a = unpack("H2H4H4H2H2H2",$val); $a[1] += 0; $a[2] += 0; # remove leading zeros from focal lengths + s/([a-f])/hex($1)/e foreach @a[3,4]; # convert hex digits (ie. "b0" = f11) $a[3] /= 10; $a[4] /= 10; # divide f-numbers by 10 return join ' ', @a; } @@ -9325,6 +9290,7 @@ sub ConvInvLensSpec($) my @a=split(" ", $val); return $val unless @a == 6; $a[3] *= 10; $a[4] *= 10; # f-numbers are multiplied by 10 + s/^(\d{2})0$/sprintf('%x0',$1)/e foreach @a[3,4]; $_ = hex foreach @a; # convert from hex return pack 'CnnCCC', @a; } diff --git a/lib/Image/ExifTool/TagNames.pod b/lib/Image/ExifTool/TagNames.pod index 8fabd9e1..c5d3309e 100644 --- a/lib/Image/ExifTool/TagNames.pod +++ b/lib/Image/ExifTool/TagNames.pod @@ -293,6 +293,11 @@ The EXIF meta information is organized into different Image File Directories ExifTool family 1 group names. When writing EXIF information, the default B<Group> listed below is used unless another group is specified. +Mandatory tags (indicated by a colon after the B<Writable> type) may be +added automatically with default values when creating a new IFD, and the IFD +is removed automatically when deleting tags if only default-valued mandatory +tags remain. + The table below lists all EXIF tags. Also listed are TIFF, DNG, HDP and other tags which are not part of the EXIF specification, but may co-exist with EXIF tags in some images. Tags which are part of the EXIF 2.31 @@ -16519,12 +16524,17 @@ specification. 2 ResolutionUnit int8u: 3 XResolution int16u: 5 YResolution int16u: + 7 ThumbnailWidth no + 8 ThumbnailHeight no + 9 ThumbnailTIFF no =head3 JFIF Extension Tags Tag ID Tag Name Writable ------ -------- -------- 0x0010 ThumbnailImage no + 0x0011 ThumbnailTIFF no + 0x0013 ThumbnailTIFF no =head2 FlashPix Tags diff --git a/lib/Image/ExifTool/Writer.pl b/lib/Image/ExifTool/Writer.pl index b79f4e4d..c04cc7ed 100644 --- a/lib/Image/ExifTool/Writer.pl +++ b/lib/Image/ExifTool/Writer.pl @@ -4279,6 +4279,58 @@ sub NewGUID() } #------------------------------------------------------------------------------ +# Make TIFF header for raw data +# Inputs: 0) width, 1) height, 2) num colour components, 3) bits, 4) resolution +# 5) color-map data for palette-color image (8 or 16 bit) +# Returns: TIFF header +# Notes: Multi-byte data must be little-endian +sub MakeTiffHeader($$$$;$$) +{ + my ($w, $h, $cols, $bits, $res, $cmap) = @_; + $res or $res = 72; + my $saveOrder = GetByteOrder(); + SetByteOrder('II'); + if (not $cmap) { + $cmap = ''; + } elsif (length $cmap == 3 * 2**$bits) { + # convert to short + $cmap = pack 'v*', map { $_ | ($_<<8) } unpack 'C*', $cmap; + } elsif (length $cmap != 6 * 2**$bits) { + $cmap = ''; + } + my $cmo = $cmap ? 12 : 0; # offset due to ColorMap IFD entry + my $hdr = + "\x49\x49\x2a\0\x08\0\0\0\x0e\0" . # 0x00 14 menu entries: + "\xfe\x00\x04\0\x01\0\0\0\x00\0\0\0" . # 0x0a SubfileType = 0 + "\x00\x01\x04\0\x01\0\0\0" . Set32u($w) . # 0x16 ImageWidth + "\x01\x01\x04\0\x01\0\0\0" . Set32u($h) . # 0x22 ImageHeight + "\x02\x01\x03\0" . Set32u($cols) . # 0x2e BitsPerSample + Set32u($cols == 1 ? $bits : 0xb6 + $cmo) . + "\x03\x01\x03\0\x01\0\0\0\x01\0\0\0" . # 0x3a Compression = 1 + "\x06\x01\x03\0\x01\0\0\0" . # 0x46 PhotometricInterpretation + Set32u($cmap ? 3 : $cols == 1 ? 1 : 2) . + "\x11\x01\x04\0\x01\0\0\0" . # 0x52 StripOffsets + Set32u(0xcc + $cmo + length($cmap)) . + "\x15\x01\x03\0\x01\0\0\0" . Set32u($cols) . # 0x5e SamplesPerPixel + "\x16\x01\x04\0\x01\0\0\0" . Set32u($h) . # 0x6a RowsPerStrip + "\x17\x01\x04\0\x01\0\0\0" . # 0x76 StripByteCounts + Set32u($w * $h * $cols * int(($bits+7)/8)) . + "\x1a\x01\x05\0\x01\0\0\0" . Set32u(0xbc + $cmo) . # 0x82 XResolution + "\x1b\x01\x05\0\x01\0\0\0" . Set32u(0xc4 + $cmo) . # 0x8e YResolution + "\x1c\x01\x03\0\x01\0\0\0\x01\0\0\0" . # 0x9a PlanarConfiguration = 1 + "\x28\x01\x03\0\x01\0\0\0\x02\0\0\0" . # 0xa6 ResolutionUnit = 2 + ($cmap ? # 0xb2 ColorMap [optional] + "\x40\x01\x03\0" . Set32u(3 * 2**$bits) . "\xd8\0\0\0" : '') . + "\0\0\0\0" . # 0xb2+$cmo (no IFD1) + (Set16u($bits) x 3) . # 0xb6+$cmo BitsPerSample value + Set32u($res) . "\x01\0\0\0" . # 0xbc+$cmo XResolution = 72 + Set32u($res) . "\x01\0\0\0" . # 0xc4+$cmo YResolution = 72 + $cmap; # 0xcc or 0xd8 (cmap and data go here) + SetByteOrder($saveOrder); + return $hdr; +} + +#------------------------------------------------------------------------------ # Return current time in EXIF format # Inputs: 0) flag to include timezone (0 to disable, undef or 1 to include) # Returns: time string |