Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
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  op-
	    tion  can  be  used  to re-copy them back from original copies after
	    editing the photos.

	    This feature has an interesting 'relative path' option for	specify-
	    ing the thumbnail name.  Whenever the <name> contains the characters
	    '&i',  will substitute the original filename for this name. This al-
	    lows 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 pro-
	    gram.

     -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 in-
	    tact.

     -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 other-
	    wise not contributing to the image either - such as data that photo-
	    shop might leave in the image.

     -purejpg
	    Delete all JPEG sections that aren't necessary for rendering the im-
	    age.  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 thumb-
	    nail. 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 out-
	    side  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 moved 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 together anyway).

	    If a format_string is provided, it will be passed  to  the	strftime
	    function  as  the  format 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 num-
	    ber 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 automatically 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-HH-
	    MMSS

	    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 systems.

     -ta<+|-><timediff>
	    Adjust time stored in the Exif header by h:mm forwards or backwards.
	    Useful when having 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, includ-
	    ing  "DateTimeOriginal"  (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  cam-
	    eras

	    Because different months and years have different numbers of days in
	    them,  a  simple  offset for months, days, years would lead to unex-
	    pected 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 in-
	    cluded, 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 specify-
	    ing 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	doing  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 direc-
	    tory  by  the same name, (provided that the thumbnails directory ex-
	    ists, 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 re-
	    generate  the  thumbnail.  This only works if the image already con-
	    tains a thumbnail.

ROTATION OPTIONS
     -autorot
	    Using the 'Orientation' tag of the Exif header, rotate the image  so
	    that it is upright.  The program jpegtran is used to perform the ro-
	    tation.  This  program  is present in most Linux distributions.  For
	    windows, you need to get a copy of it.  After rotation, the orienta-
	    tion tag of the Exif header is set to '1' (normal orientation).  The
	    thumbnail is also rotated. Other fields of the Exif header,  includ-
	    ing  dimensions  are  untouched,  but  the JPEG height/width are ad-
	    justed.  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 clear-
	    ing the Exif rotation tag, as some image browsers will  auto  rotate
	    images  when the rotation tag is set.  Sometimes, thumbnails and ro-
	    tation 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 seconds, 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  head-
	    ers, 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 several.  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  indi-
	    cated  by  the Exif image information, contains the substring speci-
	    fied 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  manipula-
	    tion tools discard the Exif header.

     -proc  Skip all but files matching process.  Specifying "-proc 0" for exam-
	    ple  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  multiple 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 com-
	    mand 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 cam-
	    eras.

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  dimen-
     sions 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 implementation of the file system contained in the Exif header.
     For example, there is no way to replace the thumbnail or edit the Exif com-
     ment in the Exif header.  There is also no way to create minimal exif head-
     ers.

     Some  Canon digital SLR cameras fail to adjust the effective sensor resolu-
     tion when shooting at less than full resolution, causing  jhead  to  incor-
     rectly 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)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=jhead&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help