Ian Fieggen Ian's Software Site Ian's JPGExtra program
Ian's Software Site - Minimalist software programs that are tiny yet very powerful
JPG File Technical Information
Optimize JPG files with no loss of image quality by cleanly removing extras JPGExtra's only job is to remove "extras" without going into details. For those curious about what those extras are and where they come from, this page gives some more in-depth technical information, plus highlights some extraordinary examples that I've found during my research.
NEW RELEASE! Version 2 has just been publicly released!

Text Comments
Examples of Text Comments (scroll down for remainder):
  • Copyright © 2006 by ...
  • ACD Systems Digital Imaging
  • File written by Adobe Photoshop 4.0
  • Compressed with JPEG Optimizer 3.03, www.xat.com
  • CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 70
  • The JPEG Wizard, Optimized by Pegasus Imaging Corp, http://www.jpg.com
  • File written with CompuPic(R) - Photodex Corporation (http://www.photodex.com)
  • Optimized by Pegasus Imaging Corp, http://www.jpg.com, Compression by Pegasus Imaging Corp.
  • This file was created by
    Graphic Workshop for Windows 1.1r

    from Alchemy Mindworks Inc.
    P.O. Box 500
    Beeton, Ontario
    L0G 1A0 CANADA

    This image may have been created by
    a party other than Alchemy Mindworks Inc.

    Use no hooks
  • PUBLIC INFORMATION OFFICE
    JET PROPULSION LABORATORY
    CALIFORNIA INSTITUTE OF TECHNOLOGY
    NATIONAL AERONAUTICS AND SPACE ADMINISTRATION
    PASADENA, CALIFORNIA 91109. TELEPHONE (2l3) 354-5011

    PHOTO CAPTION
    Aug. 13, 1981
    P-23883C/BW
    S-2-5

    NASA's Voyager 2 took this photograph of Saturn on July 21, 1981, when the spacecraft was 33.9 million kilometers (21 million miles) from the planet. Two bright, presumably convective cloud patterns are visible in the mid-northern hemisphere and several dark spoke-like features can be seen in the broad B-ring (left of planet). The moons Rhea and dione appear as blue dots to the south and southeast of Saturn, respectively. Voyager 2 made its closest approach to Saturn on Aug. 25, 1981. The Voyager project is managed for NASA by the Jet Propulsion Laboratory, Pasadena, Calif. This image was converted directly from digital data to GIF format.

    #####
Typical Usage of Text Comments:
Text comments are one of the most traditional and useful additions to an image, provided of course that the comment is actually viewed or otherwise accessed in some way. For normal web browsing, this is not the case.

One of the most obvious uses for a text comment is to add Copyright © information, yet this is very rarely done. Most web sites nowadays prefer to brand their images with visible copyright text, usually in one of the bottom corners.

Instead, the majority of comments are simply a "signature" from the program that was used to create the image, which only serves the interests of those software companies. For example, a company could run a program that inspects images from all over the Internet to determine the "market penetration" of their particular program.
Most Common Text Comments:
During my research, the most common signature was probably from the various versions of "Adobe Photoshop", the program of choice for most serious graphics professionals. Next most common appeared to be from "gd-jpeg".

Interestingly, I also discovered signatures from many other JPG file optimization programs, which certainly seems to go against the spirit of "optimization"!
Typical Sizes of Text Comments:
Around 30 to 80 bytes; rarely larger (ie. very minor contributor of "extra").
Largest Text Comment:
One of the largest comments I encountered was within an image of Saturn, taken from NASA's Voyager 2 spacecraft. Although it was over 1,000 bytes long, it contained a lot of useful information about the image, so I kept the image with the comment intact for future reference.

I've also encountered numerous large comments that contained hundreds of blank or invalid characters, the reasoning behind which I can only guess!

Thumbnail Images
Ian Fieggen, programmer of JPGExtra
Granite Island JPG file (small)
Spring Blossoms JPG file (small)
Example Thumbnail Data from one image:
FF D8 FF E0 00 10 4A 46 49 46 00 01 02 01 00 48
00 48 00 00 FF ED 00 0C 41 64 6F 62 65 5F 43 4D
00 01 FF EE 00 0E 41 64 6F 62 65 00 64 80 00 00
00 01 FF DB 00 84 00 0C 08 08 08 09 08 0C 09 09
0C 11 0B 0A 0B 11 15 0F 0C 0C 0F 15 18 13 13 15
13 13 18 11 0C 0C 0C 0C 0C 0C 11 0C 0C 0C 0C 0C
0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C
0C 0C 0C 0C ...

      (around 150 more rows of JPG data)

                                ... 5F D3 E6 64
C9 EF D8 E2 BB D6 AB F1 F9 52 5D D4 33 6D 78 75
97 3C 91 C4 1D B1 27 7F 0C DB F9 C5 5D E9 DD 77
37 16 F6 3A CB 9F 75 24 81 6B 2C 71 77 B4 E8 FD
85 C7 73 5D B5 65 39 21 2A 63 ED F0 EB 5C 2C 71
F7 38 B4 BB 77 3E B4 65 FA 99 ED C6 69 F6 63 36
0C 7E FB FD EF FF 00 A3 B1 63 4A 89 F3 48 23 8E
B8 05 1B 1D FF 00 35 64 24 CC D8 AF 0F C9 FF D9
Most thumbnail data is stored in the same format as the data of a full-sized JPG file. It's basically a small JPG file embedded within a large JPG file.
Typical Usage of Thumbnail Images:
These are miniature versions of the main image, usually around 100 pixels wide or high, that are often added by digital cameras or image editing software (eg. Adobe Photoshop) to provide quick previews prior to opening the full-sized image.
Embedding Thumbnail Images:
There are various ways that these small thumbnail images can be "embedded" within the larger, full-sized image, which depends mainly on the program doing the embedding.

Programs like Adobe Photoshop generally add their own data segment containing a thumbnail. Digital cameras often embed the thumbnail in the Exif camera information segment. One of my digital cameras even appends a second, higher resolution "thumbnail" to the end of the JPG file!
Thumbnail Image Formats:
In the very earliest JPG files, it was common to have thumbnails embedded in an un-compressed format. Programs that couldn't decode the JPG compression would still be able to display the thumbnail. As the JPG format became more accepted, these have gradually given way to the more common method of embedding them in JPG format.

Interestingly, if the main JPG file contains a Text Comment, the thumbnail image often contains the identical comment, thus doubling that "extra" amount!
Typical Sizes of Thumbnail Images:
Around 3,000 to 10,000 bytes (ie. major contributor of "extras").
Largest Thumbnail Images:
I've found thumbnails occupying 30,000 bytes or more, either because they were very high-res or because they were uncompressed or had a very low compression setting.

Countless JPG files nowadays actually contain two or more thumbnail images: one or more from the camera, and one or more from any program that has subsequently re-written the file. These are often identical but sometimes different. For example, one may be small and the other large, or one may be a thumbnail of the original image whilst the other is a thumbnail of the image after modification by the image editing software.
Thumbnail Image Privacy Implications:
There are serious privacy implications if a thumbnail image differs from the main image. For example, a JPG file containing a face that has been blurred to protect a person's identity could actually contain a thumbnail image with a small but recognisable face that hasn't been blurred.

Perhaps more worrying is the potential for such embedded images to portray illicit content, most disturbingly that of a sexual nature. On any web site that allows visitors to contribute photos, it's entirely possible for an otherwise innocent looking JPG file to contain a heinous hidden payload.

Exif Digital Camera Data
Example decoded Exif Data from one image (scroll down for remainder):
ImageDescription - DCF 1.0
Make - Minolta Co., Ltd.
Model - DiMAGE 7i
Orientation - Top left
XResolution - 72
YResolution - 72
ResolutionUnit - Inch
Software - Ver.1.10e
DateTime - 2006:12:12 12:34:56
YCbCrPositioning - Centered
ExifOffset - 280
ExposureTime - 1/90 seconds
FNumber - 3.50
ExposureProgram - Normal program
ISOSpeedRatings - 200
ExifVersion - 0220
DateTimeOriginal - 2006:12:12 12:34:56
DateTimeDigitized - 2006:12:12 12:34:56
ComponentsConfiguration - YCbCr
BrightnessValue - 4.50
ExposureBiasValue - 1.00
MaxApertureValue - F 3.36
MeteringMode - Multi-segment
LightSource - Auto
Flash - Flash fired, compulsory flash mode
FocalLength - 16.21 mm
FlashPixVersion - 0100
ColorSpace - sRGB
ExifImageWidth - 2560
ExifImageHeight - 1920
InteroperabilityOffset - 13038
CustomRendered - Custom process
ExposureMode - Auto
WhiteBalance - Auto
DigitalZoomRatio - 0 x
FocalLengthIn35mmFilm - 65 mm
SceneCaptureType - Standard
GainControl - Low gain up
Contrast - Normal
Saturation - Normal
Sharpness - Normal
SubjectDistanceRange - Close view
NOTE: Due to potential privacy implications, any dates & times that were in the above Exif data have been replaced with digit sequences (eg. 12:34:56).
Typical Usage of Exif Data:
Digital camera, which adds Exif data Digital cameras generally store all sorts of information about the photo, including make and model of camera, date and time taken, exposure settings, focal distance, etc. This info can then be used elsewhere, such as by photo labs, printers, image cataloguing programs, etc.
Typical Sizes of Exif Data:
Often 232 bytes, or thousands of bytes if a Thumbnail Image is embedded (ie. either medium or major contributor of "extras").
Largest Exif Data:
I've found Exif Data segments of almost 50,000 bytes, containing thumbnail images padded with a large number of zero bytes.
Exif Data Format:
Full details of the Exif Specification can be found Here.
Exif Data Privacy Implications:
The make and model of the camera may be of interest to either burglars or divorce lawyers. The focal length could be used to determine whether a paparazzi photographer was trespassing. Dates and times could be used to track someone's movements. Those are just three examples of possible privacy implications!

ICC Color Profile Data
Example ICC Data from one image (scroll down for remainder):
FF E2 0C 58 49 43 43 5F-50 52 4F 46 49 4C 45 00
01 01 00 00 0C 48 4C 69-6E 6F 02 10 00 00 6D 6E
74 72 52 47 42 20 58 59-5A 20 07 CE 00 02 00 09
00 06 00 31 00 00 61 63-73 70 4D 53 46 54 00 00
00 00 49 45 43 20 73 52-47 42 00 00 00 00 00 00
00 00 00 00 00 00 00 00-F6 D6 00 01 00 00 00 00
D3 2D 48 50 20 20 00 00-00 00 00 00 00 00 00 00
00 00 00 00 ...

(around 180 more rows of ICC Color Profile Data)

                                ... E0 BD E1 44
E1 CC E2 53 E2 DB E3 63 E3 EB E4 73 E4 FC E5 84
E6 0D E6 96 E7 1F E7 A9 E8 32 E8 BC E9 46 E9 D0
EA 5B EA E5 EB 70 EB FB EC 86 ED 11 ED 9C EE 28
EE B4 EF 40 EF CC F0 58 F0 E5 F1 72 F1 FF F2 8C
F3 19 F3 A7 F4 34 F4 C2 F5 50 F5 DE F6 6D F6 FB
F7 8A F8 19 F8 A8 F9 38 F9 C7 FA 57 FA E7 FB 77
FC 07 FC 98 FD 29 FD BA FE 4B FE DC FF 6D FF FF
Typical Usage of ICC Color Profile Data:
ICC Color Profile Data ICC Colour Profiles are generally used in the printing industry. Without getting too technical, the idea is to provide information on how colours should be handled on devices with different capabilities, in particular on scanners, computer screens and printing presses.
Typical Sizes of ICC Color Profile Data:
Usually 3,160 bytes; occasionally much larger (ie. medium contributor of "extras").
Largest ICC Color Profile Data:
The largest ICC Color Profile I've found was around 174,000 bytes. Ironically, this was embedded in a particularly small image of only 120 x 85 pixels. After processing that JPG file with JPGExtra, it was reduced from 202,412 bytes to a much more sensible 3,991 bytes, a total saving of 98%!
ICC Color Profile Data Format:
Full details of the ICC Color Profile Data Specification can be found Here on the International Color Consortium web-site.

Adobe XMP Data
Example XMP Data from one image (scroll down for remainder):
<?xpacket begin='123' id='123456789012345678901234'?>
<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-28, framework 1.6'>
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>

 <rdf:Description rdf:about='uuid:12345678-1234-1234-1234-123456789012'
  xmlns:crs='http://ns.adobe.com/camera-raw-settings/1.0/'>
  <crs:Version>2.2</crs:Version>
  <crs:RawFileName>V1234567.CRW</crs:RawFileName>
  <crs:WhiteBalance>As Shot</crs:WhiteBalance>
  <crs:Exposure>0.00</crs:Exposure>
  <crs:Shadows>0</crs:Shadows>
  <crs:Brightness>50</crs:Brightness>
  <crs:Contrast>+25</crs:Contrast>
  <crs:Saturation>0</crs:Saturation>
  <crs:Sharpness>25</crs:Sharpness>
  <crs:LuminanceSmoothing>0</crs:LuminanceSmoothing>
  <crs:ColorNoiseReduction>25</crs:ColorNoiseReduction>
  <crs:ChromaticAberrationR>0</crs:ChromaticAberrationR>
  <crs:ChromaticAberrationB>0</crs:ChromaticAberrationB>
  <crs:VignetteAmount>0</crs:VignetteAmount>
  <crs:ShadowTint>0</crs:ShadowTint>
  <crs:RedHue>0</crs:RedHue>
  <crs:RedSaturation>0</crs:RedSaturation>
  <crs:GreenHue>0</crs:GreenHue>
  <crs:GreenSaturation>0</crs:GreenSaturation>
  <crs:BlueHue>0</crs:BlueHue>
  <crs:BlueSaturation>0</crs:BlueSaturation>
 </rdf:Description>

 <rdf:Description rdf:about='uuid:12345678-1234-1234-1234-123456789012'
  xmlns:exif='http://ns.adobe.com/exif/1.0/'>
  <exif:ExposureTime>1/100</exif:ExposureTime>
  <exif:ShutterSpeedValue>6643856/1000000</exif:ShutterSpeedValue>
  <exif:FNumber>11/1</exif:FNumber>
  <exif:ApertureValue>6918863/1000000</exif:ApertureValue>
  <exif:ExposureProgram>1</exif:ExposureProgram>
  <exif:DateTimeOriginal>2004-12-12T12:34:56-12:00</exif:DateTimeOriginal>
  <exif:ExposureBiasValue>0/1</exif:ExposureBiasValue>
  <exif:MaxApertureValue>16875/10000</exif:MaxApertureValue>
  <exif:MeteringMode>2</exif:MeteringMode>
  <exif:FocalLength>50/1</exif:FocalLength>
  <exif:ColorSpace>4294967295</exif:ColorSpace>
  <exif:PixelXDimension>794</exif:PixelXDimension>
  <exif:PixelYDimension>1200</exif:PixelYDimension>
  <exif:ISOSpeedRatings>
   <rdf:Seq>
    <rdf:li>100</rdf:li>
   </rdf:Seq>
  </exif:ISOSpeedRatings>
  <exif:Flash rdf:parseType='Resource'>
   <exif:Fired>True</exif:Fired>
   <exif:Return>0</exif:Return>
   <exif:Mode>0</exif:Mode>
   <exif:Function>False</exif:Function>
   <exif:RedEyeMode>False</exif:RedEyeMode>
  </exif:Flash>
 </rdf:Description>

 <rdf:Description rdf:about='uuid:12345678-1234-1234-1234-123456789012'
  xmlns:aux='http://ns.adobe.com/exif/1.0/aux/'>
  <aux:SerialNumber>1234567890</aux:SerialNumber>
  <aux:Lens>50.0 mm</aux:Lens>
 </rdf:Description>

 <rdf:Description rdf:about='uuid:12345678-1234-1234-1234-123456789012'
  xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
 </rdf:Description>

 <rdf:Description rdf:about='uuid:12345678-1234-1234-1234-123456789012'
  xmlns:photoshop='http://ns.adobe.com/photoshop/1.0/'>
  <photoshop:History></photoshop:History>
 </rdf:Description>

 <rdf:Description rdf:about='uuid:12345678-1234-1234-1234-123456789012'
  xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
  <tiff:Make>Canon</tiff:Make>
  <tiff:Model>Canon EOS 10D</tiff:Model>
  <tiff:Orientation>1</tiff:Orientation>
  <tiff:XResolution>240/1</tiff:XResolution>
  <tiff:YResolution>240/1</tiff:YResolution>
  <tiff:ResolutionUnit>2</tiff:ResolutionUnit>
 </rdf:Description>

 <rdf:Description rdf:about='uuid:12345678-1234-1234-1234-123456789012'
  xmlns:xap='http://ns.adobe.com/xap/1.0/'>
  <xap:ModifyDate>2004-12-12T12:34:56-12:00</xap:ModifyDate>
  <xap:CreateDate>2004-12-12T12:34:56-12:00</xap:CreateDate>
  <xap:MetadataDate>2004-12-12T12:34:56-12:00</xap:MetadataDate>
  <xap:CreatorTool>Adobe Photoshop CS Macintosh</xap:CreatorTool>
 </rdf:Description>

 <rdf:Description rdf:about='uuid:12345678-1234-1234-1234-123456789012'
  xmlns:stRef='http://ns.adobe.com/xap/1.0/sType/ResourceRef#'
  xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/'>
  <xapMM:DerivedFrom rdf:parseType='Resource'>
   <stRef:instanceID>uuid:12345678-1234-1234-1234-123456789012</stRef:instanceID>
   <stRef:documentID>adobe:docid:photoshop:12345678-1234-1234-1234-123456789012</stRef:documentID>
  </xapMM:DerivedFrom>
  <xapMM:DocumentID>adobe:docid:photoshop:12345678-1234-1234-1234-123456789012</xapMM:DocumentID>
 </rdf:Description>

 <rdf:Description rdf:about='uuid:12345678-1234-1234-1234-123456789012'
  xmlns:dc='http://purl.org/dc/elements/1.1/'>
  <dc:format>image/jpeg</dc:format>
 </rdf:Description>

</rdf:RDF>
</x:xmpmeta>
NOTE: Due to potential privacy implications, any serial numbers or dates that were in the above XMP data have been replaced with digit sequences (eg. 12345678, 12:34:56, etc).
Typical Usage of Adobe XMP Data:
Adobe's XMP (Extensible Metadata Platform), or its predecessor XAP (eXtensible Authoring and Publishing), is a labeling technology that allows you to embed data about a file, known as metadata, into the file itself.

XMP Data is mainly of benefit in the publishing industry, where having information about an image embedded in the image file can be invaluable (eg. copyright, ownership, origin, price, keywords, etc.)
Typical Sizes of Adobe XMP Data:
Around 4,500 to 5,500 bytes (ie. major contributor of "extras").
Largest Adobe XMP Data:
The largest Adobe XMP Data segment I've found was around 8,500 bytes.

Interestingly, there was little difference between the smallest and largest amounts because they seem to be "padded" to a minimum size of 4,500 bytes. The majority of JPG files containing XMP Data segments that I examined were more or less empty, comprising little or no actual data followed by thousands of bytes of blank spaces!
Adobe XMP Data Format:
Full details of Adobe's XMP Specification can be found Here.
Adobe XMP Data Privacy Implications:
Generally speaking, XMP Data is intended to carry information, which is usually specifically added by the user. However, even when a user has not chosen to "add" any information, the XMP Data often duplicates the Exif Data, with therefore the same privacy implications. In addition, various embedded identification numbers may be traceable to an individual computer, person or organization.

Still To Come...
As I gradually find time to add to this section, the following "extras" will also be documented:
  • Apple XML Data (around 7,500 bytes)
  • Photoshop Data
  • Digimarc Data
  • Padding after end of data
  • Other obscure "extras"

UNDER CONSTRUCTION

Previous Page Top of Page Next Page

This page last updated: 04-Jul-2008. Copyright © 2006-2008 by Ian W. Fieggen. All rights reserved.
Sponsored Links