Image:...erNotes(3pm)
β¨ NAME β¨
Image::MetaData::JPEG::MakerNotes β literally just random information and details on MakerNotes, bestie. That's the whole vibe. π
π¦ OVERVIEW π¦
Okay so this document is a lil collection of random info and deets about MakerNotes. It's an appendix to the main manual page of the Image::MetaData::JPEG module, and you should fr fr go read that one for the bigger picture and the general scope. The note on MakerNote parsing in the main manual page is the one you actually want β it's giving main character energy. π
πΈ Pieces of information available after parsing the MakerNote πΈ
So when the maker note gets parsed, the result gets stored in a directory inside the internal data structure for the APP1 Segment. The path is IFD@SubIFD@MakerNoteData_$format, where $format is the specific note format. And then the MakerNote entry in IFD0@SubIFD is removed. This translation happens always, no cap, because there's a catch-all unknown rule for a binary makernote with very broad acceptance rules. π
That maker note directory also has a special subdir with some fields reporting about the parsing process:
ORIGINALβ the raw content of the maker note (unparsed)SIGNATUREβ the first few bytes which allowed the format to be chosenENDIANNESSβ the byte order chosen during parsingFORMATβ the maker note format chosen during parsingERRORβ [optional] error details, in case of failure while parsing
β¨ Supported MakerNote formats β¨
Maker note formats live in a special internal hash, one key per format (and yes, that includes the unknown format). Every format entry maps to an anonymous hash with the parsing info for the MakerNote. The "normal" format is considered to be an IFD-like MakerNote with a next_link pointer, offsets counted from the global TIFF header, and no MakerNote internal TIFF header.
Here's what the keys mean:
signatureβ the MakerNote signature (a regular expression)makerβ the Maker signature (i.e., its name, no regex)tagsβ a reference to a hash for tag translations- (A)
mkntstartβ if set, offsets are counted from the maker note start - (B)
mkntTIFFβ if set, offsets are counted from the internal TIFF header - (C)
ignoreβ if set, the format is to be ignored - (D)
nonextβ if set, the maker note IFD does not have a next_link - (E)
endiannessβ if set, the byte order is fixed to this value - (F)
nonIFDβ if set, the maker note is not IFD-like
Currently, the "supported" formats are the ones below. The authoritative data is actually kept in Tables_makernotes.pl, so go there for tag definitions and translations, ok? And remember: both the signature and the maker fields are regular expressions matching at the beginning (the real signature corresponds to $1). π«Ά
- Agfa β maker
AGFA, signature(AGFA \000\001) - Canon β maker
Canon, signature() - Casio_1 β maker
CASIO, signature()[^Q] - Casio_2 β maker
CASIO, signature(QVC\000{3}) - Epson β maker
EPSON, signature(EPSON\000\001\000) - Foveon β maker
FOVEON, signature(FOVEON\000{2}\001\000) - Fujifilm β flag (A)
mkntstart, makerFUJIFILM, signature(FUJIFILM\014\000{3}) - HPackard β flag (C)
ignore, makerHewlett-Packard, signature(HP) - Kyocera β flags (A)
mkntstart, (D)nonext, makerKYOCERA, signature(KYOCERA {12}\000{3}) - Kodak β flags (E)
endianness, (F)nonIFD, makerKODAK, signature(KDK INFO[a-zA-Z0-9]* ) - Minolta_1 β maker
MINOLTA, signature().{10}MLT0 - Minolta_2 β maker
Minolta, signature().{10}MLT0 - Konica β flag (C)
ignore, makerMinolta|KONICA, signature((MLY|KC|(\+M){4})|\001\000{5}\004) - Nikon_1 β maker
NIKON, signature(Nikon\000\001\000) - Nikon_2 β maker
NIKON, signature()[^N] - Nikon_3 β flag (B)
mkntTIFF, makerNIKON, signature(Nikon\000\002[\020\000]\000{2}) - Olympus β maker
OLYMPUS, signature(OLYMP\000[\001\002]\000) - Panasonic_1 β flag (D)
nonext, makerPanasonic, signature(Panasonic\000{3}) - Panasonic_2 β flags (C)
ignore, (D)nonext, makerPanasonic, signature(MKED) - Pentax_1 β flag (A)
mkntstart, makerAsahi, signature()[^A] - Pentax_2 β flags (A)
mkntstart, (D)nonext, makerAsahi, signature(AOC\000..) - Ricoh_1 β flag (C)
ignore, makerRICOH, signature(Rv|Rev) - Ricoh_2 β flag (C)
ignore, makerRICOH, signature(\000) - Ricoh_3 β maker
RICOH, signature((Ricoh|RICOH)\000{3}) - Sanyo β maker
SANYO, signature(SANYO\000\001\000) - Sigma β maker
SIGMA, signature(SIGMA\000{3}\001\000) - Sony β flag (D)
nonext, makerSONY, signature(SONY (CAM|DSC) \000{3}) - Toshiba β flag (C)
ignore, makerTOSHIBA, signature() - unknown β flag (E)
endianness, maker., signature()
π References π
Okay so vendors basically never release MakerNote format details. And when I say "not usually released", that's an euphemism β no vendor ever, to the author's knowledge, released any detail on its format, exception made for Sigma/Foveon. π Everything used for this package was collected on the Internet (so the reliability is, lowkey, limited) or through personal tests. Some interesting sites, and this is not an exhaustive list at all:
- General:
home.arcor.de/ahuggel/exiv2/makernote.html - .....:
www.ozhiker.com/electronics/pjmt/jpeg_info/makernotes.html - Agfa:
www.ozhiker.com/electronics/pjmt/jpeg_info/agfa_mn.html - Canon:
www.burren.cx/david/canon.html - Casio:
park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html - ...:
www.dicasoft.de/casiomn.htm - Epson:
www.ozhiker.com/electronics/pjmt/jpeg_info/epson_mn.html - Foveon: Foveon is the same as Sigma, see Sigma
- Fujifilm:
park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html - ......:
www.ozhiker.com/electronics/pjmt/jpeg_info/fujifilm_mn.html - Kyocera:
www.ozhiker.com/electronics/pjmt/jpeg_info/kyocera_mn.html - Kodak: my personal tests with my Kodak DX3900 (not IFD-like)
- Minolta:
www.dalibor.cz/minolta/makernote.htm - .....:
www.ozhiker.com/electronics/pjmt/jpeg_info/minolta_mn.html - Nikon:
park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html - ...:
www.tawbaware.com/990exif.htm - ...:
www.ozhiker.com/electronics/pjmt/jpeg_info/nikon_mn.html - Olympus:
park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html - .....:
www.ozhiker.com/electronics/pjmt/jpeg_info/olympus_mn.html - Panasonic:
www.compton.nu/panasonic.html - Pentax:
www.ozhiker.com/electronics/pjmt/jpeg_info/pentax_mn.html - Ricoh:
www.ozhiker.com/electronics/pjmt/jpeg_info/ricoh_mn.html - Sanyo:
www.exif.org/makernotes/SanyoMakerNote.html - Sigma:
www.x3f.info/technotes/FileDocs/MakerNoteDoc.html - Sony:
www.ozhiker.com/electronics/pjmt/jpeg_info/sony_mn.html
π DX3900 MakerNote format π
Kodak MakerNotes are written in a proprietary binary format, and it is not IFD-like. So there's genuinely no way to detect the beginning, end and type of a field. Everything here was inferred through a careful comparison of the content of a set of Kodak JPEG files and their shot parameters. π
Fields seem to be aligned on four bytes boundaries. For the DX3900 model the endianness is always fixed to big endian. The signature regular expression is ^(KDK INFO[a-zA-Z0-9]* ), and the maker is KODAK. The meaning of the tags goes like this:
BYTE??? β firmware version? This is always 3BYTECompression β 1 = normal, 2 = 2160x1440 high compressionBYTEBurstMode β 0 = off, 1 = onBYTEMacroMode β 0 = normal, 1 = close-upSHORTPixelXDimension /SHORTPixelYDimension β allowed values: 2160x1440, 1800x1200, 1536x1024, 1080x720SHORTYear β the year value, with four digitsBYTEMonth β the month value (in [1,12])BYTEDay β the day value (in [1,31])BYTEHour β the hour value (in [0,23])BYTEMinute β the minute value (in [0,59])BYTESecond β the second value (in [0,59])BYTESubSecond β (in 130th of seconds?)SHORT??? β ???BYTE??? β ???BYTEShutterMode β 0 = auto, 32 = manualBYTEMeteringMode β 0 = multi-pattern, 1=centre weight., 2=centre spotBYTEBurstSequenceIndex β index in [1,8], 0 if burst mode offSHORTFNumber β 100 times the Exif F-numberLONGExposureTime β in 10^-5 secondsSSHORTExposureBiasValue β 1000 times the exposure bias in [-2,+2 step .5]SHORT??? β ???LONG??? β is this an estimate of the subject distance? If so, it is very rough.LONG??? β is this an estimate of the subject distance? If so, it is very rough.LONG??? β is this an estimate of the subject distance? If so, it is very rough.LONG??? β is this an estimate of the subject distance? If so, it is very rough.BYTEFocusMode β 0 = auto, 2 = close, 3 = infinityBYTE??? β always 2SHORT??? β ???SSHORTPanoramaMode β 0 = normal, -1 = focus at infinitySHORTSubjectDistance β (x-28)*2.54+7 looks like the distance in cmBYTEWhiteBalance β 0 = normal, 1 = fluor., 2 = tungsten, 3 = daylight- (27 bytes with unknown meaning here)
BYTEFlashMode β 0 = auto, 1 = on, 2 = off, 3 = red-eyesBYTEFlashFired β 0 = yes, 1 = noSHORTISOSpeedMode β the requested speed in {100,200,400} or zeroSHORT??? β ???SHORTTotalZoomFactor β 100 times the zoom factor in [+1,+6 step 0.1]SHORTDateTimeStampMode β 0 = none, [1,6] = the six modesSHORTColourMode β 1 = black & white, 2 = sepia, 32 = colourSHORTDigitalZoomFactor β 100 times the zoom factor in [+1,+3 step 0.1]BYTE??? β always zeroSBYTESharpness β 0 = standard, 1 = sharp, -1 = soft- (808 bytes with unknown meaning here, maybe a thumbnail?)
π AUTHOR π
Stefano Bettelli, bettelli@cpan.org β shoutout to the icon who wrote all this down. π
π COPYRIGHT AND LICENSE π
Copyright (C) 2004,2005,2006 by Stefano Bettelli
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License. See the COPYING and LICENSE file for the license terms.
π SEE ALSO π
The main documentation page for the Image::MetaData::JPEG module. Go read it, bestie, that's the whole point. π«Ά
And that's a wrap, no cap β this page is perl v5.34.0 coded, dated 2022-03-07, and it ate. π
β¨
π¦ where this page comes from
- debian bookworm: libimage-metadata-jpeg-perl 0.159-1 Β· GPL-2.0-only
- debian trixie: libimage-metadata-jpeg-perl 0.159-1 Β· GPL-2.0-only
- ubuntu noble: libimage-metadata-jpeg-perl 0.159-1 Β· GPL-2.0-only
- ubuntu resolute: libimage-metadata-jpeg-perl 0.159-1 Β· GPL-2.0-only
- ubuntu stonking: libimage-metadata-jpeg-perl 0.159-1 Β· GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms