jhead(1) - man - phpMan

 


jhead(1)
NAME SYNOPSIS DESCRIPTION GENERAL METADATA OPTIONS DATE / TIME MANIPULATION OPTIONS THUMBNAIL MANIPULATION OPTIONS ROTATION OPTIONS OUTPUT VERBOSITY CONTROL FILE MATCHING OPTIONS SEE ALSO AUTHOR BUGS COPYING PERMISSIONS
JHEAD(1)                               General Commands Manual                              JHEAD(1)



NAME
       jhead - Digicam JPEG Exif header manipulation tool

SYNOPSIS
       jhead [ options ] [ file...  ]


DESCRIPTION
       jhead is used to display and manipulate data contained in the Exif header of JPEG images from
       digital cameras.  By default, jhead displays the more useful camera settings from the file in
       a user-friendly format.

       jhead  can  also  be  used  to manipulate some aspects of the image relating to JPEG and Exif
       headers, such as changing the internal timestamps, removing the  thumbnail,  or  transferring
       Exif  headers back into edited images after graphical editors deleted the Exif header.  jhead
       can also be used to launch other programs, similar in style to the  UNIX  find  command,  but
       much simpler.



GENERAL METADATA OPTIONS
       -te file
              Transplant  Exif  header from a JPEG (with Exif header) in file into the image that is
              manipulated.  This option is useful if you like to edit the photos but still want  the
              Exif  header  on  your  photos.  As most photo editing programs will wipe out the Exif
              header, this option can be used to re-copy them back from original copies after  edit‐
              ing the photos.


              This  feature  has  an interesting 'relative path' option for specifying the thumbnail
              name.  Whenever the <name> contains the characters '&i', will substitute the  original
              filename  for  this  name.  This  allows creating a jhead 'relative name' when doing a
              whole batch  of files. For example, the incantation:

              jhead -te originals/&i *.jpg

              would transfer the exif header for each .jpg file in the originals  directory  by  the
              same  name,  Both Win32 and most Unix shells treat the '&' character in a special way,
              so you have to put quotes around that command line option  for  the  '&'  to  even  be
              passed to the program.


       -dc    Delete  comment  field from the JPEG header.  Note that the comment is not part of the
              Exif header.

       -de    Delete the Exif header entirely.  Leaves other metadata sections intact.

       -di    Delete the IPTC section, if present.  Leaves other metadata sections intact.

       -dx    Delete the XMP section, if present.  Leaves other metadata sections intact.

       -du    Delete sections of jpeg that are not Exif, not comment, and otherwise not contributing
              to the image either - such as data that photoshop might leave in the image.

       -purejpg
              Delete  all  JPEG  sections that aren't necessary for rendering the image.  Strips any
              metadata that various applications may have left in the image.  A combination  of  the
              -de -dc and -du options.

       -mkexif
              Creates  minimal  exif  header.  Exif  header  contains date/time, and empty thumbnail
              fields only. Date/time set to file time by default. Use with -rgt option if  you  want
              the exif header to contain a thumbnail. Note that exif header creation is very limited
              at this time, and no other fields can be added to the exif header this way.

       -ce    Edit the JPEG header comment field (note, this  comment  field  is  outside  the  Exif
              structure and can be part of Exif and non Exif style JPEG images).

              A  temporary  file  containing the comment is created and a text editor is launched to
              edit the file.  The editor is specified in the EDITOR environment variable.   If  none
              is  specified  notepad  or vi are used under Windows and Unix respectively.  After the
              editor exits, the data is transferred back into the  image,  and  the  temporary  file
              deleted.

       -cs file
              Save comment section to a file

       -ci file
              Replace comment with text from file

       -cl string
              Replace comment with specified string from command line


DATE / TIME MANIPULATION OPTIONS
       -ft    Sets the file's system time stamp to what is stored in the Exif header.

       -dsft  Sets the Exif timestamp to the file's timestamp. Requires an Exif header to pre-exist.
              Use -mkexif option to create one if needed.

       -n[format_string]
              This option causes files to be renamed and/ or mmoved using the date information  from
              the  Exif  header  "DateTimeOriginal"  field.  If the file is not an Exif file, or the
              DateTimeOriginal does not contain a valid value, the file date is used.   If  the  new
              name  contains  a  '/',  this  will be interpreted as a new path, and the file will be
              moved accordingly.

              If the format_string is omitted, the file will be renamed to MMDD-HHMMSS.   Note  that
              this  scheme  doesn't  include  the year (I never have photos from different years to‐
              gether anyway).

              If a format_string is provided, it will be passed to the strftime function as the for‐
              mat string.  In addition, if the format string contains '%f', this will substitute the
              original name of the file (minus extension).  '%i' will substitute a sequence  number.
              Leading  zeros  can  be  specified like with printf - i.e. '%04i' pads the number to 4
              digits using leading zeros.

              If the name includes '/', this is interpreted as a new path for the file.  If the  new
              path does not exist, the path will be created.

              If  the target name already exists, the name will be appended with "a", "b", "c", etc,
              unless the name ends with a letter, in which case it will be appended with  "0",  "1",
              "2", etc.

              This  feature  is  especially  useful if more than one digital camera was used to take
              pictures of an event.  By renaming them to a scheme according to date, they will auto‐
              matically  appear  in  order  of taking in most directory listings and image browsers.
              Alternatively, if your image browser supports listing by file time, you  can  use  the
              -ft option to set the file time to the time the photo was taken.

              Some of the more useful arguments for strftime are:

              %H Hour in 24-hour format (00 - 23)
              %j Day of year as decimal number (001 - 366)
              %m Month as decimal number (01 - 12)
              %M Minute as decimal number (00 - 59)
              %S Second as decimal number (00 - 59)
              %w Weekday as decimal number (0 - 6; Sunday is 0)
              %y Year without century, as decimal number (00 - 99)
              %Y Year with century, as decimal number

              Example:

              jhead -n%Y%m%d-%H%M%S *.jpg

              This will rename files matched by *.jpg in the format YYYYMMDD-HHMMSS

              For  a  full  listing  of  strftime arguments, look up the strftime in them man pages.
              Note that some arguments to the strftime function (not listed  here)  produce  strings
              with  characters  such as ':' that may not be valid as part of a filename on some sys‐
              tems.


       -ta<+|-><timediff>
              Adjust time stored in the Exif header by h:mm forwards or backwards.  Useful when hav‐
              ing  taken  pictures  with  the wrong time set on the camera, such as after travelling
              across time zones, or when daylight savings time has changed.

              Examples:

              Add 1 hourand 5 minutes to the time
              jhead -ta+1:05

              Decrease time by one second:
              jhead -ta-0:0:1


              This option changes all Date/time fields in the exif header, including "DateTimeOrigi‐
              nal" (tag 0x9003) and "DateTimeDigitized" (tag 0x9004).

       -da<newdate>-<olddate>

              Works  like  -ta,  but for specifying large date offsets, to be used when fixing dates
              from cameras where the date was set incorrectly, such as having date and time reset by
              battery removal on some cameras

              Because  different  months  and years have different numbers of days in them, a simple
              offset for months, days, years would lead to unexpected results at  times.   The  time
              offset  is  thus specified as a difference between two dates, so that jhead can figure
              out exactly how many days the timestamp needs to be adjusted by, including leap  years
              and  daylight  savings time changes.  The dates are specified as yyyy:mm:dd.  For sub-
              day adjustments, a time of day can also be included, by specifying yyyy:nn:dd/hh:mm or
              yyyy:mm:dd/hh:mm:ss

              Examples:

              Year on camera was set to 2005 instead of 2004 for pictures taken in April
              jhead -da2004:03:01-2005:03:01

              Default camera date is 2002:01:01, and date was reset on 2005:05:29 at 11:21 am
              jhead -da2005:05:29/11:21-2002:01:01

       -ts    Sets  the  time  stored  in  the Exif header to what is specified on the command line.
              Time must be specified as: yyyy:mm:dd-hh:mm:ss

       -ds    Sets the date stored in the Exif header to what is specified on the command line.  Can
              be  used  to  set  date,  just  year  and  month, or just year.  Date is specified as:
              yyyy:mm:dd, yyyy:mm, or yyyy


THUMBNAIL MANIPULATION OPTIONS
       -dt    Delete thumbnails from the Exif header, but leave the interesting parts intact.   This
              option  truncates  the  thumbnail from the Exif header, provided that the thumbnail is
              the last part of the Exif header (which so far as I know is always  the  case).   Exif
              headers have a built-in thumbnail, which typically occupies around 10k of space.  This
              thumbnail is used by digital cameras.  Windows XP  may  also  use  this  thumbnail  if
              present  (but  it  doesn't  need  it).   The thumbnails are too small to use even full
              screen on the digicam's LCD.  I have not  encountered  any  adverse  side  effects  of
              deleting  the thumbnails, even from the software provided with my old Olympus digicam.
              Use with caution.


       -st file
              Save the integral thumbnail to file The thumbnail lives inside the Exif header, and is
              a  very  low-res JPEG image.  Note that making any changes to a photo, except for with
              some programs, generally wipes out the Exif header and with it the thumbnail.

              The thumbnail is too low res to really use for very much.

              This feature has an interesting 'relative path' option for  specifying  the  thumbnail
              name.  Whenever the name for file contains the characters  '&i', jhead will substitute
              the original filename for this name.  This allows creating a 'relative name' when  do‐
              ing a whole batch of files.  For example, the incantation:

              jhead -st thumbnails/&i *.jpg

              would  create  a  thumbnail for each .jpg file in the thumbnails directory by the same
              name, (provided that the thumbnails directory exists, of course).  Both Win32 and UNIX
              shells  treat the '&'character in a special way, so you have to put quotes around that
              command line option for the '&' to even be passed to the program.

              If a '-' is specified for the output file, the thumbnail  is  sent  to  stdout.  (UNIX
              build only)


       -rt    Replace  thumbnails  from the Exif header.  This only works if the exif header already
              contains a thumbnail, and the thumbnail is at the end of the header (both  always  the
              case if the photo came from a digital camera)

       -rgt size
              Regenerate  exif  thumbnail.   'size'  specifies maximum height or width of thumbnail.
              Relies on 'mogrify' program (from ImageMagick) to regenerate the thumbnail.  This only
              works if the image already contains a thumbnail.


ROTATION OPTIONS
       -autorot
              Using  the  'Orientation'  tag  of the Exif header, rotate the image so that it is up‐
              right.  The program jpegtran is used to perform the rotation. This program is  present
              in  most Linux distributions.  For windows, you need to get a copy of it.  After rota‐
              tion, the orientation tag of the Exif header is set to '1' (normal orientation).   The
              thumbnail  is  also rotated. Other fields of the Exif header, including dimensions are
              untouched, but the JPEG height/width are adjusted.  This feature is especially  useful
              with  newer  Canon cameras, that set the orientation tag automatically using a gravity
              sensor.

       -norot Clears the rotation field in the Exif header without altering the  image.   Useful  if
              the images were previously rotated without clearing the Exif rotation tag, as some im‐
              age browsers will auto rotate images when the rotation tag is set.  Sometimes,  thumb‐
              nails  and  rotation   tags  can  get  very out of sync from manipulation with various
              tools.  To reset it all use -norot with -rgt to clear this out.


OUTPUT VERBOSITY CONTROL
       -h     Displays summary of command line options.

       -v     Makes the program even more verbose than it already is.  Like DOS programs, and unlike
              UNIX  programs,  Jhead  gives  feedback as to what it is doing, even when nothing goes
              wrong.  Windows user that I am, when something doesn't give me feedback  for  20  sec‐
              onds, I assume its crashed.

       -q     No output on success, more like Unix programs.

       -V     Print version info and compilation date.  -exifmap Show a map of the bytes in the exif
              header. Useful when analyzing strange exif headers, not of much use  to  non  software
              developers.

       -se    Suppress error messages relating to corrupt Exif header structure.

       -c     Concise output.  This causes picture info to be summarized on one line instead of sev‐
              eral.  Useful for grep-ing through images, as well as  importing  into  spread  sheets
              (data is space delimited with quotes as text qualifier).


FILE MATCHING OPTIONS
       -model Restricts  processing  of  files to those whose camera model, as indicated by the Exif
              image information, contains the substring specified in the  argument  after  '-model'.
              For example, the following command will list only images that are from an S100 camera:

              jhead -model S100 *.jpg

              I  use  this option to restrict my JPEG recompensing to those images that came from my
              Canon S100 digicam, (see the -cmd option).

       -exonly
              Skip all files that don't have an Exif header.  Photos straight from a digital  camera
              have an Exif header, whereas many photo manipulation tools discard the Exif header.


       -proc  Skip  all  but  files  matching  process.   Specifying "-proc 0" for example will only
              process files with baseline encoding.  Specifying "-proc 2" will  only  process  files
              with progressive encoding.  This option is useful when converting files to progressive
              jpegs using jpegtran, to skip those files already encoded as progressive  jpegs.   For
              example, the following
               command  converts only files as baseline to progressive: jhead -proc 0 -cmd "jpegtran
              -progressive -outfile &o &i" *.jpg


       -cmd   Executes the specified command on each JPEG file to be processed.

              The Exif section of each file is read before running the command, and reinserted after
              the command finishes.

              The specified command invoked separately for each JPEG that is processed, even if mul‐
              tiple files are specified (explicitly or by wild card).

              Example use:

              Having a whole directory of photos from my S100, I run the following commands:

              jhead -cmd mogrify -quality 80 &i -model S100 *.jpg
              jhead -cmd jpegtran -progressive &i > &o *.jpg

              The first command mogrifies all JPEGs in the tree that indicate that they are  from  a
              Canon  S100  in  their  Exif  header to 80% quality at the same resolution.  This is a
              'lossy' process, so I only run it on files that are from the Canon, and  only  run  it
              once.   The  next  command  then takes a JPEGs and converts them to progressive JPEGs.
              The result is the same images, with no discernible differences,  stored  in  half  the
              space.  This produces substantial savings on some cameras.


SEE ALSO
       jpegtran(1), mogrify(1), rdjpgcom(1), wrjpgcom(1)

AUTHOR
       Matthias Wandel

BUGS
       After  jhead  runs a program to rotate or resize an image, the image dimensions and thumbnail
       in the Exif header are not adjusted.

       Modifying of Exif header data is very limited, as Jhead internally only has a read  only  im‐
       plementation  of  the file system contained in the Exif header.  For example, there is no way
       to replace the thumbnail or edit the Exif comment in the Exif header.  There is also  no  way
       to create minimal exif headers.

       Some  Canon  digital SLR cameras fail to adjust the effective sensor resolution when shooting
       at less than full resolution, causing jhead to incorrectly miscalculate the sensor width  and
       35mm equivalent focal length.  The same can result from resizing photos with Photoshop, which
       will manipulate parts of the exif header.  This is often reported as  a  bug  in  Jhead,  but
       Jhead can't do much about incorrect data.

       Send bug reports to matthias at woodgears dot ca


COPYING PERMISSIONS
       Jhead  is  'public  domain'.  You may freely copy jhead, and reuse part or all of its code in
       free or proprietary programs.   I do however request that you do not post my  e-mail  address
       in ways that spam robots can harvest it.



jhead 3.06                                   24 Mar 2021                                    JHEAD(1)

Generated by phpMan Author: Che Dong Under GNU General Public License - MarkDown | JSON | MCP | TLDR | Cheat
2026-05-29 21:03 @216.73.216.79 CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Valid XHTML 1.0 TransitionalValid CSS!

^_back to top