{
    "mode": "perldoc",
    "parameter": "Image::ExifTool",
    "section": "",
    "url": "https://www.chedong.com/phpMan.php/perldoc/Image%3A%3AExifTool/json",
    "generated": "2026-06-10T04:36:59Z",
    "synopsis": "use Image::ExifTool qw(:Public);\n# ---- Simple procedural usage ----\n# Get hash of meta information tag names/values from an image\n$info = ImageInfo('a.jpg');\n# ---- Object-oriented usage ----\n# Create a new Image::ExifTool object\n$exifTool = new Image::ExifTool;\n# Extract meta information from an image\n$exifTool->ExtractInfo($file, \\%options);\n# Get list of tags in the order they were found in the file\n@tagList = $exifTool->GetFoundTags('File');\n# Get the value of a specified tag\n$value = $exifTool->GetValue($tag, $type);\n# Get a tag description\n$description = $exifTool->GetDescription($tag);\n# Get the group name associated with this tag\n$group = $exifTool->GetGroup($tag, $family);\n# Set a new value for a tag\n$exifTool->SetNewValue($tag, $newValue);\n# Write new meta information to a file\n$success = $exifTool->WriteInfo($srcfile, $dstfile);\n# ...plus a host of other useful methods...",
    "sections": {
        "NAME": {
            "content": "Image::ExifTool - Read and write meta information\n",
            "subsections": []
        },
        "SYNOPSIS": {
            "content": "use Image::ExifTool qw(:Public);\n\n# ---- Simple procedural usage ----\n\n# Get hash of meta information tag names/values from an image\n$info = ImageInfo('a.jpg');\n\n# ---- Object-oriented usage ----\n\n# Create a new Image::ExifTool object\n$exifTool = new Image::ExifTool;\n\n# Extract meta information from an image\n$exifTool->ExtractInfo($file, \\%options);\n\n# Get list of tags in the order they were found in the file\n@tagList = $exifTool->GetFoundTags('File');\n\n# Get the value of a specified tag\n$value = $exifTool->GetValue($tag, $type);\n\n# Get a tag description\n$description = $exifTool->GetDescription($tag);\n\n# Get the group name associated with this tag\n$group = $exifTool->GetGroup($tag, $family);\n\n# Set a new value for a tag\n$exifTool->SetNewValue($tag, $newValue);\n\n# Write new meta information to a file\n$success = $exifTool->WriteInfo($srcfile, $dstfile);\n\n# ...plus a host of other useful methods...\n",
            "subsections": []
        },
        "DESCRIPTION": {
            "content": "Reads and writes meta information in a wide variety of files, including the maker notes of many\ndigital cameras by various manufacturers such as Canon, Casio, DJI, FLIR, FujiFilm, GE, GoPro,\nHP, JVC/Victor, Kodak, Leaf, Minolta/Konica-Minolta, Nikon, Nintendo, Olympus/Epson,\nPanasonic/Leica, Pentax/Asahi, Phase One, Reconyx, Ricoh, Samsung, Sanyo, Sigma/Foveon and Sony.\n\nBelow is a list of file types and meta information formats currently supported by ExifTool (r =\nread, w = write, c = create):\n\nFile Types\n------------+-------------+-------------+-------------+------------\n360   r/w   | DR4   r/w/c | JNG   r/w   | O     r     | RAW   r/w\n3FR   r     | DSS   r     | JP2   r/w   | ODP   r     | RIFF  r\n3G2   r/w   | DV    r     | JPEG  r/w   | ODS   r     | RSRC  r\n3GP   r/w   | DVB   r/w   | JSON  r     | ODT   r     | RTF   r\nA     r     | DVR-MS r    | JXL   r     | OFR   r     | RW2   r/w\nAA    r     | DYLIB r     | K25   r     | OGG   r     | RWL   r/w\nAAE   r     | EIP   r     | KDC   r     | OGV   r     | RWZ   r\nAAX   r/w   | EPS   r/w   | KEY   r     | ONP   r     | RM    r\nACR   r     | EPUB  r     | LA    r     | OPUS  r     | SEQ   r\nAFM   r     | ERF   r/w   | LFP   r     | ORF   r/w   | SKETCH r\nAI    r/w   | EXE   r     | LIF   r     | ORI   r/w   | SO    r\nAIFF  r     | EXIF  r/w/c | LNK   r     | OTF   r     | SR2   r/w\nAPE   r     | EXR   r     | LRV   r/w   | PAC   r     | SRF   r\nARQ   r/w   | EXV   r/w/c | M2TS  r     | PAGES r     | SRW   r/w\nARW   r/w   | F4A/V r/w   | M4A/V r/w   | PBM   r/w   | SVG   r\nASF   r     | FFF   r/w   | MACOS r     | PCD   r     | SWF   r\nAVI   r     | FITS  r     | MAX   r     | PCX   r     | THM   r/w\nAVIF  r/w   | FLA   r     | MEF   r/w   | PDB   r     | TIFF  r/w\nAZW   r     | FLAC  r     | MIE   r/w/  | PDF   r/w   | TORRENT r\nBMP   r     | FLIF  r/w   | MIFF  r   c | PEF   r/w   | TTC   r\nBPG   r     | FLV   r     | MKA   r     | PFA   r     | TTF   r\nBTF   r     | FPF   r     | MKS   r     | PFB   r     | TXT   r\nCHM   r     | FPX   r     | MKV   r     | PFM   r     | VCF   r\nCOS   r     | GIF   r/w   | MNG   r/w   | PGF   r     | VRD   r/w/c\nCR2   r/w   | GPR   r/w   | MOBI  r     | PGM   r/w   | VSD   r\nCR3   r/w   | GZ    r     | MODD  r     | PLIST r     | WAV   r\nCRM   r/w   | HDP   r/w   | MOI   r     | PICT  r     | WDP   r/w\nCRW   r/w   | HDR   r     | MOS   r/w   | PMP   r     | WEBP  r\nCS1   r/w   | HEIC  r/w   | MOV   r/w   | PNG   r/w   | WEBM  r\nCSV   r     | HEIF  r/w   | MP3   r     | PPM   r/w   | WMA   r\nCZI   r     | HTML  r     | MP4   r/w   | PPT   r     | WMV   r\nDCM   r     | ICC   r/w/c | MPC   r     | PPTX  r     | WTV   r\nDCP   r/w   | ICS   r     | MPG   r     | PS    r/w   | WV    r\nDCR   r     | IDML  r     | MPO   r/w   | PSB   r/w   | X3F   r/w\nDFONT r     | IIQ   r/w   | MQV   r/w   | PSD   r/w   | XCF   r\nDIVX  r     | IND   r/w   | MRC   r     | PSP   r     | XLS   r\nDJVU  r     | INSP  r/w   | MRW   r/w   | QTIF  r/w   | XLSX  r\nDLL   r     | INSV  r     | MXF   r     | R3D   r     | XMP   r/w/c\nDNG   r/w   | INX   r     | NEF   r/w   | RA    r     | ZIP   r\nDOC   r     | ISO   r     | NKSC  r/w   | RAF   r/w   |\nDOCX  r     | ITC   r     | NRW   r/w   | RAM   r     |\nDPX   r     | J2C   r     | NUMBERS r   | RAR   r     |\n\nMeta Information\n----------------------+----------------------+---------------------\nEXIF           r/w/c  |  CIFF           r/w  |  Ricoh RMETA    r\nGPS            r/w/c  |  AFCP           r/w  |  Picture Info   r\nIPTC           r/w/c  |  Kodak Meta     r/w  |  Adobe APP14    r\nXMP            r/w/c  |  FotoStation    r/w  |  MPF            r\nMakerNotes     r/w/c  |  PhotoMechanic  r/w  |  Stim           r\nPhotoshop IRB  r/w/c  |  JPEG 2000      r    |  DPX            r\nICC Profile    r/w/c  |  DICOM          r    |  APE            r\nMIE            r/w/c  |  Flash          r    |  Vorbis         r\nJFIF           r/w/c  |  FlashPix       r    |  SPIFF          r\nDucky APP12    r/w/c  |  QuickTime      r    |  DjVu           r\nPDF            r/w/c  |  Matroska       r    |  M2TS           r\nPNG            r/w/c  |  MXF            r    |  PE/COFF        r\nCanon VRD      r/w/c  |  PrintIM        r    |  AVCHD          r\nNikon Capture  r/w/c  |  FLAC           r    |  ZIP            r\nGeoTIFF        r/w/c  |  ID3            r    |  (and more)\n",
            "subsections": []
        },
        "CONFIGURATION": {
            "content": "User-defined tags can be added via the ExifTool configuration file, or by defining the\n%Image::ExifTool::UserDefined hash before calling any ExifTool methods. See \"ExifToolconfig\" in\nthe ExifTool distribution for more details.\n\nBy default ExifTool looks for a configuration file named \".ExifToolconfig\" first in your home\ndirectory, then in the directory of the application script, but a different directory may be\nspecified by setting the EXIFTOOLHOME environment variable, or a different file may be\nspecified by setting the ExifTool \"configFile\" variable before using Image::ExifTool. For\nexample:\n\nBEGIN { $Image::ExifTool::configFile = '/Users/phil/myconfig.cfg' }\nuse Image::ExifTool;\n\nThe configuration feature may also be disabled by setting \"configFile\" to an empty string:\n\nBEGIN { $Image::ExifTool::configFile = '' }\nuse Image::ExifTool;\n",
            "subsections": []
        },
        "EXPORTS": {
            "content": "Exports nothing by default, but \"ImageInfo\" and all static methods may be exported with the\n\":Public\" export list.\n",
            "subsections": []
        },
        "METHODS": {
            "content": "All ExifTool features are accessed through the methods of the public interface listed below.\nOther Image::ExifTool methods and modules should not be accessed directly because their\ninterface may change with future versions.\n\nNone of these methods should ever die or issue warnings to STDERR if called with the proper\narguments (with the exception of \"SetNewValue\" which may send an error message to STDERR, but\nonly when called in scalar context). Error and warning messages that occur during processing are\nstored in the values of the Error and Warning tags, and are accessible via the \"GetValue\" method\nto retrieve a single Error or Warning message, or \"GetInfo\" to retrieve any number of them.\n\nThe ExifTool methods are not thread safe.\n\nnew\nCreates a new ExifTool object.\n\n$exifTool = new Image::ExifTool;\n\nOne ExifTool object may be used to process many files, so creating multiple ExifTool objects\nusually is not necessary.\n\nNote that ExifTool uses AUTOLOAD to load non-member methods, so any class using Image::ExifTool\nas a base class must define an AUTOLOAD which calls Image::ExifTool::DoAutoLoad(). eg)\n\nsub AUTOLOAD\n{\nImage::ExifTool::DoAutoLoad($AUTOLOAD, @);\n}\n",
            "subsections": [
                {
                    "name": "ImageInfo",
                    "content": "Read image file and return meta information. This is the one step function for retrieving meta\ninformation from an image. Internally, \"ImageInfo\" calls \"ExtractInfo\" to extract the\ninformation, \"GetInfo\" to generate the information hash, and \"GetTagList\" for the returned tag\nlist.\n\n# return meta information for 2 tags only (procedural)\n$info = ImageInfo($filename, $tag1, $tag2);\n\n# return information about an open image file (object-oriented)\n$info = $exifTool->ImageInfo(\\*FILE);\n\n# return information from image data in memory for specified tags\n%options = (PrintConv => 0);\n@tagList = qw(filename imagesize xmp:creator exif:* -ifd1:*);\n$info = ImageInfo(\\$imageData, \\@tagList, \\%options);\n\n# extract information from an embedded thumbnail image\n$info = ImageInfo('image.jpg', 'thumbnailimage');\n$thumbInfo = ImageInfo($$info{ThumbnailImage});\n\nInputs:\n\"ImageInfo\" is very flexible about the input arguments, and interprets them based on their\ntype. It may be called with one or more arguments. The one required argument is either a\nSCALAR (the image file name), a file reference (a reference to the image file) or a SCALAR\nreference (a reference to the image in memory). Other arguments are optional. The order of\nthe arguments is not significant, except that the first SCALAR is taken to be the file name\nunless a file reference or scalar reference comes earlier in the argument list.\n\nBelow is an explanation of how the \"ImageInfo\" function arguments are interpreted:\n\nExifTool ref\n\"ImageInfo\" may be called with an ExifTool object if desired. Advantages of using the\nobject-oriented form are that options may be set before calling \"ImageInfo\", and the\nobject may be used afterward to access member functions. Must be the first argument if\nused.\n\nSCALAR\nThe first scalar argument is taken to be the file name unless an earlier argument\nspecified the image data via a file reference (file ref) or data reference (SCALAR ref).\nThe remaining scalar arguments are names of tags for requested information. All tags are\nreturned if no tags are specified.\n\nTag names are case-insensitive and may be prefixed by optional group names separated by\ncolons. A group name may begin with a family number (eg. '1IPTC:Keywords'), to restrict\nmatches to a specific family. In the tag name, a '?' matches any single character and a\n'*' matches zero or more characters. Thus 'GROUP:*' represents all tags in a specific\ngroup. Wildcards may not be used in group names, with the exception that a group name of\n'*' may be used to extract all available instances of a tag regardless of the\n\"Duplicates\" setting (eg. '*:WhiteBalance'). Multiple groups may be specified (eg.\n'EXIF:Time:*' extracts all EXIF Time tags). And finally, a leading '-' indicates a tag\nto be excluded (eg. '-IFD1:*'), or a trailing '#' causes the ValueConv value to be\nreturned for this tag.\n\nNote that keys in the returned information hash and elements of the returned tag list\nare not necessarily the same as these tag names because group names are removed, the\ncase may be changed, and an instance number may be added. For this reason it is best to\nuse either the keys of the returned hash or the elements of the returned tag list when\naccessing the tag values.\n\nSee Image::ExifTool::TagNames for a complete list of ExifTool tag names.\n\nFile ref\nA reference to an open image file. If you use this method (or a SCALAR reference) to\naccess information in an image, the FileName and Directory tags will not be returned.\n(Also, a number of the File System tags will not be returned unless it is a plain file.)\nImage processing begins at the current file position, and on return the file position is\nunspecified. May be either a standard filehandle, or a reference to a File::RandomAccess\nobject. Note that the file remains open and must be closed by the caller after\n\"ImageInfo\" returns.\n\n[Advanced: To allow a non-rewindable stream (eg. a network socket) to be re-read after\nprocessing with ExifTool, first wrap the file reference in a File::RandomAccess object,\nthen pass this object to \"ImageInfo\". The File::RandomAccess object will buffer the file\nif necessary, and may be used to re-read the file after \"ImageInfo\" returns.]\n\nSCALAR ref\nA reference to image data in memory.\n\nARRAY ref\nReference to a list of tag names. On entry, any elements in the list are added to the\nlist of requested tags. Tags with names beginning with '-' are excluded. On return, this\nlist is updated to contain an ordered list of tag keys for the returned information.\n\nThere will be 1:1 correspondence between the requested tags and the returned tag keys\nonly if the \"Duplicates\" option is 0 and \"Sort\" is 'Input'. (With \"Duplicates\" enabled,\nthere may be more entries in the returned list of tag keys, and with other \"Sort\"\nsettings the entries may not be in the same order as requested.) If a requested tag\ndoesn't exist, a tag key is still generated, but the tag value is undefined.\n\nHASH ref\nReference to a hash containing the options settings valid for this call only. See\n\"Options\" documentation below for a list of available options. Options specified as\narguments to \"ImageInfo\" take precedence over \"Options\" settings.\n\nReturn Values:\n\"ImageInfo\" returns a reference to a hash of tag-key/value pairs. The tag keys are\nidentifiers -- essentially case-sensitive tag names with an appended instance number if\nmultiple tags with the same name were extracted from the image. Many of the ExifTool\nfunctions require a tag key as an argument. Use \"GetTagName [static]\" to get the tag name\nfor a given tag key. Note that the case of the tag names may not be the same as requested.\nHere is a simple example to print out the information returned by \"ImageInfo\":\n\nforeach (sort keys %$info) {\nprint \"$ => $$info{$}\\n\";\n}\n\nValues of the returned hash are usually simple scalars, but a scalar reference is used to\nindicate binary data and an array reference may be used to indicate a list. Also, a hash\nreference may be returned if the \"Struct\" option is used. Lists of values are joined by\ncommas into a single string only if the PrintConv option is enabled and the ListJoin option\nis enabled (which are the defaults). Note that binary values are not necessarily extracted\nunless specifically requested, or the Binary option is enabled and the tag is not\nspecifically excluded. If not extracted the value is a reference to a string of the form\n\"Binary data ##### bytes\".\n\nThe code below gives an example of how to handle these return values, as well as\nillustrating the use of other ExifTool functions:\n\nuse Image::ExifTool;\nmy $exifTool = new Image::ExifTool;\n$exifTool->Options(Unknown => 1);\nmy $info = $exifTool->ImageInfo('a.jpg');\nmy $group = '';\nmy $tag;\nforeach $tag ($exifTool->GetFoundTags('Group0')) {\nif ($group ne $exifTool->GetGroup($tag)) {\n$group = $exifTool->GetGroup($tag);\nprint \"---- $group ----\\n\";\n}\nmy $val = $info->{$tag};\nif (ref $val eq 'SCALAR') {\nif ($$val =~ /^Binary data/) {\n$val = \"($$val)\";\n} else {\nmy $len = length($$val);\n$val = \"(Binary data $len bytes)\";\n}\n}\nprintf(\"%-32s : %s\\n\", $exifTool->GetDescription($tag), $val);\n}\n\nNotes:\nExifTool returns all values as byte strings of encoded characters. Perl wide characters are\nnot used. See \"CHARACTER ENCODINGS\" for details about the encodings. By default, most\nreturned values are encoded in UTF-8. For these, Encode::decodeutf8() may be used to\nconvert to a sequence of logical Perl characters.\n\nAs well as tags representing information extracted from the image, the following Extra tags\ngenerated by ExifTool may be returned:\n\nExifToolVersion - The ExifTool version number.\n\nError - An error message if the image could not be processed.\n\nWarning - A warning message if problems were encountered while\nprocessing the image.\n"
                },
                {
                    "name": "Options",
                    "content": "Get/set ExifTool options. This function can be called to set the default options for an ExifTool\nobject. Options set this way are in effect for all function calls but may be overridden by\noptions passed as arguments to some functions. Option names are not case sensitive.\n\nThe default option values may be changed by defining a %Image::ExifTool::UserDefined::Options\nhash. See the ExifToolconfig file in the full ExifTool distribution for examples. A default of\nundef has the same behaviour as a value of 0 for numerical options.\n\n# exclude the 'OwnerName' tag from returned information\n$exifTool->Options(Exclude => 'OwnerName');\n\n# only get information in EXIF or MakerNotes groups\n$exifTool->Options(Group0 => ['EXIF', 'MakerNotes']);\n\n# ignore information from IFD1\n$exifTool->Options(Group1 => '-IFD1');\n\n# sort by groups in family 2, and extract unknown tags\n$exifTool->Options(Sort => 'Group2', Unknown => 1);\n\n# reset DateFormat option\n$exifTool->Options(DateFormat => undef);\n\n# do not extract duplicate tag names\n$oldSetting = $exifTool->Options(Duplicates => 0);\n\n# get current Verbose setting\n$isVerbose = $exifTool->Options('Verbose');\n\n# set a user parameter\n$exifTool->Options(UserParam => 'MyParam=some value');\n\nInputs:\n0) ExifTool object reference\n\n1) Option parameter name (case-insensitive)\n\n2) [optional] Option parameter value (may be undef to clear option)\n\n3-N) [optional] Additional parameter/value pairs\n\nOption Parameters:\nNote that these API options may also be used in the exiftool application via the\ncommand-line -api option.\n\nBinary\nFlag to extract the value data for all binary tags. Tag values representing large binary\ndata blocks (eg. ThumbnailImage) are not necessarily extracted unless this option is set\nor the tag is specifically requested by name. Default is undef.\n\nBlockExtract\nFlag to extract some directories (mentioned in the ExifTool tag name documentation) as a\nblock. Setting this to a value of 2 also prevents parsing the block to extract tags\ncontained within.\n\nByteOrder\nThe byte order for newly created EXIF segments when writing. Note that if EXIF\ninformation already exists, the existing order is maintained. Valid values are 'MM',\n'II' and undef. If ByteOrder is not defined (the default), then the maker note byte\norder is used (if they are being copied), otherwise big-endian ('MM') order is assumed.\nThis can also be set via the ExifByteOrder tag, but the ByteOrder option takes\nprecedence if both are set.\n\nCharset\nCharacter set for encoding character tag values passed to/from ExifTool with code points\nabove U+007F. Default is 'UTF8'. Valid values are listed below, case is not significant:\n\nValue        Alias(es)        Description\n-----------  ---------------  ----------------------------------\nUTF8         cp65001, UTF-8   UTF-8 characters\nLatin        cp1252, Latin1   Windows Latin1 (West European)\nLatin2       cp1250           Windows Latin2 (Central European)\nCyrillic     cp1251, Russian  Windows Cyrillic\nGreek        cp1253           Windows Greek\nTurkish      cp1254           Windows Turkish\nHebrew       cp1255           Windows Hebrew\nArabic       cp1256           Windows Arabic\nBaltic       cp1257           Windows Baltic\nVietnam      cp1258           Windows Vietnamese\nThai         cp874            Windows Thai\nDOSLatinUS   cp437            DOS Latin US\nDOSLatin1    cp850            DOS Latin1\nDOSCyrillic  cp866            DOS Cyrillic\nMacRoman     cp10000, Roman   Macintosh Roman\nMacLatin2    cp10029          Macintosh Latin2 (Central Europe)\nMacCyrillic  cp10007          Macintosh Cyrillic\nMacGreek     cp10006          Macintosh Greek\nMacTurkish   cp10081          Macintosh Turkish\nMacRomanian  cp10010          Macintosh Romanian\nMacIceland   cp10079          Macintosh Icelandic\nMacCroatian  cp10082          Macintosh Croatian\n\nNote that this option affects some types of information when reading/writing the file\nand other types when getting/setting tag values, so it must be defined for both types of\naccess. See the \"CHARACTER ENCODINGS\" section for more information about the handling of\nspecial characters.\n\nCharsetEXIF\nInternal encoding to use for stored EXIF \"ASCII\" string values. May also be set to undef\nto pass through EXIF \"ASCII\" values without recoding. Set to \"UTF8\" to conform with the\nMWG recommendation. Default is undef.\n\nCharsetFileName\nExternal character set used for file names passed to ExifTool functions. When set in\nWindows, this triggers use of Windows wide-character i/o library routines (requires\nWin32API::File). Default is undef. May also be set to an empty string to avoid \"encoding\nnot specified\" warnings on Windows.\n\nCharsetID3\nInternal encoding to assume for ID3v1 strings. By the specification ID3v1 strings should\nbe encoded in ISO 8859-1 (essentially Latin), but some applications may use local\nencoding instead. Default is 'Latin'.\n\nCharsetIPTC\nFallback internal IPTC character set to assume if IPTC information contains no\nCodedCharacterSet tag. Possible values are the same as the \"Charset\" option. Default is\n'Latin'.\n\nNote that this option affects some types of information when reading/writing the file\nand other types when getting/setting tag values, so it must be defined for both types of\naccess.\n\nCharsetPhotoshop\nInternal encoding to assume for Photoshop IRB resource names. Default is 'Latin'.\n\nCharsetQuickTime\nInternal encoding to assume for QuickTime strings stored with an unspecified encoding.\nDefault is 'MacRoman'.\n\nCharsetRIFF\nInternal encoding to assume for strings in RIFF metadata (eg. AVI and WAV files). The\ndefault value of 0 assumes \"Latin\" encoding unless otherwise specified by the RIFF CSET\nchunk. Set to undef to pass through strings without recoding. Default is 0.\n\nCompact\nComma-delimited list of settings for writing compact XMP. Below is a list of available\nsettings. Note that 'NoPadding' effects only embedded XMP since padding is never written\nfor stand-alone XMP files. Also note that 'OneDesc' is not recommended when writing XMP\nlarger than 64 kB to a JPG file because it interferes with ExifTool's technique of\nsplitting off large rdf:Description elements into the extended XMP. Case is not\nsignificant for any of these options. Aliases are given in brackets. Default is undef.\n\nNoPadding - Avoid 2 kB of recommended padding at end of XMP (NoPad)\nNoIndent  - No spaces to indent lines (NoSpace, NoSpaces)\nNoNewline - Avoid unnecessary newlines (NoNewlines)\nShorthand - Use XMP Shorthand format\nOneDesc   - Combine properties into a single rdf:Description (OneDescr)\nAllSpace  - Equivalent to 'NoPadding,NoIndent,NoNewline'\nAllFormat - Equivalent to 'Shorthand,OneDesc'\nAll       - Equivalent to 'AllSpace,AllFormat'\n\nComposite\nFlag to generate Composite tags when extracting information. Default is 1.\n\nCompress\nFlag to write new values in compressed format if possible. Has no effect unless\nCompress::Zlib is installed. Default is undef.\n\nCoordFormat\nFormat for printing GPS coordinates. This is a printf format string with specifiers for\ndegrees, minutes and seconds in that order, however minutes and seconds may be omitted.\nIf the hemisphere is known, a reference direction (N, S, E or W) is appended to each\nprinted coordinate, but adding a \"+\" to the first format specifier (eg. \"%+.6f\") prints\na signed coordinate instead. For example, the following table gives the output for the\nsame coordinate using various formats:\n\nCoordFormat        Example Output\n-------------------  ------------------\nq{%d deg %d' %.2f\"}  54 deg 59' 22.80\"  (default for reading)\nq{%d %d %.8f}        54 59 22.80000000  (default for copying)\nq{%d deg %.4f min}   54 deg 59.3800 min\nq{%.6f degrees}      54.989667 degrees\n\nNote: To avoid loss of precision, the default coordinate format is different when\ncopying tags with \"SetNewValuesFromFile\".\n\nDateFormat\nFormat for printing date/time values. See \"strftime\" in the POSIX package and\n<https://exiftool.org/filename.html#codes> for details about the format string. If the\ndate can not be converted, the value is left unchanged unless the StrictDate option is\nset. Timezones are ignored. The inverse conversion (ie. when calling \"SetNewValue\") is\nperformed only if POSIX::strptime or Time::Piece is installed. The default setting of\nundef causes date/time values to remain in standard EXIF format (similar to a DateFormat\nof \"%Y:%m:%d %H:%M:%S\").\n\nDuplicates\nFlag to return values from tags with duplicate names when extracting information.\nDefault is 1.\n\nEscape\nEscape special characters in extracted values for HTML or XML. Also unescapes HTML or\nXML character entities in input values passed to \"SetNewValue\". Valid settings are\n'HTML', 'XML' or undef. Default is undef.\n\nExclude\nExclude specified tags from tags extracted from an image. The option value is either a\ntag name or reference to a list of tag names to exclude. The case of tag names is not\nsignificant. This option is ignored for specifically requested tags. Tags may also be\nexcluded by preceding their name with a '-' in the arguments to \"ImageInfo\".\n\nExtendedXMP\nThis setting affects the reading and editing of extended XMP in JPEG images. According\nto the XMP specification, extended XMP is only valid if it has the GUID specified by the\nHasExtendedXMP tag, so by default ExifTool will ignore other extended XMP, but this\noption allows full control over the extended XMP to be extracted.\n\n0   - Ignore all extended XMP\n1   - Read extended XMP with valid GUID only (default)\n2   - Read extended XMP with any GUID\n<guid> - Read extended XMP with a specific GUID\n\nExtractEmbedded\nFlag to extract information from embedded documents in EPS files, embedded EPS\ninformation and JPEG and Jpeg2000 images in PDF files, embedded MPF images in JPEG and\nMPO files, timed metadata in videos, and the resource fork of Mac OS files. A setting of\n2 also causes the H264 video stream in MP4 files to be parsed until the first SEI\nmessage is decoded, or 3 to parse the entire H264 stream in MP4 videos and the entire\nM2TS file to look for any unlisted program containing GPS metadata. Default is undef.\n\nFastScan\nFlag to increase speed when reading files by avoiding extraction of some types of\nmetadata. With this option set to 1, ExifTool will not scan to the end of a JPEG image\nto check for an AFCP, CanonVRD, FotoStation, PhotoMechanic, MIE or PreviewImage trailer.\nThis also stops the parsing after the first comment in GIF images, and at the\naudio/video data of RIFF-format files (AVI, WAV, etc), so any trailing metadata (eg. XMP\nwritten by some utilities) may be missed. Also disables input buffering for some types\nof files to reduce memory usage when reading from a non-seekable stream, and bypasses\nCRC validation for speed when writing PNG files. When combined with the ScanForXMP\noption, prevents scanning for XMP in recognized file types. With a value of 2, ExifTool\nwill also avoid extracting any EXIF MakerNote information, and will stop parsing at the\nIDAT chunk of PNG images. (By the PNG specification, metadata is allowed after IDAT, but\nExifTool always writes it before because some utilities will ignore it otherwise.) When\nset to 3 or higher, only pseudo system tags and FileType are generated. For 3, the file\nheader is read to provide an educated guess at FileType. For 4, the file is not read at\nall and FileType is determined based on the file's extension. For 5, generation of\nComposite tags is also disabled (like setting \"Composite\" to 0). Default is undef.\n\nFilter\nPerl expression used to filter values for all tags. The expression acts on the value of\nthe Perl default variable ($), and changes the value of this variable as required. The\ncurrent ExifTool object may be accessed through $self. The value is not changed if $ is\nset to undef. List items are filtered individually. Applies to all returned values\nunless PrintConv option is disabled.\n\nFilterW\nPerl expression used to filter PrintConv values when writing. The expression acts on the\nvalue of the Perl default variable ($), and changes the value of this variable as\nrequired. The current ExifTool object may be accessed through $self. The tag is not\nwritten if $ is set to undef.\n\nFixBase\nFix maker notes base offset. A common problem with image editing software is that\noffsets in the maker notes are not adjusted properly when the file is modified. This may\ncause the wrong values to be extracted for some maker note entries when reading the\nedited file. FixBase specifies an integer value to be added to the maker notes base\noffset. It may also be set to the empty string ('') for ExifTool will take its best\nguess at the correct base, or undef (the default) for no base adjustment.\n\nGeoMaxIntSecs\nMaximum interpolation time in seconds for geotagging. Geotagging is treated as an\nextrapolation if the Geotime value lies between two fixes in the same track which are\nseparated by a number of seconds greater than this. Otherwise, the coordinates are\ncalculated as a linear interpolation between the nearest fixes on either side of the\nGeotime value. Set to 0 to disable interpolation and use the coordinates of the nearest\nfix instead (provided it is within GeoMaxExtSecs, otherwise geotagging fails). Default\nis 1800.\n\nGeoMaxExtSecs\nMaximum extrapolation time in seconds for geotagging. Geotagging fails if the Geotime\nvalue lies outside a GPS track by a number of seconds greater than this. Otherwise, for\nan extrapolation the coordinates of the nearest fix are taken (ie. it is assumed that\nyou weren't moving during this period). Default is 1800.\n\nGeoMaxHDOP\nMaximum Horizontal (2D) Dilution Of Precision for geotagging. GPS fixes are ignored if\nthe HDOP is greater than this. Default is undef.\n\nGeoMaxPDOP\nMaximum Position (3D) Dilution Of Precision for geotagging. GPS fixes are ignored if the\nPDOP is greater than this. Default is undef.\n\nGeoMinSats\nMinimum number of satellites for geotagging. GPS fixes are ignored if the number of\nacquired satellites is less than this. Default is undef.\n\nGeoSpeedRef\nReference units for writing GPSSpeed when geotagging:\n\n'K', 'k' or 'km/h'  - km/h\n'M', 'm' or 'mph'   - mph\n<anything else>     - knots (default undef)\n\nGlobalTimeShift\nTime shift to apply to all extracted date/time PrintConv values. Does not affect\nValueConv values. Value is a date/time shift string (see Image::ExifTool::Shift(3pm)),\nwith a leading '-' for negative shifts. Default is undef.\n\nGroup#\nExtract tags only for specified groups in family # (Group0 assumed if # not given). The\noption value may be a single group name or a reference to a list of groups. Case is\nsignificant in group names. Specify a group to be excluded by preceding group name with\na '-'. See \"GetGroup\" for a description of group families, and \"GetAllGroups [static]\"\nfor lists of group names.\n\nHexTagIDs\nReturn hexadecimal instead of decimal for the family 7 group names of tags with\nnumerical ID's.\n\nHtmlDump\nDump information in hex to dynamic HTML web page. The value may be 0-3 for increasingly\nlarger limits on the maximum block size. Default is 0. Output goes to the file specified\nby the TextOut option (\\*STDOUT by default).\n\nHtmlDumpBase\nBase for HTML dump offsets. If not defined, the EXIF/TIFF base offset is used. Set to 0\nfor absolute offsets. Default is undef.\n\nIgnoreMinorErrors\nFlag to ignore minor errors. Causes minor errors to be downgraded to warnings, and minor\nwarnings to be ignored. This option is provided mainly to allow writing of files when\nminor errors occur, but by ignoring some minor warnings the behaviour of ExifTool may be\nchanged to allow some questionable operations to proceed (such as extracting thumbnail\nand preview images even if they don't have a recognizable header). Minor errors and\nwarnings are denoted by \"[minor]\" at the start of the message, or \"[Minor]\" (with a\ncapital \"M\") for warnings that affect processing when ignored.\n\nLang\nLocalized language for exiftool tag descriptions, etc. Available languages are given by\nthe Image::ExifTool::Lang module names (eg. 'fr', 'zhcn'). If the specified language\nisn't available, the option is not changed. May be set to undef to select the built-in\ndefault language. Default is 'en'.\n\nLargeFileSupport\nFlag to indicate that 64-bit file offsets are supported on this system. Default is\nundef.\n\nListItem\nReturn only a specific item from list-type values. A value of 0 returns the first item\nin the list, 1 return the second item, etc. Negative indices may also be used, with -1\nrepresenting the last item in the list. Applies only to the top-level list of nested\nlists. Default is undef to return all items in the list.\n\nListJoin\nSeparator used to join the PrintConv value of multi-item List-type tags into a single\nstring. If not defined, multi-item lists are returned as a list reference. Does not\naffect ValueConv values. Default is ', '.\n\nListSplit\nRegular expression used to split values of list-type tags into individual items when\nwriting. (eg. use ',\\\\s*' to split a comma-separated list.) Split when writing either\nPrintConv or ValueConv values. Default is undef.\n\nMakerNotes\nOption to extract MakerNotes and other writable subdirectories (such as PrintIM) as a\ndata block. Normally when the MakerNotes are extracted they are rebuilt to include data\noutside the boundaries of the original maker note data block, but a value of 2 disables\nthis feature. Possible values are:\n\n0 - Do not extract writable subdirectories (same as default of undef)\n1 - Extract and rebuild maker notes into self-contained block\n2 - Extract without rebuilding maker notes\n\nMDItemTags\nFlag to extract the OS X metadata item tags (see the \"mdls\" man page and \"MacOS MDItem\nTags\" in Image::ExifTool::TagNames for more information).\n\nMissingTagValue\nValue for missing tags in tag name expressions (or tags where the advanced formatting\nexpression returns undef). If not set, a minor error is issued for missing values, or\nthe value is set to '' if \"IgnoreMinorErrors\" is set. Default is undef.\n\nNoMultiExif\nRaise error when attempting to write multi-segment EXIF in a JPEG image. Default is\nundef.\n\nNoPDFList\nFlag to avoid splitting PDF list-type tag values into separate items. Default is undef.\n\nPassword\nPassword for reading/writing password-protected PDF documents. Ignored if a password is\nnot required. Character encoding of the password is determined by the value of the\nCharset option at processing time. Default is undef.\n\nPrintConv\nFlag to enable automatic print conversion. Also enables inverse print conversion for\nwriting. Default is 1.\n\nQuickTimeHandler\nFlag set to add an 'mdir' Handler to a newly created Meta box when adding QuickTime\nItemList tags. Adobe Bridge does not add this Handler, but it is commonly found in\nsamples from other software, and it has been reported that Apple QuickTime Player and\nPhotos.apps will ignore ItemList tags if this is missing. Default is 1.\n\nQuickTimePad\nFlag to preserve the padding of some QuickTime atoms when writing. QuickTime-based Canon\nCR3 files pad the values of container atoms with null bytes. This padding is removed by\ndefault when the file is rewritten, but setting this option to 1 adds padding to\npreserve the original atom size if the new atom would be smaller than the original.\nDefault is undef.\n\nQuickTimeUTC\nFlag set to assume that QuickTime date/time values are stored as UTC, causing conversion\nto local time when they are extracted and from local time when written. According to the\nQuickTime specification date/time values should be UTC, but many digital cameras store\nlocal time instead (presumably because they don't know the time zone), so the default is\nto not convert these times (except for Canon CR3 files, which always use UTC times).\nThis option also disables the autodetection of incorrect time-zero offsets in QuickTime\ndate/time values, and enforces a time zero of 1904 as per the QuickTime specification.\n\nRequestAll\nFlag to request all tags to be extracted. This causes some tags to be generated which\nnormally would not be unless specifically requested (by passing the tag name to\n\"ImageInfo\" or \"ExtractInfo\"). May be set to 2 or 3 to enable generation of some\nadditional tags as mentioned in the tag name documentation. Default is undef.\n\nRequestTags\nList of additional tag and/or group names to request in the next call to \"ExtractInfo\".\nThis option is useful only for tags/groups which aren't extracted unless specifically\nrequested. Value may be a list reference, a delimited string of names (any delimiter is\nallowed), or undef to clear the current RequestTags list. Groups are requested by adding\na colon after the name (eg. \"MacOS:\"). Names are converted to lower case as they are\nadded to the list. Default is undef.\n\nSaveFormat\nFlag to save EXIF/TIFF format type as the family 6 group name when extracting\ninformation. Without this option set, the family 6 group names are not generated.\nDefault is undef. See the \"GetGroup\" option for more details.\n\nSavePath\nFlag to save the metadata path as the family 5 group name when extracting information.\nWithout this option set, the family 5 group names are not generated. Default is undef.\nSee the \"GetGroup\" option for more details.\n\nScanForXMP\nFlag to scan all files (even unrecognized formats) for XMP information unless XMP was\nalready found in the file. When combined with the FastScan option, only unrecognized\nfile types are scanned for XMP. Default is undef.\n\nSort\nSpecifies order to sort tags in returned list:\n\nInput  - Sort in same order as input tag arguments (default)\nFile   - Sort in order that tags were found in the file\nTag    - Sort alphabetically by tag name\nDescr  - Sort by tag description (for current Lang setting)\nGroup# - Sort by tag group, where # is zero or more family\nnumbers separated by colons. If # is not specified,\nGroup0 is assumed.  See GetGroup for a description\nof group families.\n\nSort2\nSecondary sort order used for tags within each group when Sort is 'Group':\n\nFile   - Sort in order tags were found in the file (default)\nTag    - Sort alphabetically by tag name\nDescr  - Sort by tag description (for current Lang setting)\n\nStrictDate\nFlag to return undefined value for any date which can't be converted when the DateFormat\noption is used. Default is undef.\n\nundef - Same as 0 for reading/writing, or 1 for copying\n0   - Return date/time value unchanged if it can't be converted\n1   - Return undef if date/time value can't be converted\n\nWhen set to 1 while writing a PrintConv date/time value with the DateFormat option set,\nthe value is written only if POSIX::strptime or Time::Piece is available and can\nsuccessfully convert the value.\n\nFor PNG CreationTime, a setting of 1 has the additional effect of causing the date/time\nto be reformatted according to PNG 1.2 recommendation (RFC-1123) when writing, and a\nwarning to be issued for any non-standard value when reading (but note that Windows may\nnot recognize PNG date/time values in standard format).\n\nStruct\nFlag to return XMP structures as hash references instead of flattening into individual\ntags. Has no effect when writing since both flattened and structured tags may always be\nwritten. Possible values are:\n\nundef - (default) Same as 0 for reading, 2 for copying\n0   - Read/copy flattened tags\n1   - Read/copy structured tags\n2   - Read/copy both flattened and structured tags, but flag\nflattened tags as 'unsafe' for copying\n\nSystemTags\nFlag to extract the following additional File System tags: FileAttributes,\nFileDeviceNumber, FileInodeNumber, FileHardLinks, FileUserID, FileGroupID, FileDeviceID,\nFileBlockSize and FileBlockCount.\n\nTextOut\nOutput file reference for Verbose and HtmlDump options. Default is \\*STDOUT.\n\nTimeZone\nTime zone for local date/time values. May be set to any valid TZ string. Uses the system\ntime zone if not specified. Default is undef. (Requires POSIX::tzset, which may not be\navailable in Windows. A work-around in Windows is to \"set TZ=<zone>\" before running\nExifTool.)\n\nUnknown\nFlag to get the values of unknown tags. If set to 1, unknown tags are extracted from\nEXIF (or other tagged-format) directories. If set to 2, unknown tags are also extracted\nfrom binary data blocks. Default is 0.\n\nUserParam\nSpecial option to set/get user-defined parameters. Useful to allow external input into\ntag name expressions and ValueConv logic. Valid UserParam values are:\n\nPARAM         - Get parameter\nPARAM=        - Clear parameter\nPARAM^=       - Set parameter to empty string\nPARAM=VALUE   - Set parameter\n<hash ref>    - Set entire UserParam hash lookup\nundef         - Clear all user parameters\n\nWhere *PARAM* is the user-defined parameter name (case insensitive).\n\nUser-defined parameters may be accessed in tag name expressions by prefixing the\nparameter name with a dollar sign just like normal tags, or via the API by calling\n\"Options('UserParam','PARAM')\". Appending a hash tag (\"#\") to the parameter name also\ncauses the parameter to be extracted as a normal tag (in the UserParam group). If called\nwithout additional arguments, \"Options('UserParam')\" returns a reference to the hash of\nall user parameters (with lower-case names).\n\nValidate\nFlag to perform extra validation metadata checks when reading, causing extra warnings to\nbe generated if problems are found. Default is undef.\n\nVerbose\nPrint verbose messages to file specified by TextOut option. Value may be from 0 to 5 for\nincreasingly verbose messages. Default is 0. With the verbose option set, messages are\nprinted to the console as the file is parsed. Level 1 prints the tag names and raw\nvalues. Level 2 adds more details about the tags. Level 3 adds a hex dump of the tag\ndata, but with limits on the number of bytes dumped. Levels 4 and 5 remove the dump\nlimit on tag values and JPEG segment data respectively.\n\nWriteMode\nSet tag write/create mode. Value is a string of one or more characters from list below.\nDefault is 'wcg'.\n\nw - Write existing tags\nc - Create new tags\ng - create new Groups as necessary\n\nThe level of the group differs for different types of metadata. For XMP or IPTC this is\nthe full XMP/IPTC block (the family 0 group), but for EXIF this is the individual IFD\n(the family 1 group). The 'w' and 'c' modes are tested only when \"SetNewValue\" is\ncalled, but the 'g' mode is also tested in \"WriteInfo\".\n\nXAttrTags\nFlag to extract the OS X extended attribute tags (see the \"xattr\" man page and \"MacOS\nXAttr Tags\" in Image::ExifTool::TagNames for more information).\n\nXMPAutoConv\nFlag to enable automatic conversion for unknown XMP tags with values that look like\nrational numbers or dates. Default is 1.\n\nReturn Values:\nThe original value of the last specified parameter.\n"
                },
                {
                    "name": "ClearOptions",
                    "content": "Reset all options to their default values. Loads user-defined default option values from the\n%Image::ExifTool::UserDefined::Options hash in the .ExifToolconfig file if it exists.\n\n$exifTool->ClearOptions();\n\nInputs:\n0) ExifTool object reference\n\nReturn Values:\n(none)\n"
                },
                {
                    "name": "ExtractInfo",
                    "content": "Extract all meta information from an image.\n\n$success = $exifTool->ExtractInfo('image.jpg', \\%options);\n\nInputs:\n\"ExtractInfo\" takes exactly the same arguments as \"ImageInfo\". The only difference is that a\nlist of tag keys is not returned if an ARRAY reference is given. The following options are\neffective in the call to \"ExtractInfo\":\n\nBinary, Charset, CharsetEXIF, CharsetFileName, CharsetID3, CharsetIPTC, CharsetPhotoshop,\nCharsetQuickTime, CharsetRIFF, Composite, ExtendedXMP, ExtractEmbedded, FastScan, FixBase,\nHtmlDump, HtmlDumpBase, IgnoreMinorErrors, Lang, LargeFileSupport, MakerNotes, MDItemTags,\nNoPDFList, Password, QuickTimeUTC (enforced 1904 time zero), RequestAll, RequestTags,\nSaveFormat, SavePath, ScanForXMP, Struct, TextOut, Unknown, Verbose, XAttrTags and\nXMPAutoConv.\n\nReturn Value:\n1 if this was a recognized file format, 0 otherwise (and 'Error' tag set).\n"
                },
                {
                    "name": "GetInfo",
                    "content": "\"GetInfo\" is called to return meta information after it has been extracted from the image by a\nprevious call to \"ExtractInfo\" or \"ImageInfo\". This function may be called repeatedly after a\nsingle call to \"ExtractInfo\" or \"ImageInfo\".\n\n# get image width and height only\n$info = $exifTool->GetInfo('ImageWidth', 'ImageHeight');\n\n# get all Error and Warning messages\n$info = $exifTool->GetInfo('Error', 'Warning');\n\n# get information for all tags in list (list updated with tags found)\n$info = $exifTool->GetInfo(\\@ioTagList);\n\n# get all information in Author or Location groups\n$info = $exifTool->GetInfo({Group2 => ['Author', 'Location']});\n\nInputs:\nInputs are the same as \"ExtractInfo\" and \"ImageInfo\" except that an image can not be\nspecified. Options in effect are:\n\nCharset, CoordFormat, DateFormat, Duplicates, Escape, Exclude, Filter, Group#,\nGlobalTimeShift, Lang, ListItem, ListJoin, PrintConv, Sort (if a tag list reference is\ngiven) and StrictDate.\n\nReturn Value:\nReference to information hash, the same as with \"ImageInfo\".\n\nThe following options are effective in the call to \"GetInfo\":\n\nCharset, CoordFormat, DateFormat, Duplicates, Escape, Exclude, Filter, Group#, GlobalTimeShift,\nLang, ListItem, ListJoin, PrintConv, QuickTimeUTC (conversion to local time), Sort (if a tag\nlist reference is given) and StrictDate.\n"
                },
                {
                    "name": "WriteInfo",
                    "content": "Write meta information to a file. The specified source file is rewritten to the same-type\ndestination file with new information as specified by previous calls to \"SetNewValue\". The\nnecessary segments and/or directories are created in the destination file as required to store\nthe specified information. May be called repeatedly to write the same information to additional\nfiles without the need to call \"SetNewValue\" again.\n\nExifTool queues all new values that are assigned via calls to \"SetNewValue\", then applies them\nto any number of files through one or more calls to \"WriteInfo\". These queued values may be\naccessed through \"GetNewValue\", and are completely separate from metadata extracted from files\nvia \"ExtractInfo\" or \"ImageInfo\" and accessed through \"GetInfo\" or \"GetValue\".\n\nTo be clear, it is NOT necessary to call \"ExtractInfo\" or \"ImageInfo\" before \"WriteInfo\".\n\"WriteInfo\" changes only metadata specified by previous calls to \"SetNewValue\".\n\n# add information to a source file, writing output to new file\n$exifTool->WriteInfo($srcfile, $dstfile);\n\n# create XMP data file from scratch\n$exifTool->WriteInfo(undef, $dstfile, 'XMP');\n\n# overwrite file (you do have backups, right?)\n$exifTool->WriteInfo($srcfile);\n\nInputs:\n0) ExifTool object reference\n\n1) Source file name, file reference, scalar reference, or undef to create a file from\nscratch. A reference to a File::RandomAccess object is also allowed as a source, but in this\ncase the destination is not optional.\n\n2) [optional] Destination file name, file reference, scalar reference to write to memory, or\nundef to overwrite the original file. May be '-' to write to stdout.\n\n3) [optional] Destination file type. Ignored if a source is defined.\n\nReturn Value:\n1 if file was written OK, 2 if file was written but no changes made, 0 on file write error.\n\nIf an error code is returned, an Error tag is set and GetValue('Error') can be called to\nobtain the error description. A Warning tag may be set even if this routine is successful.\nCalling WriteInfo clears any pre-existing Error and Warning tags.\n\n$errorMessage = $exifTool->GetValue('Error');\n$warningMessage = $exifTool->GetValue('Warning');\n\nNotes:\nThe source file name may be undefined to create a file from scratch (currently only XMP,\nMIE, ICC, VRD, DR4, EXV and EXIF files can be created in this way -- see \"CanCreate\" for\ndetails). If undefined, the destination file type is required unless the type can be\ndetermined from the extension of the destination file name.\n\nIf a destination file name is given, the specified file must not exist because an existing\ndestination file will not be overwritten. Any new values for FileName, Directory or HardLink\nare ignored when a destination file name is specified.\n\nThe destination file name may be undefined to overwrite the original file (make sure you\nhave backups!). In this case, if a source file name is provided, a temporary file is created\nand renamed to replace the source file if no errors occurred while writing. Otherwise, if a\nsource file reference or scalar reference is used, the image is first written to memory then\ncopied back to replace the original if there were no errors.\n\nOn Mac OS systems, the file resource fork is preserved if this routine is called with a\nsource file name.\n\nThe following ExifTool options are effective in the call to \"WriteInfo\":\n\nByteOrder, Charset, CharsetEXIF, CharsetFileName, CharsetIPTC, Compact, Compress, FixBase,\nIgnoreMinorErrors, NoMultiExif, NoPDFList, Password, QuickTimeHandler, QuickTimePad, Verbose and\nWriteMode.\n"
                },
                {
                    "name": "GetTagList",
                    "content": "Get a sorted list of tags from the specified information hash or tag list.\n\n@tags = $exifTool->GetTagList($info, 'Group0');\n\nInputs:\n0) ExifTool object reference\n\n1) [optional] Information hash reference or tag list reference\n\n2) [optional] Sort order ('Input', 'File', 'Tag', 'Descr' or 'Group#')\n\n3) [optional] Secondary sort order ('File', 'Tag' or 'Descr')\n\nIf the information hash or tag list reference is not provided, then the list of found tags\nfrom the last call to \"ImageInfo\", \"ExtractInfo\" or \"GetInfo\" is used instead, and the\nresult is the same as if \"GetFoundTags\" was called. If sort order is not specified, the sort\norder is taken from the current options settings.\n\nReturn Values:\nA list of tag keys in the specified order.\n"
                },
                {
                    "name": "GetFoundTags",
                    "content": "Get list of found tags in specified sort order. The found tags are the tags for the information\nobtained from the most recent call to \"ImageInfo\", \"ExtractInfo\" or \"GetInfo\" for this object.\n\n@tags = $exifTool->GetFoundTags('File');\n\nInputs:\n0) ExifTool object reference\n\n1) [optional] Sort order ('Input', 'File', 'Tag', 'Descr' or 'Group#')\n\n2) [optional] Secondary sort order ('File', 'Tag' or 'Descr')\n\nIf sort order is not specified, the sort order from the ExifTool options is used.\n\nReturn Values:\nA list of tag keys in the specified order.\n"
                },
                {
                    "name": "GetRequestedTags",
                    "content": "Get list of requested tags. These are the tags that were specified in the arguments of the most\nrecent call to \"ImageInfo\", \"ExtractInfo\" or \"GetInfo\", including tags specified via a tag list\nreference. Shortcut tags are expanded in the list.\n\n@tags = $exifTool->GetRequestedTags();\n\nInputs:\n(none)\n\nReturn Values:\nList of requested tag keys in the same order that the tags were specified. Note that this\nlist will be empty if tags were not specifically requested (ie. If extracting all tags).\n"
                },
                {
                    "name": "GetValue",
                    "content": "Get the value of a specified tag. The returned value is either the human-readable (PrintConv)\nvalue, the converted machine-readable (ValueConv) value, the original raw (Raw) value, or the\noriginal rational (Rational) value for rational formats. If the value type is not specified, the\nPrintConv value is returned if the PrintConv option is set, otherwise the ValueConv value is\nreturned. The PrintConv values are same as the values returned by \"ImageInfo\" and \"GetInfo\" in\nthe tag/value hash unless the PrintConv option is disabled.\n\nTags which represent lists of multiple values (as may happen with 'Keywords' for example) are\nhandled specially. In scalar context, the returned PrintConv value for these tags is either a\nstring of values or a list reference (depending on the ListJoin option setting), and the\nValueConv value is always a list reference. But in list context, \"GetValue\" always returns the\nlist itself.\n\nNote that \"GetValue\" requires a case-sensitive tag key as an argument. To retrieve tag\ninformation based on a case-insensitive tag name (with an optional group specifier), use\n\"GetInfo\" instead.\n\n# PrintConv example\nmy $val = $exifTool->GetValue($tag);\nif (ref $val eq 'SCALAR') {\nprint \"$tag = (unprintable value)\\n\";\n} else {\nprint \"$tag = $val\\n\";\n}\n\n# ValueConv examples\nmy $val = $exifTool->GetValue($tag, 'ValueConv');\nif (ref $val eq 'ARRAY') {\nprint \"$tag is a list of values\\n\";\n} elsif (ref $val eq 'SCALAR') {\nprint \"$tag represents binary data\\n\";\n} else {\nprint \"$tag is a simple scalar\\n\";\n}\n\nmy @keywords = $exifTool->GetValue('Keywords', 'ValueConv');\n\nThe following options are in effect when \"GetValue\" is called:\n\nCharset, CoordFormat, DateFormat, Escape, Filter, GlobalTimeShift, Lang, ListItem, ListJoin,\nPrintConv, QuickTimeUTC (conversion to local time), StrictDate and TimeZone.\n\nInputs:\n0) ExifTool object reference\n\n1) Tag key, or case-sensitive tag name with optional group prefix(es)\n\n2) [optional] Value type: 'PrintConv', 'ValueConv', 'Both', 'Raw' or 'Rational'\n\nThe default value type is 'PrintConv' if the PrintConv option is set, otherwise the default\nis 'ValueConv'. A value type of 'Both' returns both ValueConv and PrintConv values as a\nlist. 'Rational' returns the raw rational value as a string fraction for rational types, or\nundef for other types.\n\nReturn Values:\nThe value of the specified tag. If the tag represents a list of multiple values and the\nListJoin option is enabled then PrintConv returns a string of values, otherwise a reference\nto the list is returned in scalar context. The list itself is returned in list context.\n(Unless 'Both' values are requested, in which case two list references are returned,\nregardless of context.) Values may also be scalar references to binary data, or hash\nreferences if the \"Struct\" option is set.\n\nNote: It is possible for \"GetValue\" to return an undefined ValueConv or PrintConv value (or\nan empty list in list context) even if the tag exists, since it is possible for these\nconversions to yield undefined values. And the Rational value will be undefined for any\nnon-rational tag. The Raw value should always exist if the tag exists.\n"
                },
                {
                    "name": "SetNewValue",
                    "content": "Set the new value for a tag. The routine may be called multiple times to set the values of many\ntags before using \"WriteInfo\" to write the new values to an image.\n\nFor list-type tags (like Keywords), either call repeatedly with the same tag name for each\nvalue, or call with a reference to the list of values.\n\n# set a new value for a tag (errors go to STDERR)\n$success = $exifTool->SetNewValue($tag, $value);\n\n# set a new value and capture any error message\n($success, $errStr) = $exifTool->SetNewValue($tag, $value);\n\n# delete information for specified tag if it exists in image\n# (also resets AddValue and DelValue options for this tag)\n$exifTool->SetNewValue($tag);\n\n# reset all values from previous calls to SetNewValue()\n$exifTool->SetNewValue();\n\n# delete a specific keyword\n$exifTool->SetNewValue('Keywords', $word, DelValue => 1);\n\n# set keywords (a list-type tag) with two new values\n$exifTool->SetNewValue(Keywords => 'word1');\n$exifTool->SetNewValue(Keywords => 'word2');\n# equivalent, but set both in one call using an array reference\n$exifTool->SetNewValue(Keywords => ['word1','word2']);\n\n# add a keyword without replacing existing keywords in the file\n$exifTool->SetNewValue(Keywords => $word, AddValue => 1);\n\n# conditionally add a tag if it didn't exist before,\n# or replace it if it had a specified value (\"old value\")\n$exifTool->SetNewValue(Description => '', DelValue => 1);\n$exifTool->SetNewValue(Description => 'old value', DelValue => 1);\n$exifTool->SetNewValue(Description => 'new value');\n\n# set a tag in a specific group\n$exifTool->SetNewValue(Headline => $val, Group => 'XMP');\n$exifTool->SetNewValue('XMP:Headline' => $val);  # (equivalent)\n\n# shift original date/time back by 2.5 hours\n$exifTool->SetNewValue(DateTimeOriginal => '2:30', Shift => -1);\n\n# write a tag only if it had a specific value\n# (the order of the following calls is not significant)\n$exifTool->SetNewValue(Title => $oldVal, DelValue => 1);\n$exifTool->SetNewValue(Title => $newVal);\n\n# write tag by numerical value\n$exifTool->SetNewValue(Orientation => 6, Type => 'ValueConv');\n$exifTool->SetNewValue('Orientation#' => 6);  # (equivalent)\n\n# delete all but EXIF tags\n$exifTool->SetNewValue('*');  # delete all...\n$exifTool->SetNewValue('EXIF:*', undef, Replace => 2); # ...but EXIF\n\n# write structured information as a HASH reference\n$exifTool->SetNewValue('XMP:Flash' => {\nmode   => 'on',\nfired  => 'true',\nreturn => 'not'\n});\n\n# write structured information as a serialized string\n$exifTool->SetNewValue('XMP:Flash'=>'{mode=on,fired=true,return=not}');\n\n(See <https://exiftool.org/struct.html#Serialize> for a description of the structure\nserialization technique.)\n\nInputs:\n0) ExifTool object reference\n\n1) [optional] Tag key or tag name, or undef to clear all new values. The tag name may be\nprefixed by one or more family 0, 1 or 2 group names with optional leading family numbers,\nseparated by colons (eg. 'EXIF:Artist', 'XMP:Time:*'), which is equivalent to using a Group\noption argument. Also, a '#' may be appended to the tag name (eg. 'EXIF:Orientation#'), with\nthe same effect as setting Type to 'ValueConv'. Wildcards ('*' and '?') may be used in the\ntag name to assign or delete multiple tags simultaneously. A tag name of '*' is special when\ndeleting information, and will delete an entire group even if some individual tags in the\ngroup are not writable, but only if a single family 0 or 1 group is specified (otherwise the\ntags are deleted individually). Use \"GetDeleteGroups\" to get a list of deletable group\nnames, and see Image::ExifTool::TagNames for a complete list of tag names.\n\n2) [optional] New value for tag. Undefined to delete tag from file. May be a scalar, scalar\nreference, list reference to set a list of values, or hash reference for a structure.\nInteger values may be specified as a hexadecimal string (with a leading '0x'), and simple\nrational values may be specified in fractional form (eg. '4/10'). Structure tags may be\nspecified either as a hash reference or a serialized string (see the last two examples\nabove).\n\n3-N) [optional] SetNewValue option/value pairs (see below).\n\nSetNewValue Options:\n\nAddValue\nSpecifies that the value be added to an existing list in a file rather than overwriting\nthe existing values. Valid settings are 0 (overwrite any existing tag value), 1 (add to\nan existing list and warn for non-list tags) or 2 (add to existing list and overwrite\nnon-list tags). Default is 0.\n\nDelValue\nDelete existing tag from a file if it has the specified value. For list-type tags this\ndeletes a specified item from the list. For non-list tags this may be used to\nconditionally replace a tag by providing a new value in a separate call to SetNewValue\n(see examples above). For structured tags, the entire structure is deleted/replaced only\nif all of the specified fields match the existing structure. Option values are 0 or 1.\nDefault is 0.\n\nEditGroup\nCreate tags in existing groups only. Don't create new group. Valid values are 0 and 1.\nEffectively removes the 'g' from the ExifTool WriteMode option for this tag only.\nDefault is 0.\n\nEditOnly\nEdit tag only if it already exists. Don't create new tag. Valid values are 0 and 1.\nEffectively removes the 'c' from the ExifTool WriteMode option for this tag only.\nDefault is 0.\n\nGroup\nSpecifies group name where tag should be written. This option is superseded by any group\nspecified in the tag name. If not specified, tag is written to highest priority group as\nspecified by \"SetNewGroups\". May be one or more family 0, 1 or 2 groups with optional\nleading family number, separated by colons. Case is not significant.\n\nNoFlat\nTreat flattened tags as 'unsafe'.\n\nNoShortcut\nDisables default behaviour of looking up tag in shortcuts if not found otherwise.\n\nProtected\nBit mask for tag protection levels to write. Bit 0x01 allows writing of 'unsafe' tags\n(ie. tags not copied automatically via \"SetNewValuesFromFile\"). Bit 0x02 allows writing\nof 'protected' tags, and should only be used internally by ExifTool. See\nImage::ExifTool::TagNames, for a list of tag names indicating 'unsafe' and 'protected'\ntags. Default is 0.\n\nProtectSaved\nAvoid setting new values which were saved after the Nth call to \"SaveNewValues\". Has no\neffect on unsaved values, or values saved before Nth call. Option value is N. Default is\nundef.\n\nReplace\nFlag to replace the previous new values for this tag (ie. replace the values set in\nprevious calls to \"SetNewValue\"). This option is most commonly used to replace\npreviously-set new values for list-type tags. Valid values are 0 (set new value normally\n-- adds to new values for list-type tags), 1 (reset any previous new values before\nsetting new value) or 2 (reset previous new values only; new value argument is ignored).\nDefault is 0.\n\nShift\nShift the tag by the specified value. Currently only date/time tags and tags with\nnumerical values may be shifted. Undefined for no shift, 1 for a positive shift, or -1\nfor a negative shift. A value of 0 causes a positive shift to be applied if the tag is\nshiftable and AddValue is set, or a negative shift for date/time tags only if DelValue\nis set. Default is undef. See Image::ExifTool::Shift(3pm) for more information.\n\nType\nThe type of value being set. Valid values are PrintConv, ValueConv or Raw. Default is\nPrintConv if the \"PrintConv\" Option is set, otherwise ValueConv.\n\nReturn Values:\nIn scalar context, returns the number of tags set and error messages are printed to STDERR.\nIn list context, returns the number of tags set, and the error string (which is undefined if\nthere was no error).\n\nNotes:\nWhen deleting groups of tags, the Replace option may be used to exclude specific groups from\na mass delete. However, this technique may not be used to exclude individual tags from a\ngroup delete (unless a family 2 group was specified in the delete). Instead, use\n\"SetNewValuesFromFile\" to recover the values of individual tags after deleting a group.\n\nWhen deleting all tags from a JPEG image, the APP14 \"Adobe\" information is not deleted by\ndefault because doing so may affect the appearance of the image. However, this information\nmay be deleted by specifying it explicitly, either by group (with 'Adobe:*') or as a block\n(with 'Adobe').\n\nThe following ExifTool options are effective in the call to \"SetNewValue\":\n\nCharset, DateFormat, Escape, IgnoreMinorErrors, Lang, ListJoin, ListSplit, PrintConv,\nQuickTimeUTC, StrictDate, TimeZone, Verbose and WriteMode.\n"
                },
                {
                    "name": "GetNewValue",
                    "content": "Get the new Raw value for a tag. This is the value set by \"SetNewValue\" this is queued to be\nwritten to file. List-type tags may return multiple values in list context.\n\n$rawVal = $exifTool->GetNewValue($tag);\n\n@rawVals = $exifTool->GetNewValue($tag);\n\nInputs:\n0) ExifTool object reference\n\n1) Tag name (case sensitive, may be prefixed by family 0, 1 or 7 group names, separated by\ncolons)\n\nReturn Values:\nList of new Raw tag values, or first value in list when called in scalar context. The list\nmay be empty either if the tag isn't being written, or if it is being deleted (ie. if\n\"SetNewValue\" was called without a value).\n"
                },
                {
                    "name": "SetNewValuesFromFile",
                    "content": "A very powerful routine that sets new values for tags from information found in a specified\nfile.\n\n# set new values from all information in a file...\nmy $info = $exifTool->SetNewValuesFromFile($srcFile);\n# ...then write these values to another image\nmy $result = $exifTool->WriteInfo($file2, $outFile);\n\n# set all new values, preserving original groups\n$exifTool->SetNewValuesFromFile($srcFile, '*:*');\n\n# set specific information\n$exifTool->SetNewValuesFromFile($srcFile, @tags);\n\n# set new value from a different tag in specific group\n$exifTool->SetNewValuesFromFile($fp, 'XMP-dc:Subject<IPTC:Keywords');\n\n# add all IPTC keywords to XMP subject list\n$exifTool->SetNewValuesFromFile($fp, 'XMP-dc:Subject+<IPTC:Keywords');\n\n# set new value from an expression involving other tags\n$exifTool->SetNewValuesFromFile($file,\n'Comment<ISO=$ISO Aperture=$aperture Exposure=$shutterSpeed');\n\n# set keywords list from the values of multiple tags\n$exifTool->SetNewValuesFromFile($file, { Replace => 0 },\n'keywords<xmp:subject', 'keywords<filename');\n\n# copy all EXIF information, preserving the original IFD\n# (without '*.*<' tags would be copied to the preferred EXIF IFD)\n$exifTool->SetNewValuesFromFile($file, '*:*<EXIF:*');\n\n# copy all tags with names starting with \"gps\" (note: this is\n# different than \"gps:*\" because it will also copy XMP GPS tags)\n$exifTool->SetNewValuesFromFile($file, 'gps*');\n\n# set FileName from Model, translating questionable characters\n$exifTool->SetNewValuesFromFile($file,\n'filename<${model; tr(/\\\\\\\\?*:|\"><)() }.jpg');\n\nInputs:\n0) ExifTool object reference\n\n1) File name, file reference, or scalar reference\n\n2-N) [optional] List of tag names to set or options hash references. All writable tags are\nset if none are specified. The tag names are not case sensitive, and may be prefixed by one\nor more family 0, 1, 2 or 7 group names with optional leading family numbers, separated by\ncolons (eg. 'exif:iso'). A leading '-' indicates tags to be excluded (eg. '-comment'), or a\ntrailing '#' causes the ValueConv value to be copied (same as setting the Type option to\n'ValueConv' for this tag only). Wildcards ('*' and '?') may be used in the tag name. A tag\nname of '*' is commonly used when a group is specified to copy all tags in the group (eg.\n'XMP:*'). A special feature allows tag names of the form 'DSTTAG<SRCTAG' (or\n'SRCTAG>DSTTAG') to be specified to copy information to a tag with a different name or a\nspecified group. Both 'SRCTAG' and 'DSTTAG' may contain wildcards and/or be prefixed by a\ngroup name (eg. 'fileModifyDate<modifyDate' or 'xmp:*<*'), and/or suffixed by a '#' to\ndisable print conversion. Copied tags may also be added or deleted from a list with\narguments of the form 'DSTTAG+<SRCTAG' or 'DSTTAG-<SRCTAG'. Tags are evaluated in order, so\nexclusions apply only to tags included earlier in the list. An extension of this feature\nallows the tag value to be set from a string containing tag names with leading '$' symbols\n(eg. 'Comment<the file is $filename'). Braces '{}' may be used around the tag name to\nseparate it from subsequent text, and a '$$' is used to to represent a '$' symbol. The\nbehaviour for missing tags in expressions is defined by the \"MissingTagValue\" option. The\ntag value may be modified via changes to the default input variable ($) in a Perl\nexpression placed inside the braces and after a semicolon following the tag name (see the\nlast example above). A '@' may be added after the tag name (before the semicolon) to make\nthe expression act on individual list items instead of the concatenated string for list-type\ntags. Braces within the expression must be balanced. Multiple options hash references may be\npassed to set different options for different tags. Options apply to subsequent tags in the\nargument list.\n\nBy default, this routine will commute information between same-named tags in different\ngroups, allowing information to be translated between images with different formats. This\nbehaviour may be modified by specifying a group name for extracted tags (even if '*' is used\nas a group name), in which case the information is written to the original group, unless\nredirected to a different group. When '*' is used for a group name, by default the family 1\ngroup of the original tag is preserved, but a different family may be specified with a\nleading family number. (For example, specifying '*:*' copies all information while\npreserving the original family 1 groups, while '0*:*' preserves the family 0 group.)\n\nSetNewValuesFromFile Options:\nThe options are the same was for \"SetNewValue\", and are passed directly to \"SetNewValue\"\ninternally, with a few exceptions:\n\n- The Replace option defaults to 1 instead of 0 as with \"SetNewValue\".\n\n- The AddValue or DelValue option is set for individual tags if '+>' or '->' (or '+<' or\n'-<') are used.\n\n- The Group option is set for tags where a group name is given.\n\n- The Protected flag is set to 1 for individually specified tags.\n\n- The Type option also applies to extracted tags.\n\nReturn Values:\nA hash of information that was set successfully. May include Warning or Error entries if\nthere were problems reading the input file.\n\nNotes:\nThe PrintConv option applies to this routine, but it normally should be left on to provide\nmore reliable transfer of information between groups.\n\nIf a preview image exists, it is not copied. The preview image must be transferred\nseparately if desired, in a separate call to \"WriteInfo\"\n\nWhen simply copying all information between files of the same type, it is usually desirable\nto preserve the original groups by specifying '*:*' for the tags to set.\n\nThe \"Duplicates\" option is always in effect for tags extracted from the source file using\nthis routine.\n\nThe \"Struct\" option is enabled by default for tags extracted by this routine. This allows\nthe hierarchy of complex structures to be preserved when copying, but the Struct option may\nbe set to 0 to override this behaviour and copy as flattened tags instead.\n"
                },
                {
                    "name": "CountNewValues",
                    "content": "Return the total number of new values set.\n\n$numSet = $exifTool->CountNewValues();\n($numSet, $numPseudo) = $exifTool->CountNewValues();\n\nInputs:\n0) ExifTool object reference\n\nReturn Values:\nIn scalar context, returns the total number of tags with new values set. In list context,\nalso returns the number of \"pseudo\" tag values which have been set. \"Pseudo\" tags are tags\nlike FileName and FileModifyDate which are not contained within the file and can be changed\nwithout rewriting the file.\n"
                },
                {
                    "name": "SaveNewValues",
                    "content": "Save state of new values to be later restored by \"RestoreNewValues\".\n\n$exifTool->SaveNewValues();         # save state of new values\n$exifTool->SetNewValue(ISO => 100); # set new value for ISO\n$exifTool->WriteInfo($src, $dst1);  # write ISO + previous new values\n$exifTool->RestoreNewValues();      # restore previous new values\n$exifTool->WriteInfo($src, $dst2);  # write previous new values only\n\nInputs:\n0) ExifTool object reference\n\nReturn Value:\nCount of the number of times this routine has been called (N) since the last time the new\nvalues were reset.\n"
                },
                {
                    "name": "RestoreNewValues",
                    "content": "Restore new values to the settings that existed when \"SaveNewValues\" was last called. May be\ncalled repeatedly after a single call to \"SaveNewValues\". See \"SaveNewValues\" above for an\nexample.\n\nInputs:\n0) ExifTool object reference\n\nReturn Value:\nNone.\n"
                },
                {
                    "name": "SetFileModifyDate",
                    "content": "Write the filesystem modification or creation time from the new value of the FileModifyDate or\nFileCreateDate tag.\n\n$exifTool->SetNewValue(FileModifyDate => '2000:01:02 03:04:05-05:00',\nProtected => 1);\n$result = $exifTool->SetFileModifyDate($file);\n\nInputs:\n0) ExifTool object reference\n\n1) File name\n\n2) [optional] Base time if applying shift (days before $^T)\n\n3) [optional] Tag to write: 'FileModifyDate' (default), or 'FileCreateDate'\n\nReturn Value:\n1 if the time was changed, 0 if nothing was done, or -1 if there was an error setting the\ntime.\n\nNotes:\nEquivalent to, but more efficient than calling \"WriteInfo\" when only the FileModifyDate or\nFileCreateDate tag has been set. If a timezone is not specified, local time is assumed. When\nshifting, the time of the original file is used unless the optional base time is specified.\n\nThe ability to write FileCreateDate is currently restricted to Windows systems only.\n"
                },
                {
                    "name": "SetFileName",
                    "content": "Set the file name and directory, or create a hard link. If not specified, the new file name is\nderived from the new values of the FileName and Directory tags, or from the HardLink or SymLink\ntag if creating a link. If the FileName tag contains a '/', then the file is renamed into a new\ndirectory. If FileName ends with '/', then it is taken as a directory name and the file is moved\ninto the new directory. The new value for the Directory tag takes precedence over any directory\nspecified in FileName.\n\n$result = $exifTool->SetFileName($file);\n$result = $exifTool->SetFileName($file, $newName);\n\nInputs:\n0) ExifTool object reference\n\n1) Current file name\n\n2) [optional] New file name\n\n3) [optional] 'HardLink' or 'SymLink' to create a hard or symbolic link instead of renaming\nthe file, or 'Test' to test renaming feature by printing the old and new names instead of\nchanging anything.\n\nReturn Value:\n1 on success, 0 if nothing was done, or -1 if there was an error renaming the file or\ncreating the link.\n\nNotes:\nWill not overwrite existing files. New directories are created as necessary. If the file is\nsuccessfully renamed, the new file name may be accessed via $$exifTool{NewName}.\n"
                },
                {
                    "name": "SetNewGroups",
                    "content": "Set the order of the preferred groups when adding new information. In subsequent calls to\n\"SetNewValue\", new information will be created in the first valid group of this list. This has\nan impact only if the group is not specified when calling \"SetNewValue\" and if the tag name\nexists in more than one group. The default order is EXIF, IPTC, XMP, MakerNotes, QuickTime,\nPhotoshop, ICCProfile, CanonVRD, Adobe. Any family 0 group name may be used. Case is not\nsignificant.\n\n$exifTool->SetNewGroups('XMP','EXIF','IPTC');\n\nInputs:\n0) ExifTool object reference\n\n1-N) Groups in order of priority. If no groups are specified, the priorities are reset to\nthe defaults.\n\nReturn Value:\nNone.\n"
                },
                {
                    "name": "GetNewGroups",
                    "content": "Get current group priority list.\n\n@groups = $exifTool->GetNewGroups();\n\nInputs:\n0) ExifTool object reference\n\nReturn Values:\nList of group names in order of write priority. Highest priority first.\n"
                },
                {
                    "name": "GetTagID",
                    "content": "Get the ID for the specified tag. The ID is the IFD tag number in EXIF information, the property\nname in XMP information, or the data offset in a binary data block. For some tags, such as\nComposite tags where there is no ID, an empty string is returned. In list context, also returns\na language code for the tag if available and different from the default language (eg. with\nalternate language entries for XMP \"lang-alt\" tags).\n\n$id = $exifTool->GetTagID($tag);\n($id, $lang) = $exifTool->GetTagID($tag);\n\nInputs:\n0) ExifTool object reference\n\n1) Tag key\n\nReturn Values:\nIn scalar context, returns the tag ID or '' if there is no ID for this tag. In list context,\nreturns the tag ID (or '') and the language code (or undef).\n"
                },
                {
                    "name": "GetDescription",
                    "content": "Get description for specified tag. This function will always return a defined value. In the case\nwhere the description doesn't exist, one is generated from the tag name.\n\nInputs:\n0) ExifTool object reference\n\n1) Tag key\n\nReturn Values:\nA description for the specified tag.\n"
                },
                {
                    "name": "GetGroup",
                    "content": "Get group name(s) for a specified tag.\n\n# return family 0 group name (eg. 'EXIF');\n$group = $exifTool->GetGroup($tag, 0);\n\n# return all groups (eg. qw{EXIF IFD0 Author Main})\n@groups = $exifTool->GetGroup($tag);\n\n# return groups as a string (eg. 'Main:IFD0:Author')\n$group = $exifTool->GetGroup($tag, ':3:1:2');\n\n# return groups as a simplified string (eg. 'IFD0:Author')\n$group = $exifTool->GetGroup($tag, '3:1:2');\n\nInputs:\n0) ExifTool object reference\n\n1) Tag key\n\n2) [optional] Group family number, or string of numbers separated by colons\n\nReturn Values:\nGroup name (or '' if tag has no group). If no group family is specified, \"GetGroup\" returns\nthe name of the group in family 0 when called in scalar context, or the names of groups for\nall families in list context. Returns a string of group names separated by colons if the\ninput group family contains a colon. The string is simplified to remove a leading 'Main:'\nand adjacent identical group names unless the family string begins with a colon.\n\nNotes:\nThe group family numbers are currently available:\n\n0) Information Type         (eg. EXIF, XMP, IPTC)\n1) Specific Location        (eg. IFD0, XMP-dc)\n2) Category                 (eg. Author, Time)\n3) Document Number          (eg. Main, Doc1, Doc3-2)\n4) Instance Number          (eg. Copy1, Copy2, Copy3...)\n5) Metadata Path            (eg. JPEG-APP1-IFD0-ExifIFD)\n6) EXIF/TIFF Format         (eg. int8u, int32u, undef, string)\n7) Tag ID                   (eg. ID-271, ID-rights, ID-a9aut)\n\nFamilies 0 and 1 are based on the file structure, and are similar except that family 1 is\nmore specific and sub-divides some groups to give more detail about the specific location\nwhere the information was found. For example, the EXIF group is split up based on the\nspecific IFD (Image File Directory), the MakerNotes group is divided into groups for each\nmanufacturer, and the XMP group is separated based on the XMP namespace prefix. Note that\nonly common XMP namespaces are listed in the GetAllGroups documentation, but additional\nnamespaces may be present in some XMP data. Also note that the 'XMP-xmp...' group names may\nappear in the older form 'XMP-xap...' since these names evolved as the XMP standard was\ndeveloped. The ICCProfile group is broken down to give information about the specific\nICCProfile tag from which multiple values were extracted. As well, information extracted\nfrom the ICCProfile header is separated into the ICC-header group.\n\nFamily 2 classifies information based on the logical category to which the information\nrefers.\n\nFamily 3 gives the document number for tags extracted from embedded documents, or 'Main' for\ntags from the main document. (See the \"ExtractEmbedded\" option for extracting tags from\nembedded documents.) Nested sub-documents (if they exist) are indicated by numbers separated\nwith dashes in the group name, to an arbitrary depth. (eg. 'Doc2-3-1' is the 1st\nsub-sub-document of the 3rd sub-document of the 2nd embedded document of the main file.)\nDocument numbers are also used to differentiate samples for timed metadata in videos.\n\nFamily 4 provides a method for differentiating tags when multiple tags exist with the same\nname in the same location. The primary instance of a tag (the tag extracted when the\nDuplicates option is disabled and no group is specified) has no family 4 group name, but\nadditional instances have family 4 group names of 'Copy1', 'Copy2', 'Copy3', etc. For\nconvenience, the primary tag may also be accessed using a group name of 'Copy0'.\n\nFamily 5 is experimental, and gives the complete path for the metadata in the file.\nGenerated only if the \"SavePath\" option is used when extracting.\n\nFamily 6 is currently used only for EXIF/TIFF metadata, and gives the format type of the\nextracted value. Generated only if the \"SaveFormat\" option is used when extracting.\n\nFamily 7 is used for tag ID's. The group names are the actual tag ID's, with a leading \"ID-\"\nstring. Non-numerical ID's have characters other than [-A-Za-z0-9] converted to hex.\nNumerical tag ID's are returned in hex if the \"HexTagIDs\" option is set, otherwise decimal\nis used. When specifying a family 7 group name, numerical ID's may be in hex or decimal, and\nnon-numerical ID's may or may not have characters other than [-A-Za-z0-9] converted to hex.\nNote that unlike other group names, the tag ID's of family 7 group names are case sensitive\n(but the leading \"ID-\" is not).\n\nSee \"GetAllGroups [static]\" for complete lists of group names.\n"
                },
                {
                    "name": "GetGroups",
                    "content": "Get list of group names that exist in the specified information.\n\n@groups = $exifTool->GetGroups($info, 2);\n@groups = $exifTool->GetGroups('3:1');\n\nInputs:\n0) ExifTool object reference\n\n1) [optional] Info hash ref (default is all extracted info)\n\n2) [optional] Group family number, or string of numbers (default 0)\n\nReturn Values:\nList of group names in alphabetical order. If information hash is not specified, the group\nnames are returned for all extracted information. See \"GetGroup\" for an description of\nfamily numbers and family number strings.\n"
                },
                {
                    "name": "BuildCompositeTags",
                    "content": "Builds composite tags from required tags. The composite tags are convenience tags which are\nderived from the values of other tags. This routine is called automatically by \"ImageInfo\" and\n\"ExtractInfo\" if the Composite option is set.\n\nInputs:\n0) ExifTool object reference\n\nReturn Values:\n(none)\n\nNotes:\nTag values are calculated in alphabetical order unless a tag Require's or Desire's another\ncomposite tag, in which case the calculation is deferred until after the other tag is\ncalculated.\n\nComposite tags may need to read data from the image for their value to be determined, and\nfor these \"BuildCompositeTags\" must be called while the image is available. This is only a\nproblem if \"ImageInfo\" is called with a filename (as opposed to a file reference or scalar\nreference) since in this case the file is closed before \"ImageInfo\" returns. Here the\nComposite option may be used so that \"BuildCompositeTags\" is called from within \"ImageInfo\",\nbefore the file is closed.\n\nGetTagName [static]\nGet name of tag from tag key. This is a convenience function that strips the embedded instance\nnumber, if it exists, from the tag key.\n\nNote: \"static\" in the heading above indicates that the function does not require an ExifTool\nobject reference as the first argument. All functions documented below are also static.\n\n$tagName = Image::ExifTool::GetTagName($tag);\n\nInputs:\n0) Tag key\n\nReturn Value:\nTag name. This is the same as the tag key but has the instance number removed.\n\nGetShortcuts [static]\nGet a list of shortcut tags.\n\nInputs:\n(none)\n\nReturn Values:\nList of shortcut tags (as defined in Image::ExifTool::Shortcuts).\n\nGetAllTags [static]\nGet list of all available tag names.\n\n@tagList = Image::ExifTool::GetAllTags($group);\n\nInputs:\n0) [optional] Group name, or string of group names separated by colons\n\nReturn Values:\nA list of all available tags in alphabetical order, or all tags in a specified group or\nintersection of groups. The group name is case insensitive, and any group in families 0-2\nmay be used except for EXIF family 1 groups (ie. the specific IFD).\n\nGetWritableTags [static]\nGet list of all writable tag names.\n\n@tagList = Image::ExifTool::GetWritableTags($group);\n\nInputs:\n0) [optional] Group name, or string of group names separated by colons\n\nReturn Values:\nA list of all writable tags in alphabetical order. These are the tags for which values may\nbe set through \"SetNewValue\". If a group name is given, returns only writable tags in\nspecified group(s). The group name is case insensitive, and any group in families 0-2 may be\nused except for EXIF family 1 groups (ie. the specific IFD).\n\nGetAllGroups [static]\nGet list of all group names in specified family.\n\n@groupList = Image::ExifTool::GetAllGroups($family);\n\nInputs:\n0) Group family number (0-7)\n\nReturn Values:\nA list of all groups in the specified family in alphabetical order.\n\nHere is a complete list of groups for each of these families:\n\nFamily 0 (Information Type):\nAFCP, AIFF, APE, APP0, APP1, APP11, APP12, APP13, APP14, APP15, APP3, APP4, APP5, APP6,\nAPP8, ASF, Audible, CanonVRD, Composite, DICOM, DNG, DV, DjVu, Ducky, EXE, EXIF, ExifTool,\nFITS, FLAC, FLIR, File, Flash, FlashPix, Font, FotoStation, GIF, GIMP, GeoTiff, GoPro, H264,\nHTML, ICCProfile, ID3, IPTC, ISO, ITC, JFIF, JPEG, JSON, JUMBF, Jpeg2000, LNK, Leaf, Lytro,\nM2TS, MIE, MIFF, MNG, MOI, MPC, MPEG, MPF, MXF, MakerNotes, Matroska, Meta, Ogg, OpenEXR,\nOpus, PDF, PICT, PLIST, PNG, PSP, Palm, Parrot, PanasonicRaw, PhotoCD, PhotoMechanic,\nPhotoshop, PostScript, PrintIM, QuickTime, RAF, RIFF, RSRC, RTF, Radiance, Rawzor, Real,\nRed, SVG, SigmaRaw, Stim, Theora, Torrent, Trailer, UserParam, VCard, Vorbis, WTV, XML, XMP,\nZIP\n\nFamily 1 (Specific Location):\nAC3, AFCP, AIFF, APE, ASF, AVI1, Adobe, AdobeCM, AdobeDNG, Apple, Audible, CBOR, CIFF,\nCameraIFD, Canon, CanonCustom, CanonRaw, CanonVRD, Casio, Chapter#, Composite, DICOM, DJI,\nDNG, DV, DjVu, DjVu-Meta, Ducky, EPPIM, EXE, EXIF, ExifIFD, ExifTool, FITS, FLAC, FLIR,\nFile, Flash, FlashPix, Font, FotoStation, FujiFilm, FujiIFD, GE, GIF, GIMP, GPS, GeoTiff,\nGlobParamIFD, GoPro, GraphConv, H264, HP, HTC, HTML, HTML-dc, HTML-ncc, HTML-office,\nHTML-prod, HTML-vw96, HTTP-equiv, ICC-chrm, ICC-clrt, ICC-header, ICC-meas, ICC-meta,\nICC-view, ICCProfile, ICCProfile#, ID3, ID3v1, ID3v1Enh, ID3v22, ID3v23, ID3v24, IFD0,\nIFD1, IPTC, IPTC#, ISO, ITC, Insta360, InteropIFD, ItemList, JFIF, JFXX, JPEG, JPEG-HDR,\nJPS, JSON, JUMBF, JVC, Jpeg2000, KDCIFD, Keys, Kodak, KodakBordersIFD, KodakEffectsIFD,\nKodakIFD, KyoceraRaw, LNK, Leaf, LeafSubIFD, Leica, Lyrics3, Lytro, M2TS, MAC, MIE-Audio,\nMIE-Camera, MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS, MIE-Geo, MIE-Image,\nMIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient, MIE-Preview, MIE-Thumbnail,\nMIE-UTM, MIE-Unknown, MIE-Video, MIFF, MNG, MOBI, MOI, MPC, MPEG, MPF0, MPImage, MS-DOC,\nMXF, MacOS, MakerNotes, MakerUnknown, Matroska, MediaJukebox, Meta, MetaIFD, Microsoft,\nMinolta, MinoltaRaw, Motorola, NITF, Nikon, NikonCapture, NikonCustom, NikonScan,\nNikonSettings, NineEdits, Nintendo, Ocad, Ogg, Olympus, OpenEXR, Opus, PDF, PICT, PNG,\nPNG-pHYs, PSP, Palm, Panasonic, PanasonicRaw, Pentax, PhaseOne, PhotoCD, PhotoMechanic,\nPhotoshop, PictureInfo, PostScript, PreviewIFD, PrintIM, ProfileIFD, Qualcomm, QuickTime,\nRAF, RAF2, RIFF, RMETA, RSRC, RTF, Radiance, Rawzor, Real, Real-CONT, Real-MDPR, Real-PROP,\nReal-RA3, Real-RA4, Real-RA5, Real-RJMD, Reconyx, Red, Ricoh, SPIFF, SR2, SR2DataIFD,\nSR2SubIFD, SRF#, SVG, Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD,\nSystem, Theora, Torrent, Track#, UserData, UserParam, VCalendar, VCard, Version0, Vorbis,\nWTV, XML, XMP, XMP-DICOM, XMP-Device, XMP-GAudio, XMP-GDepth, XMP-GFocus, XMP-GImage,\nXMP-GPano, XMP-GSpherical, XMP-LImage, XMP-MP, XMP-MP1, XMP-PixelLive, XMP-aas, XMP-acdsee,\nXMP-album, XMP-apple-fi, XMP-aux, XMP-cc, XMP-cell, XMP-creatorAtom, XMP-crs, XMP-dc,\nXMP-dex, XMP-digiKam, XMP-drone-dji, XMP-dwc, XMP-exif, XMP-exifEX, XMP-expressionmedia,\nXMP-extensis, XMP-fpv, XMP-getty, XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro,\nXMP-microsoft, XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-pdf, XMP-pdfx, XMP-photomech,\nXMP-photoshop, XMP-plus, XMP-pmi, XMP-prism, XMP-prl, XMP-prm, XMP-pur, XMP-rdf, XMP-swf,\nXMP-tiff, XMP-x, XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpMM, XMP-xmpNote, XMP-xmpPLUS,\nXMP-xmpRights, XMP-xmpTPg, ZIP, iTunes\n\nFamily 2 (Category):\nAudio, Author, Camera, Device, Document, ExifTool, Image, Location, Other, Preview,\nPrinting, Time, Unknown, Video\n\nFamily 3 (Document Number):\nDoc#, Main\n\nFamily 4 (Instance Number):\nCopy#\n\nFamily 5 (Metadata Path):\neg. JPEG-APP1-IFD0-ExifIFD\n\nFamily 6 (EXIF/TIFF Format):\nint8u, string, int16u, int32u, rational64u, int8s, undef, int16s, int32s, rational64s,\nfloat, double, ifd, unicode, complex, int64u, int64s, ifd64\n\nFamily 7 (Tag ID):\nID-xxx (Where xxx is the tag ID. Numerical ID's are returned in hex with a leading \"0x\" if\nthe HexTagIDs option is set, or decimal otherwise. Characters in non-numerical ID's which\nare not valid in a group name are returned as 2 hex digits.)\n\nNote: This function may also be called as an ExifTool member function to allow the HexTagIDs\noption to be set when retrieving family 7 group names.\n\nGetDeleteGroups [static]\nGet list of all deletable group names.\n\n@delGroups = Image::ExifTool::GetDeleteGroups();\n\nInputs:\nNone.\n\nReturn Values:\nA list of deletable group names in alphabetical order. The current list of deletable group\nnames is:\n\nAdobe, AFCP, APP0, APP1, APP10, APP11, APP12, APP13, APP14, APP15, APP2, APP3, APP4, APP5,\nAPP6, APP7, APP8, APP9, Audio, Author, Camera, CanonVRD, CIFF, Document, Ducky, EXIF,\nExifIFD, ExifTool, File, FlashPix, FotoStation, GlobParamIFD, GPS, ICCProfile, IFD0, IFD1,\nImage, Insta360, InteropIFD, IPTC, ItemList, JFIF, Jpeg2000, Keys, Location, MakerNotes,\nMeta, MetaIFD, Microsoft, MIE, MPF, NikonCapture, Other, PDF, PDF-update, PhotoMechanic,\nPhotoshop, PNG, PNG-pHYs, Preview, PrintIM, Printing, QuickTime, RMETA, RSRC, SubIFD, Time,\nTrailer, UserData, Video, XML, XML-*, XMP, XMP-*\n\nTo schedule a group for deletion, call \"SetNewValue\" with a tag name like 'EXIF:*' and an\nundefined tag value.\n\nDeleting a family 0 or 1 group will delete the entire corresponding block of metadata, but\ndeleting a family 2 group (eg. Audio, Author, Camera, etc.) deletes the individual tags\nbelonging to that category.\n\nThe 'Trailer' group allows all trailers in JPEG and TIFF-format images to be deleted at\nonce, including unknown trailers. Note that the JPEG \"APP\" groups are special, and are used\nonly to delete application segments which are not associated with another deletable group.\nFor example, deleting 'APP14:*' will delete other APP14 segments, but not the APP14 \"Adobe\"\nsegment.\n\nGetFileType [static]\nGet type of file given file name.\n\nmy $type = Image::ExifTool::GetFileType($filename);\nmy $desc = Image::ExifTool::GetFileType($filename, 1);\n\nInputs:\n0) [optional] File name (or just an extension)\n\n1) [optional] Flag to return a description instead of a type. Default is undef. Set to 0 to\nalso return types of recognized but unsupported files (otherwise the return value for\nunsupported files is undef), or 1 to return descriptions.\n\nReturn Value:\nA string, based on the file extension, which indicates the basic format of the file. Note\nthat some files may be based on other formats (like many RAW image formats are based on\nTIFF). In list context, may return more than one file type if the file may be based on\ndifferent formats. Returns undef if files with this extension are not yet supported by\nExifTool. Returns a list of extensions for all supported file types if no input extension is\nspecified (or all recognized file types if the description flag is set to 0). Returns a more\ndetailed description of the specific file format when the description flag is set.\n\nCanWrite [static]\nCan the specified file be written?\n\nmy $writable = Image::ExifTool::CanWrite($filename);\n\nInputs:\n0) File name or extension\n\nReturn Value:\nTrue if ExifTool supports writing files of this type (based on the file extension).\n\nCanCreate [static]\nCan the specified file be created?\n\nmy $creatable = Image::ExifTool::CanCreate($filename);\n\nInputs:\n0) File name or extension\n\nReturn Value:\nTrue if ExifTool can create files with this extension from scratch. Currently, this can only\nbe done with XMP, MIE, ICC, VRD, DR4, EXV and EXIF files.\n\nAddUserDefinedTags [static]\nAdd user-defined tags to an existing tag table at run time. This differs from the usual\ntechnique of creating user-defined tags via the %Image::ExifTool::UserDefined hash (see the\nExifToolconfig file in the Image::ExifTool distribution) because it allows tags to be added\nafter a tag table has been initialized.\n\nuse Image::ExifTool ':Public';\nmy %tags = (\nTestTagID1 => { Name => 'TestTagName1' },\nTestTagID2 => { Name => 'TestTagName2' },\n);\nmy $num = AddUserDefinedTags('Image::ExifTool::PDF::Info', %tags);\n\nInputs:\n0) Destination tag table name\n\n1-N) Pairs of tag ID / tag information hash references for the new tags\n\nReturn Value:\nThe number of tags added.\n\nNotes\nPre-existing tags with the same ID will be replaced in the destination table. See\nlib/Image/ExifTool/README in the full distribution for full details on the elements of the\ntag information hash.\n"
                }
            ]
        },
        "CHARACTER ENCODINGS": {
            "content": "Certain meta information formats allow coded character sets other than plain ASCII. When\nreading, most known encodings are converted to the external character set according to the\n\"Charset\" option, or to UTF-8 by default. When writing, the inverse conversions are performed.\nAlternatively, special characters may be converted to/from HTML character entities with the\n\"Escape\" HTML option.\n\nA distinction is made between the external character set visible via the ExifTool API, and the\ninternal character used to store text in the metadata of a file. These character sets may be\nspecified separately as follows:\n\nExternal Character Sets:\nThe encoding for tag values passed to/from ExifTool API functions is set via the \"Charset\"\noption, which is 'UTF8' by default.\n\nThe encoding of file names is specified via the \"CharsetFileName\" option. By default,\n\"CharsetFileName\" is not defined, and file names passed to ExifTool are used directly in\ncalls to the system i/o routines (which expect UTF-8 strings on Mac/Linux, but default to\nthe system code page on Windows). In this mode on Windows a warning is issued if a file name\ncontains special characters, but this warning may be avoided by setting \"CharsetFileName\" to\nan empty string. Setting \"CharsetFileName\" to any other value causes file names to be\nconverted from the specified encoding to one appropriate for the system. In Windows this\nalso has the effect of activating Unicode filename support via the special Windows\nwide-character i/o routines if Win32API::File is available.\n\nInternal Character Sets:\nThe encodings used to store strings in the various metadata formats. These encodings may be\nchanged for certain types of metadata via the \"CharsetEXIF\", \"CharsetID3\", \"CharsetIPTC\",\n\"CharsetPhotoshop\", \"CharsetQuickTime\" and \"CharsetRIFF\" options.\n\nValues are returned as byte strings of encoded characters. Perl wide characters are not used. By\ndefault, most returned strings are encoded in UTF-8. For these, Encode::decodeutf8() may be\nused to convert to a sequence of logical Perl characters. Note that some settings of the\nPERLUNICODE environment variable may be incompatible with ExifTool's character handling.\n\nMore specific details are given below about how character coding is handled for EXIF, IPTC, XMP,\nPNG, ID3, PDF, Photoshop, QuickTime, AIFF, MIE and Vorbis information:\n\nEXIF\nMost textual information in EXIF is stored in ASCII format (called \"string\" in the ExifTool tag\nname documentation). By default ExifTool does not convert these strings. However, it is not\nuncommon for applications to write UTF-8 or other encodings where ASCII is expected. To deal\nwith these, ExifTool allows the internal EXIF string encoding to be specified with\n\"CharsetEXIF\", which causes EXIF string values to be converted from the specified character set\nwhen reading, and stored with this character set when writing. (The MWG recommends using UTF-8\nencoding for EXIF strings, and in keeping with this the MWG module sets the default internal\nEXIF string encoding to UTF-8, but note that this will have no effect unless the external\nencoding is also set to something other than the default of UTF-8.)\n\nA few EXIF tags (UserComment, GPSProcessingMethod and GPSAreaInformation) support a designated\ninternal text encoding, with values stored as ASCII, Unicode (UCS-2) or JIS. When reading these\ntags, ExifTool converts Unicode and JIS to the external character set specified by the \"Charset\"\noption, or to UTF-8 by default. ASCII text is not converted. When writing, text is stored as\nASCII unless the string contains special characters, in which case it is converted from the\nexternal character set (UTF-8 by default), and stored as Unicode. ExifTool writes Unicode in\nnative EXIF byte ordering by default, but the byte order may be specified by setting the\nExifUnicodeByteOrder tag (see the Extra Tags documentation).\n\nThe EXIF \"XP\" tags (XPTitle, XPComment, etc) are always stored as little-endian Unicode (UCS-2),\nand are read and written using the specified character set.\n\nIPTC\nThe value of the IPTC:CodedCharacterSet tag determines how the internal IPTC string values are\ninterpreted. If CodedCharacterSet exists and has a value of 'UTF8' (or 'ESC % G') then string\nvalues are assumed to be stored as UTF-8, otherwise Windows Latin1 (cp1252, 'Latin') coding is\nassumed by default, but this can be changed with the \"CharsetIPTC\" option. When reading, these\nstrings are converted to the character set specified by the \"Charset\" option. When writing, the\ninverse conversions are performed. No conversion is done if the internal (IPTC) and external\n(ExifTool) character sets are the same. Note that ISO 2022 character set shifting is not\nsupported. Instead, a warning is issued and the string is not converted if an ISO 2022 shift\ncode is encountered. See <http://www.iptc.org/IIM/> for the official IPTC specification.\n\nExifTool may be used to convert IPTC values to a different internal encoding. To do this, all\nIPTC tags must be rewritten along with the desired value of CodedCharacterSet. For example, the\nfollowing command changes the internal IPTC encoding to UTF-8 (from Windows Latin1 unless\nCodedCharacterSet was already 'UTF8'):\n\nexiftool -tagsfromfile @ -iptc:all -codedcharacterset=utf8 a.jpg\n\nor from Windows Latin2 (cp1250) to UTF-8:\n\nexiftool -tagsfromfile @ -iptc:all -codedcharacterset=utf8 \\\n-charset iptc=latin2 a.jpg\n\nand this command changes it back from UTF-8 to Windows Latin1 (cp1252):\n\nexiftool -tagsfromfile @ -iptc:all -codedcharacterset= a.jpg\n\nor to Windows Latin2:\n\nexiftool -tagsfromfile @ -iptc:all -codedcharacterset= \\\n-charset iptc=latin2 a.jpg\n\nUnless CodedCharacterSet is 'UTF8', applications have no reliable way to determine the IPTC\ncharacter encoding. For this reason, it is recommended that CodedCharacterSet be set to 'UTF8'\nwhen creating new IPTC.\n\n(Note: Here, \"IPTC\" Refers to the older IPTC IIM format. The more recent IPTC Core and Extension\nspecifications actually use the XMP format.)\n\nXMP\nExifTool reads XMP encoded as UTF-8, UTF-16 or UTF-32, and converts them all to UTF-8\ninternally. Also, all XML character entity references and numeric character references are\nconverted. When writing, ExifTool always encodes XMP as UTF-8, converting the following 5\ncharacters to XML character references: & < > ' \". By default no further conversion is\nperformed, however if the \"Charset\" option is other than 'UTF8' then text is converted to/from\nthe specified character set when reading/writing.\n\nPNG\nPNG TextualData tags are stored as tEXt, zTXt and iTXt chunks in PNG images. The tEXt and zTXt\nchunks use ISO 8859-1 encoding, while iTXt uses UTF-8. When reading, ExifTool converts all PNG\ntextual data to the character set specified by the \"Charset\" option. When writing, ExifTool\ngenerates a tEXt chunk (or zTXt with the \"Compress\" option) if the text doesn't contain special\ncharacters or if Latin encoding is specified; otherwise an iTXt chunk is used and the text is\nconverted from the specified character set and stored as UTF-8.\n\nJPEG Comment\nThe encoding for the JPEG Comment (COM segment) is not specified, so ExifTool reads/writes this\ntext without conversion.\n\nID3\nThe ID3v1 specification officially supports only ISO 8859-1 encoding (a subset of Windows\nLatin1), although some applications may incorrectly use other character sets. By default\nExifTool converts ID3v1 text from Latin to the character set specified by the \"Charset\" option.\nHowever, the internal ID3v1 charset may be specified with the \"CharsetID3\" option. The encoding\nfor ID3v2 information is stored in the file, so ExifTool converts ID3v2 text from this encoding\nto the character set specified by the \"Charset\" option. ExifTool does not currently write ID3\ninformation.\n\nPDF\nPDF text strings are stored in either PDFDocEncoding (similar to Windows Latin1) or Unicode\n(UCS-2). When reading, ExifTool converts to the character set specified by the \"Charset\" option.\nWhen writing, ExifTool encodes input text from the specified character set as Unicode only if\nthe string contains special characters, otherwise PDFDocEncoding is used.\n",
            "subsections": [
                {
                    "name": "Photoshop",
                    "content": "Some Photoshop resource names are stored as Pascal strings with unknown encoding. By default,\nExifTool assumes MacRoman encoding and converts this to UTF-8, but the internal and external\ncharacter sets may be specified with the \"CharsetPhotoshop\" and \"Charset\" options respectively.\n"
                },
                {
                    "name": "QuickTime",
                    "content": "QuickTime text strings may be stored in a variety of poorly document formats. ExifTool does its\nbest to decode these according to the \"Charset\" option setting. For some QuickTime strings,\nExifTool assumes a default encoding of MacRoman, but this may be changed with the\n\"CharsetQuickTime\" option.\n\nAIFF\nAIFF strings are assumed to be stored in MacRoman, and are converted according to the \"Charset\"\noption when reading.\n\nRIFF\nThe internal encoding of RIFF strings (eg. in AVI and WAV files) is assumed to be Latin unless\notherwise specified by the RIFF CSET chunk or the \"CharsetRIFF\" option.\n\nMIE\nMIE strings are stored as either UTF-8 or ISO 8859-1. When reading, UTF-8 strings are converted\naccording to the \"Charset\" option, and ISO 8859-1 strings are never converted. When writing,\ninput strings are converted from the specified character set to UTF-8. The resulting strings are\nstored as UTF-8 if they contain multi-byte UTF-8 character sequences, otherwise they are stored\nas ISO 8859-1.\n"
                },
                {
                    "name": "Vorbis",
                    "content": "Vorbis comments are stored as UTF-8, and are converted to the character set specified by the\n\"Charset\" option.\n"
                }
            ]
        },
        "AUTHOR": {
            "content": "Copyright 2003-2022, Phil Harvey\n\nThis library is free software; you can redistribute it and/or modify it under the same terms as\nPerl itself.\n",
            "subsections": []
        },
        "ACKNOWLEDGEMENTS": {
            "content": "Many people have helped in the development of ExifTool through their bug reports, comments and\nsuggestions, and/or additions to the code. See the ACKNOWLEDGEMENTS in the individual\nImage::ExifTool modules and in html/index.html of the Image::ExifTool distribution package for a\nlist of people who have contributed to this project.\n",
            "subsections": []
        },
        "SEE ALSO": {
            "content": "",
            "subsections": [
                {
                    "name": "exiftool",
                    "content": "Image::ExifTool::Shift(3pm), Image::Info(3pm), Image::MetaData::JPEG(3pm)\n"
                }
            ]
        }
    },
    "summary": "Image::ExifTool - Read and write meta information",
    "flags": [],
    "examples": [],
    "see_also": [
        {
            "name": "Shift",
            "section": "3pm",
            "url": "https://www.chedong.com/phpMan.php/man/Shift/3pm/json"
        },
        {
            "name": "Info",
            "section": "3pm",
            "url": "https://www.chedong.com/phpMan.php/man/Info/3pm/json"
        },
        {
            "name": "JPEG",
            "section": "3pm",
            "url": "https://www.chedong.com/phpMan.php/man/JPEG/3pm/json"
        }
    ]
}