JPGExtra – JPG File Technical Info.

Technical info about hidden extras in JPG files

More in-depth technical information about the types of "extras" in JPG files and where they come from, plus some extraordinary examples that I've found during my research.

Exif Digital Camera Data

Example decoded Exif Data from one JPG file (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 serial numbers or dates that were in the above Exif data have been replaced with digit sequences (eg. 12345678, 12:34:56, etc).

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 apps, etc.

Typical Sizes of Exif Data

Often 232 bytes, sometimes 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!

Thumbnail Images

Example Thumbnail Data from one JPG file (scroll down for remainder)

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

NOTE: 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

Sample thumbnail-sized image

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 app doing the embedding.

Apps 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. Apps 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 app 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 whereas 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 website that allows visitors to contribute photos, it's entirely possible for an otherwise innocent looking JPG file to contain a heinous hidden payload.

ICC Color Profile Data

Example ICC Data from one JPG file (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 were originally used in the printing industry. Without getting too technical, the idea is to provide information on how colors should be handled on devices with different capabilities, in particular on scanners, computer monitors and printing presses. In theory, a JPG with an embedded color profile should look and print identically everywhere.

In practice, having a color profile embedded in a JPG file is more likely to make that image look different, depending on whether the color profile was correct for that image in the first place and whether it is viewed on a computer with color management configured correctly, a color-calibrated monitor, a browser or image viewing app that understands color profiles, etc.

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 JPG file (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 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 and media industries, 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, it seems that Adobe XMP Data segments are padded to a minimum size of 4,500 bytes. The majority of those 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.

Apple XML Data

Example XML Data from one JPG file (scroll down for remainder)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE plist (View Source for full doctype...)>
<plist version="1.0">
<dict>
<key>com.apple.print.PageFormat.PMHorizontalRes</key>
<dict>
<key>com.apple.print.ticket.creator</key>
<string>com.apple.printingmanager</string>
<key>com.apple.print.ticket.itemArray</key>
<array>
<dict>
<key>com.apple.print.PageFormat.PMHorizontalRes</key>
<real>72</real>
<key>com.apple.print.ticket.client</key>
<string>com.apple.printingmanager</string>
<key>com.apple.print.ticket.modDate</key>
<date>2004-01-01T12:34:56Z</date>
<key>com.apple.print.ticket.stateFlag</key>
<integer>0</integer>
</dict>
</array>
</dict>
<key>com.apple.print.PageFormat.PMOrientation</key>
<dict>
<key>com.apple.print.ticket.creator</key>
<string>com.apple.printingmanager</string>
<key>com.apple.print.ticket.itemArray</key>
<array>
<dict>
<key>com.apple.print.PageFormat.PMOrientation</key>
<integer>1</integer>
<key>com.apple.print.ticket.client</key>
<string>com.apple.printingmanager</string>
<key>com.apple.print.ticket.modDate</key>
<date>2004-01-01T12:34:56Z</date>
<key>com.apple.print.ticket.stateFlag</key>
<integer>0</integer>
</dict>
</array>
</dict>
<key>com.apple.print.PageFormat.PMScaling</key>
<dict>
<key>com.apple.print.ticket.creator</key>
<string>com.apple.printingmanager</string>
<key>com.apple.print.ticket.itemArray</key>
<array>
<dict>
<key>com.apple.print.PageFormat.PMScaling</key>
<real>1</real>
<key>com.apple.print.ticket.client</key>
<string>com.apple.printingmanager</string>
<key>com.apple.print.ticket.modDate</key>
<date>2004-01-01T12:34:56Z</date>
<key>com.apple.print.ticket.stateFlag</key>
<integer>0</integer>
</dict>
</array>
</dict>
<key>com.apple.print.PageFormat.PMVerticalRes</key>
<dict>
<key>com.apple.print.ticket.creator</key>
<string>com.apple.printingmanager</string>
<key>com.apple.print.ticket.itemArray</key>
<array>
<dict>
<key>com.apple.print.PageFormat.PMVerticalRes</key>
<real>72</real>
<key>com.apple.print.ticket.client</key>
<string>com.apple.printingmanager</string>
<key>com.apple.print.ticket.modDate</key>
<date>2004-01-01T12:34:56Z</date>
<key>com.apple.print.ticket.stateFlag</key>
<integer>0</integer>
</dict>
</array>
</dict>
<key>com.apple.print.PageFormat.PMVerticalScaling</key>
<dict>
<key>com.apple.print.ticket.creator</key>
<string>com.apple.printingmanager</string>
<key>com.apple.print.ticket.itemArray</key>
<array>
<dict>
<key>com.apple.print.PageFormat.PMVerticalScaling</key>
<real>1</real>
<key>com.apple.print.ticket.client</key>
<string>com.apple.printingmanager</string>
<key>com.apple.print.ticket.modDate</key>
<date>2004-01-01T12:34:56Z</date>
<key>com.apple.print.ticket.stateFlag</key>
<integer>0</integer>
</dict>
</array>
</dict>
<key>com.apple.print.subTicket.paper_info_ticket</key>
<dict>
<key>com.apple.print.PageFormat.PMAdjustedPageRect</key>
<dict>
<key>com.apple.print.ticket.creator</key>
<string>com.apple.printingmanager</string>
<key>com.apple.print.ticket.itemArray</key>
<array>
<dict>
<key>com.apple.print.PageFormat.PMAdjustedPageRect</key>
<array>
<real>0.0</real>
<real>0.0</real>
<real>734</real>
<real>576</real>
</array>
<key>com.apple.print.ticket.client</key>
<string>com.apple.printingmanager</string>
<key>com.apple.print.ticket.modDate</key>
<date>2004-01-01T12:34:56Z</date>
<key>com.apple.print.ticket.stateFlag</key>
<integer>0</integer>
</dict>
</array>
</dict>
<key>com.apple.print.PageFormat.PMAdjustedPaperRect</key>
<dict>
<key>com.apple.print.ticket.creator</key>
<string>com.apple.printingmanager</string>
<key>com.apple.print.ticket.itemArray</key>
<array>
<dict>
<key>com.apple.print.PageFormat.PMAdjustedPaperRect</key>
<array>
<real>-18</real>
<real>-18</real>
<real>774</real>
<real>594</real>
</array>
<key>com.apple.print.ticket.client</key>
<string>com.apple.printingmanager</string>
<key>com.apple.print.ticket.modDate</key>
<date>2004-01-01T12:34:56Z</date>
<key>com.apple.print.ticket.stateFlag</key>
<integer>0</integer>
</dict>
</array>
</dict>
<key>com.apple.print.PaperInfo.PMPaperName</key>
<dict>
<key>com.apple.print.ticket.creator</key>
<string>com.apple.print.pm.PostScript</string>
<key>com.apple.print.ticket.itemArray</key>
<array>
<dict>
<key>com.apple.print.PaperInfo.PMPaperName</key>
<string>na-letter</string>
<key>com.apple.print.ticket.client</key>
<string>com.apple.print.pm.PostScript</string>
<key>com.apple.print.ticket.modDate</key>
<date>2003-12-31T12:34:56Z</date>
<key>com.apple.print.ticket.stateFlag</key>
<integer>1</integer>
</dict>
</array>
</dict>
<key>com.apple.print.PaperInfo.PMUnadjustedPageRect</key>
<dict>
<key>com.apple.print.ticket.creator</key>
<string>com.apple.print.pm.PostScript</string>
<key>com.apple.print.ticket.itemArray</key>
<array>
<dict>
<key>com.apple.print.PaperInfo.PMUnadjustedPageRect</key>
<array>
<real>0.0</real>
<real>0.0</real>
<real>734</real>
<real>576</real>
</array>
<key>com.apple.print.ticket.client</key>
<string>com.apple.printingmanager</string>
<key>com.apple.print.ticket.modDate</key>
<date>2004-01-01T12:34:56Z</date>
<key>com.apple.print.ticket.stateFlag</key>
<integer>0</integer>
</dict>
</array>
</dict>
<key>com.apple.print.PaperInfo.PMUnadjustedPaperRect</key>
<dict>
<key>com.apple.print.ticket.creator</key>
<string>com.apple.print.pm.PostScript</string>
<key>com.apple.print.ticket.itemArray</key>
<array>
<dict>
<key>com.apple.print.PaperInfo.PMUnadjustedPaperRect</key>
<array>
<real>-18</real>
<real>-18</real>
<real>774</real>
<real>594</real>
</array>
<key>com.apple.print.ticket.client</key>
<string>com.apple.printingmanager</string>
<key>com.apple.print.ticket.modDate</key>
<date>2004-01-01T12:34:56Z</date>
<key>com.apple.print.ticket.stateFlag</key>
<integer>0</integer>
</dict>
</array>
</dict>
<key>com.apple.print.PaperInfo.ppd.PMPaperName</key>
<dict>
<key>com.apple.print.ticket.creator</key>
<string>com.apple.print.pm.PostScript</string>
<key>com.apple.print.ticket.itemArray</key>
<array>
<dict>
<key>com.apple.print.PaperInfo.ppd.PMPaperName</key>
<string>US Letter</string>
<key>com.apple.print.ticket.client</key>
<string>com.apple.print.pm.PostScript</string>
<key>com.apple.print.ticket.modDate</key>
<date>2003-12-31T12:34:56Z</date>
<key>com.apple.print.ticket.stateFlag</key>
<integer>1</integer>
</dict>
</array>
</dict>
<key>com.apple.print.ticket.APIVersion</key>
<string>00.20</string>
<key>com.apple.print.ticket.privateLock</key>
<false />
<key>com.apple.print.ticket.type</key>
<string>com.apple.print.PaperInfoTicket</string>
</dict>
<key>com.apple.print.ticket.APIVersion</key>
<string>00.20</string>
<key>com.apple.print.ticket.privateLock</key>
<false />
<key>com.apple.print.ticket.type</key>
<string>com.apple.print.PageFormatTicket</string>
</dict>
</plist>

NOTE: Due to potential privacy implications, any serial numbers or dates that were in the above XML data have been replaced with digit sequences (eg. 12345678, 12:34:56, etc).

Typical Usage of Apple XML Data

Apple XML Data

Most of the Apple XML data that I've seen appears to be related to print formatting. To me, it seems incredibly wasteful that this seemingly basic information should consume so many thousands of bytes of space in the file.

Typical Sizes of Apple XML Data

Around 7,500 bytes (ie. major contributor of "extras").

Largest Apple XML Data

The largest Apple XML Data segment I've found was around 8,000 bytes.

Text Comments

Examples of Text Comments from various JPG files (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 websites 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 app that was used to create the image, which only serves the interests of those software companies. For example, a company could run a web crawling app that inspects images from all over the Internet to determine the "market penetration" of their particular app.

Most Common Text Comments

During my research, the most common text "signature" was probably from the various versions of "Adobe Photoshop", the app of choice for most serious graphics professionals. The next most common appeared to be from "gd-jpeg".

Interestingly, I also discovered signatures from many other JPG file optimization apps, 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 "extras").

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 JPG file with the comment intact for future reference.

I've also encountered numerous large comments that contained hundreds of blank or invalid characters, for which I haven't yet found an explanation.

Still To Come...

As I gradually find time to add to this section, the following "extras" will also be documented:

  • Photoshop Data
  • Digimarc Data
  • Padding after end of data
  • Other obscure "extras"

Sponsored Links