<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Deciphering a jpg file in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25013#M4308</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here is the modified file:&lt;/P&gt;&lt;BR /&gt;&lt;IMG src="https://communities.sas.com/t5/image/serverpage/image-id/11517i6C681FB9E888D532/image-size/large?v=1.0&amp;amp;px=600" border="0" alt="pic550.jpg" title="pic550.jpg" /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 06 Oct 2011 22:24:32 GMT</pubDate>
    <dc:creator>art297</dc:creator>
    <dc:date>2011-10-06T22:24:32Z</dc:date>
    <item>
      <title>Deciphering a jpg file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25008#M4303</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;FriedEgg's recent thread on ciphering, and his revealing that he is familiar with Perl, led me to post this question here.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;A jpg file (at least those that I'm interested in) follow a set of specifications known as exif (see, e.g., &lt;A href="http://www.exif.org/Exif2-2.PDF"&gt;http://www.exif.org/Exif2-2.PDF&lt;/A&gt; ).&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;And, the entire task has already been implemented in Perl (see, e.g., &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="http://www.sno.phy.queensu.ca/~phil/exiftool/"&gt;http://www.sno.phy.queensu.ca/~phil/exiftool/&lt;/A&gt;&lt;SPAN&gt; .. which, by the way, does everyting I want to do and more and the Perl source code is available at that site).&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Unfortunately, I don't know Perl, don't think the specifications were designed so that a psychologist would know what they mean, and I can't figure out where to begin.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What I would like to do, using SAS, is simply parse out the date a picture was taken, the gps coordinates (if they exist), and the subject.(if it exists).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Anyone up for a challenge?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Oct 2011 19:47:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25008#M4303</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2011-10-06T19:47:52Z</dc:date>
    </item>
    <item>
      <title>Re: Deciphering a jpg file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25009#M4304</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Can I cheat and just make SAS use pipes from perl? &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://communities.sas.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I will look into it, I always like a good challenge!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Update: I am going to be working with this sample file: &lt;A href="http://www.exif.org/samples/sanyo-vpcsx550.jpg"&gt;http://www.exif.org/samples/sanyo-vpcsx550.jpg&lt;/A&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Oct 2011 19:58:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25009#M4304</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2011-10-06T19:58:30Z</dc:date>
    </item>
    <item>
      <title>Deciphering a jpg file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25010#M4305</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Has to be able to work on SAS on all operating systems and nothing 3rd party can be brought in.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Oct 2011 20:01:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25010#M4305</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2011-10-06T20:01:34Z</dc:date>
    </item>
    <item>
      <title>Re: Deciphering a jpg file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25011#M4306</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Looks like this file may not contain all the information you are looking for, but it does have the datetime of exposure and a comment, so I will work of extracting those two pieces of information:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Filename : sanyo-vpcsx550[1].jpg&lt;/P&gt;&lt;P&gt;JFIF_APP1 : Exif&lt;/P&gt;&lt;P&gt;Comment : Et voila. For starters we have warmed goats cheese in breadcrumbs on a herb salad base...&lt;/P&gt;&lt;P&gt;Main Information&lt;/P&gt;&lt;P&gt;ImageDescription : SANYO DIGITAL CAMERA&lt;/P&gt;&lt;P&gt;Make : SANYO Electric Co.,Ltd.&lt;/P&gt;&lt;P&gt;Model : SX113&lt;/P&gt;&lt;P&gt;Orientation : left-hand side&lt;/P&gt;&lt;P&gt;XResolution : 72/1&lt;/P&gt;&lt;P&gt;YResolution : 72/1&lt;/P&gt;&lt;P&gt;ResolutionUnit : Inch&lt;/P&gt;&lt;P&gt;Software : V113p-73&lt;/P&gt;&lt;P&gt;DateTime : 2000:11:18 21:14:19&lt;/P&gt;&lt;P&gt;YCbCrPositioning : co-sited&lt;/P&gt;&lt;P&gt;ExifInfoOffset : 284&lt;/P&gt;&lt;P&gt;Sub Information&lt;/P&gt;&lt;P&gt;ExposureTime : 1/48.3Sec&lt;/P&gt;&lt;P&gt;FNumber : F2.4&lt;/P&gt;&lt;P&gt;ISOSpeedRatings : 400&lt;/P&gt;&lt;P&gt;ExifVersion : 0210&lt;/P&gt;&lt;P&gt;DateTimeOriginal : 2000:11:18 21:14:19&lt;/P&gt;&lt;P&gt;DateTimeDigitized : 2000:11:18 21:14:19&lt;/P&gt;&lt;P&gt;ComponentConfiguration : YCbCr&lt;/P&gt;&lt;P&gt;CompressedBitsPerPixel : 17/10 (bit/pixel)&lt;/P&gt;&lt;P&gt;ExposureBiasValue : EV0.0&lt;/P&gt;&lt;P&gt;MaxApertureValue : F2.8&lt;/P&gt;&lt;P&gt;MeteringMode : CenterWeightedAverage&lt;/P&gt;&lt;P&gt;LightSource : Unidentified&lt;/P&gt;&lt;P&gt;Flash : Not fired&lt;/P&gt;&lt;P&gt;FocalLength : 6.00(mm)&lt;/P&gt;&lt;P&gt;MakerNote : SANYO Format : 178Bytes (Offset:904)&lt;/P&gt;&lt;P&gt;UserComment :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;FlashPixVersion : 0100&lt;/P&gt;&lt;P&gt;ColorSpace : sRGB&lt;/P&gt;&lt;P&gt;ExifImageWidth : 640&lt;/P&gt;&lt;P&gt;ExifImageHeight : 480&lt;/P&gt;&lt;P&gt;ExifInteroperabilityOffset : 862&lt;/P&gt;&lt;P&gt;FileSource : DSC&lt;/P&gt;&lt;P&gt;Vendor Original Information&lt;/P&gt;&lt;P&gt;Unknown (0200)4,3 : 0,0,0&lt;/P&gt;&lt;P&gt;Unknown (0201)3,1 : 258&lt;/P&gt;&lt;P&gt;Macro mode : Off&lt;/P&gt;&lt;P&gt;Unknown (0203)3,1 : 0&lt;/P&gt;&lt;P&gt;Digital Zoom : Off&lt;/P&gt;&lt;P&gt;Unknown (0F00)4,18 : 0,0,1411907584,-1038942208,-134021120,0,0,-1995767808,-524338785,1562902528,72532304,0,0,0,-1051707323,0,0,-805288192&lt;/P&gt;&lt;P&gt;ExifR98&lt;/P&gt;&lt;P&gt;ExifR : R98&lt;/P&gt;&lt;P&gt;Version : 0100&lt;/P&gt;&lt;P&gt;Thumbnail Information&lt;/P&gt;&lt;P&gt;Compression : OLDJPEG&lt;/P&gt;&lt;P&gt;XResolution : 72/1&lt;/P&gt;&lt;P&gt;YResolution : 72/1&lt;/P&gt;&lt;P&gt;ResolutionUnit : Inch&lt;/P&gt;&lt;P&gt;JPEGInterchangeFormat : 1070&lt;/P&gt;&lt;P&gt;JPEGInterchangeFormatLength : 13234&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Oct 2011 20:07:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25011#M4306</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2011-10-06T20:07:53Z</dc:date>
    </item>
    <item>
      <title>Re: Deciphering a jpg file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25012#M4307</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm not sure if I can post a jpg here, but I'll add some coordinates and subject and try to post it here.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Oct 2011 20:14:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25012#M4307</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2011-10-06T20:14:50Z</dc:date>
    </item>
    <item>
      <title>Re: Deciphering a jpg file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25013#M4308</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here is the modified file:&lt;/P&gt;&lt;BR /&gt;&lt;IMG src="https://communities.sas.com/t5/image/serverpage/image-id/11517i6C681FB9E888D532/image-size/large?v=1.0&amp;amp;px=600" border="0" alt="pic550.jpg" title="pic550.jpg" /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Oct 2011 22:24:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25013#M4308</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2011-10-06T22:24:32Z</dc:date>
    </item>
    <item>
      <title>Re: Deciphering a jpg file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25014#M4309</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;There are my findings at this point:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;A marker for EXIF data is the hexidecimal value 0xFF&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;0xF8 = start of file ( and end of header ) --&amp;nbsp; making the 16bit hexidecimal word for a coment 0xFFF8&lt;/P&gt;&lt;P&gt;0xF9 = end of image file ( or end of quantization table/s ) -- not really relevant to us&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This header block contains the date information you are looking for.&amp;nbsp; Not sure of an exact method to target the dates with at this time.&amp;nbsp; The first date is 'datetime', then 'datetileoriginal', then 'datetimedigitized'.&amp;nbsp; I am thinking to just extract the values with regex from header block.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_text_macro jive_macro_code"&gt;&lt;P&gt;00000000&amp;nbsp; &lt;SPAN style="font-size: 18pt;"&gt;&lt;STRONG&gt;FF D8&lt;/STRONG&gt;&lt;/SPAN&gt; FF E1 37 E8 45 78 69 66 00 00 49 49 2A 00 08 00 00 00 0B 00 0E 01 02 00 15 00 00 00 92 00&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-size: 18pt;"&gt;&lt;STRONG&gt;ÿØ&lt;/STRONG&gt;&lt;/SPAN&gt;ÿá7èExif..II*...............’.&lt;/P&gt;&lt;P&gt;00000020&amp;nbsp; 00 00 0F 01 02 00 18 00 00 00 B2 00 00 00 10 01 02 00 07 00 00 00 CA 00 00 00 12 01 03 00 01 00&amp;nbsp;&amp;nbsp;&amp;nbsp; ..........²...........Ê.........&lt;/P&gt;&lt;P&gt;00000040&amp;nbsp; 00 00 01 00 00 00 1A 01 05 00 01 00 00 00 D8 00 00 00 1B 01 05 00 01 00 00 00 E0 00 00 00 28 01&amp;nbsp;&amp;nbsp;&amp;nbsp; ..............Ø...........à...(.&lt;/P&gt;&lt;P&gt;00000060&amp;nbsp; 03 00 01 00 00 00 02 00 00 00 31 01 02 00 09 00 00 00 E8 00 00 00 32 01 02 00 14 00 00 00 08 01&amp;nbsp;&amp;nbsp;&amp;nbsp; ..........1.......è...2.........&lt;/P&gt;&lt;P&gt;00000080&amp;nbsp; 00 00 13 02 03 00 01 00 00 00 02 00 00 00 69 87 04 00 01 00 00 00 1C 01 00 00 00 03 00 00 53 41&amp;nbsp;&amp;nbsp;&amp;nbsp; ..............i‡..............SA&lt;/P&gt;&lt;P&gt;000000A0&amp;nbsp; 4E 59 4F 20 44 49 47 49 54 41 4C 20 43 41 4D 45 52 41 00 00 00 00 00 00 00 00 00 00 00 00 53 41&amp;nbsp;&amp;nbsp;&amp;nbsp; NYO DIGITAL CAMERA............SA&lt;/P&gt;&lt;P&gt;000000C0&amp;nbsp; 4E 59 4F 20 45 6C 65 63 74 72 69 63 20 43 6F 2E 2C 4C 74 64 2E 00 53 58 31 31 33 20 00 00 00 00&amp;nbsp;&amp;nbsp;&amp;nbsp; NYO Electric Co.,Ltd..SX113 ....&lt;/P&gt;&lt;P&gt;000000E0&amp;nbsp; 00 00 00 00 48 00 00 00 01 00 00 00 48 00 00 00 01 00 00 00 56 31 31 33 70 2D 37 33 00 00 00 00&amp;nbsp;&amp;nbsp;&amp;nbsp; ....H.......H.......V113p-73....&lt;/P&gt;&lt;P&gt;00000100&amp;nbsp; 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 30 30 30 3A 31 31 3A 31 38 20 32&amp;nbsp;&amp;nbsp;&amp;nbsp; ....................2000:11:18 2&lt;/P&gt;&lt;P&gt;00000120&amp;nbsp; 31 3A 31 34 3A 31 39 00 16 00 9A 82 05 00 01 00 00 00 2A 02 00 00 9D 82 05 00 01 00 00 00 32 02&amp;nbsp;&amp;nbsp;&amp;nbsp; 1:14:19...š‚......*...&amp;amp;#157;‚......2.&lt;/P&gt;&lt;P&gt;00000140&amp;nbsp; 00 00 27 88 03 00 01 00 00 00 90 01 00 00 00 90 07 00 04 00 00 00 30 32 31 30 03 90 02 00 14 00&amp;nbsp;&amp;nbsp;&amp;nbsp; ..'ˆ......&amp;amp;#144;....&amp;amp;#144;......0210.&amp;amp;#144;....&lt;/P&gt;&lt;P&gt;00000160&amp;nbsp; 00 00 3A 02 00 00 04 90 02 00 14 00 00 00 4E 02 00 00 01 91 07 00 04 00 00 00 01 02 03 00 02 91&amp;nbsp;&amp;nbsp;&amp;nbsp; ..:....&amp;amp;#144;......N....‘...........‘&lt;/P&gt;&lt;P&gt;00000180&amp;nbsp; 05 00 01 00 00 00 62 02 00 00 04 92 0A 00 01 00 00 00 6A 02 00 00 05 92 05 00 01 00 00 00 72 02&amp;nbsp;&amp;nbsp;&amp;nbsp; ......b....’......j....’......r.&lt;/P&gt;&lt;P&gt;000001A0&amp;nbsp; 00 00 07 92 03 00 01 00 00 00 02 00 00 00 08 92 03 00 01 00 00 00 00 00 00 00 09 92 03 00 01 00&amp;nbsp;&amp;nbsp;&amp;nbsp; ...’...........’...........’....&lt;/P&gt;&lt;P&gt;000001C0&amp;nbsp; 00 00 00 00 00 00 0A 92 05 00 01 00 00 00 7A 02 00 00 7C 92 07 00 B2 00 00 00 7C 03 00 00 86 92&amp;nbsp;&amp;nbsp;&amp;nbsp; .......’......z...|’..²...|...†’&lt;/P&gt;&lt;P&gt;000001E0&amp;nbsp; 07 00 7D 00 00 00 82 02 00 00 00 A0 07 00 04 00 00 00 30 31 30 30 01 A0 03 00 01 00 00 00 01 00&amp;nbsp;&amp;nbsp;&amp;nbsp; ..}...‚.... ......0100. ........&lt;/P&gt;&lt;P&gt;00000200&amp;nbsp; 00 00 02 A0 04 00 01 00 00 00 80 02 00 00 03 A0 04 00 01 00 00 00 E0 01 00 00 05 A0 04 00 01 00&amp;nbsp;&amp;nbsp;&amp;nbsp; ... ......€.... ......à.... ....&lt;/P&gt;&lt;P&gt;00000220&amp;nbsp; 00 00 5E 03 00 00 00 A3 07 00 01 00 00 00 03 00 00 00 00 00 00 00 0A 00 00 00 E3 01 00 00 18 00&amp;nbsp;&amp;nbsp;&amp;nbsp; ..^....£..................ã.....&lt;/P&gt;&lt;P&gt;00000240&amp;nbsp; 00 00 0A 00 00 00 32 30 30 30 3A 31 31 3A 31 38 20 32 31 3A 31 34 3A 31 39 00 32 30 30 30 3A 31&amp;nbsp;&amp;nbsp;&amp;nbsp; ......2000:11:18 21:14:19.2000:1&lt;/P&gt;&lt;P&gt;00000260&amp;nbsp; 31 3A 31 38 20 32 31 3A 31 34 3A 31 39 00 11 00 00 00 0A 00 00 00 00 00 00 00 0A 00 00 00 03 00&amp;nbsp;&amp;nbsp;&amp;nbsp; 1:18 21:14:19...................&lt;/P&gt;&lt;P&gt;00000280&amp;nbsp; 00 00 01 00 00 00 3C 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 20 20 20 20 20 20 20 20 20 20&amp;nbsp;&amp;nbsp;&amp;nbsp; ......&amp;lt;...............&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;000002A0&amp;nbsp; 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;000002C0&amp;nbsp; 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;000002E0&amp;nbsp; 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;00000300&amp;nbsp; 20 20 20 20 20 20 20 20 20 20 20 00 06 00 03 01 03 00 01 00 00 00 06 00 00 00 1A 01 05 00 01 00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .....................&lt;/P&gt;&lt;P&gt;00000320&amp;nbsp; 00 00 4E 03 00 00 1B 01 05 00 01 00 00 00 56 03 00 00 28 01 03 00 01 00 00 00 02 00 00 00 01 02&amp;nbsp;&amp;nbsp;&amp;nbsp; ..N...........V...(.............&lt;/P&gt;&lt;P&gt;00000340&amp;nbsp; 04 00 01 00 00 00 2E 04 00 00 02 02 04 00 01 00 00 00 B2 33 00 00 00 00 00 00 48 00 00 00 01 00&amp;nbsp;&amp;nbsp;&amp;nbsp; ..................²3......H.....&lt;/P&gt;&lt;P&gt;00000360&amp;nbsp; 00 00 48 00 00 00 01 00 00 00 02 00 01 00 02 00 04 00 00 00 52 39 38 00 02 00 07 00 04 00 00 00&amp;nbsp;&amp;nbsp;&amp;nbsp; ..H.................R98.........&lt;/P&gt;&lt;P&gt;00000380&amp;nbsp; 30 31 30 30 00 00 00 00 53 41 4E 59 4F 00 01 00 06 00 00 02 04 00 03 00 00 00 D2 03 00 00 01 02&amp;nbsp;&amp;nbsp;&amp;nbsp; 0100....SANYO.............Ò.....&lt;/P&gt;&lt;P&gt;000003A0&amp;nbsp; 03 00 01 00 00 00 02 01 00 00 02 02 03 00 01 00 00 00 00 00 00 00 03 02 03 00 01 00 00 00 00 00&amp;nbsp;&amp;nbsp;&amp;nbsp; ................................&lt;/P&gt;&lt;P&gt;000003C0&amp;nbsp; 00 00 04 02 05 00 01 00 00 00 DE 03 00 00 00 0F 04 00 12 00 00 00 E6 03 00 00 00 00 00 00 00 00&amp;nbsp;&amp;nbsp;&amp;nbsp; ..........Þ...........æ.........&lt;/P&gt;&lt;P&gt;000003E0&amp;nbsp; 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 28 54 00 00&amp;nbsp;&amp;nbsp;&amp;nbsp; ............................(T..&lt;/P&gt;&lt;P&gt;00000400&amp;nbsp; 13 C2 00 00 03 F8 00 00 00 00 00 00 00 00 00 00 0B 89 9F 39 BF E0 00 00 28 5D 50 C1 52 04 00 00&amp;nbsp;&amp;nbsp;&amp;nbsp; .Â...ø...........‰Ÿ9¿à..(]PÁR...&lt;/P&gt;&lt;P&gt;00000420&amp;nbsp; 00 00 00 00 00 00 00 00 00 00 45 38 50 C1 00 00 00 00 00 00 00 00 00 47 00 D0 &lt;SPAN style="font-size: 18pt;"&gt;&lt;STRONG&gt;FF D8&lt;/STRONG&gt;&lt;/SPAN&gt; FF DB 00 C5&amp;nbsp;&amp;nbsp;&amp;nbsp; ..........E8PÁ.........G.Ð&lt;SPAN style="font-size: 18pt;"&gt;&lt;STRONG&gt;ÿØ&lt;/STRONG&gt;&lt;/SPAN&gt;ÿÛ.Å&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The comment block is signified by the subvalue 0xFE making the 16bit hexidecimal word for a coment 0xFFFE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here is the example files comment information from the jpeg file:&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_text_macro jive_macro_code"&gt;&lt;P&gt;000037E0&amp;nbsp; D7 AD 4A 0D 3D 4F 9F C4 4E 2C &lt;SPAN style="font-size: 18pt;"&gt;&lt;SPAN style="font-size: 10pt;"&gt;FF D9&lt;/SPAN&gt; &lt;STRONG&gt;FF FE&lt;/STRONG&gt;&lt;/SPAN&gt; 00 5B 45 74 20 76 6F 69 6C 61 2E 20 46 6F 72 20 73 74&amp;nbsp;&amp;nbsp;&amp;nbsp; ×­J.=OŸÄN,ÿÙ&lt;STRONG style="font-size: 18pt;"&gt;ÿþ&lt;/STRONG&gt;.[Et voila. For st&lt;/P&gt;&lt;P&gt;00003800&amp;nbsp; 61 72 74 65 72 73 20 77 65 20 68 61 76 65 20 77 61 72 6D 65 64 20 67 6F 61 74 73 20 63 68 65 65&amp;nbsp;&amp;nbsp;&amp;nbsp; arters we have warmed goats chee&lt;/P&gt;&lt;P&gt;00003820&amp;nbsp; 73 65 20 69 6E 20 62 72 65 61 64 63 72 75 6D 62 73 20 6F 6E 20 61 20 68 65 72 62 20 73 61 6C 61&amp;nbsp;&amp;nbsp;&amp;nbsp; se in breadcrumbs on a herb sala&lt;/P&gt;&lt;P&gt;00003840&amp;nbsp; 64 20 62 61 73 65 2E 2E 2E FF DB 00 43 00 03 03 03 03 03 02 03 03 03 03 04 04 03 04 05 08 05 05&amp;nbsp;&amp;nbsp;&amp;nbsp; d base...ÿÛ.C...................&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have yet to locate information specific to data for storage of GPS data.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Oct 2011 23:00:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25014#M4309</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2011-10-06T23:00:43Z</dc:date>
    </item>
    <item>
      <title>Re: Deciphering a jpg file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25015#M4310</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;To confirm, I now have your file with GPS Information included.&amp;nbsp; Here is the information:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;JFIF_APP1 : Exif&lt;/P&gt;&lt;P&gt;Comment : Et voila. For starters we have warmed goats cheese in breadcrumbs on a herb salad base...&lt;/P&gt;&lt;P&gt;Main Information&lt;/P&gt;&lt;P&gt;Make : SANYO Electric Co.,Ltd.&lt;/P&gt;&lt;P&gt;Model : SX113&lt;/P&gt;&lt;P&gt;Orientation : left-hand side&lt;/P&gt;&lt;P&gt;XResolution : 72/1&lt;/P&gt;&lt;P&gt;YResolution : 72/1&lt;/P&gt;&lt;P&gt;ResolutionUnit : Inch&lt;/P&gt;&lt;P&gt;Software : V113p-73&lt;/P&gt;&lt;P&gt;DateTime : 2000:11:18 21:14:19&lt;/P&gt;&lt;P&gt;YCbCrPositioning : co-sited&lt;/P&gt;&lt;P&gt;ExifInfoOffset : 322&lt;/P&gt;&lt;P&gt;GPSInfoOffset : 1280&lt;/P&gt;&lt;P&gt;Unknown (9C9B)1,30 : 530061006D0070006C006500200050006900630074007500720065000000&lt;/P&gt;&lt;P&gt;Unknown (9C9F)1,44 : 410020004E0069006300650020004C006F006F006B0069006E0067002000440069006E006E00650072000000&lt;/P&gt;&lt;P&gt;Sub Information&lt;/P&gt;&lt;P&gt;ExposureTime : 1/48.3Sec&lt;/P&gt;&lt;P&gt;FNumber : F2.4&lt;/P&gt;&lt;P&gt;ISOSpeedRatings : 400&lt;/P&gt;&lt;P&gt;ExifVersion : 0210&lt;/P&gt;&lt;P&gt;DateTimeOriginal : 2000:11:18 21:14:19&lt;/P&gt;&lt;P&gt;DateTimeDigitized : 2000:11:18 21:14:19&lt;/P&gt;&lt;P&gt;ComponentConfiguration : YCbCr&lt;/P&gt;&lt;P&gt;CompressedBitsPerPixel : 17/10 (bit/pixel)&lt;/P&gt;&lt;P&gt;ExposureBiasValue : EV0.0&lt;/P&gt;&lt;P&gt;MaxApertureValue : F2.8&lt;/P&gt;&lt;P&gt;MeteringMode : CenterWeightedAverage&lt;/P&gt;&lt;P&gt;LightSource : Unidentified&lt;/P&gt;&lt;P&gt;Flash : Not fired&lt;/P&gt;&lt;P&gt;FocalLength : 6.00(mm)&lt;/P&gt;&lt;P&gt;MakerNote : SANYO Format : 178Bytes (Offset:716)&lt;/P&gt;&lt;P&gt;UserComment : Et voila. For starters we have warmed goats cheese in breadcrumbs on a herb salad base...&lt;/P&gt;&lt;P&gt;UserComment : Et voila. For starters we have warmed goats cheese in breadcrumbs on a herb salad base...&lt;/P&gt;&lt;P&gt;UserComment : Et voila. For starters we have warmed goats cheese in breadcrumbs on a herb salad base...&lt;/P&gt;&lt;P&gt;UserComment :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;FlashPixVersion : 0100&lt;/P&gt;&lt;P&gt;ColorSpace : sRGB&lt;/P&gt;&lt;P&gt;ExifImageWidth : 640&lt;/P&gt;&lt;P&gt;ExifImageHeight : 480&lt;/P&gt;&lt;P&gt;FileSource : DSC&lt;/P&gt;&lt;P&gt;GPS Informtion&lt;/P&gt;&lt;P&gt;GPSLatitudeRef : N&lt;/P&gt;&lt;P&gt;GPSLatitude : 28 2153.07 [DMS]&lt;/P&gt;&lt;P&gt;GPSLongitudeRef : W&lt;/P&gt;&lt;P&gt;GPSLongitude : 81 3330.43 [DMS]&lt;/P&gt;&lt;P&gt;Vendor Original Information&lt;/P&gt;&lt;P&gt;Unknown (0200)4,3 : 1634494831,1866866734,1953702002&lt;/P&gt;&lt;P&gt;Unknown (0201)3,1 : 258&lt;/P&gt;&lt;P&gt;Macro mode : Off&lt;/P&gt;&lt;P&gt;Unknown (0203)3,1 : 0&lt;/P&gt;&lt;P&gt;Digital Zoom : 0.85x&lt;/P&gt;&lt;P&gt;Unknown (0F00)4,18 : 1634213989,1998611830,1701671521,1869029476,544437345,1701144675,1763730803,1919033454,1667522917,1651340658,1852776563,1746952480,543322725,1634492787,1633820772,774792563,1950679086,1768912416&lt;/P&gt;&lt;P&gt;Thumbnail Information&lt;/P&gt;&lt;P&gt;Compression : OLDJPEG&lt;/P&gt;&lt;P&gt;XResolution : 72/1&lt;/P&gt;&lt;P&gt;YResolution : 72/1&lt;/P&gt;&lt;P&gt;ResolutionUnit : Inch&lt;/P&gt;&lt;P&gt;JPEGInterchangeFormat : 1476&lt;/P&gt;&lt;P&gt;JPEGInterchangeFormatLength : 13234&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Oct 2011 23:05:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25015#M4310</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2011-10-06T23:05:32Z</dc:date>
    </item>
    <item>
      <title>Re: Deciphering a jpg file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25016#M4311</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Correct, sort of, except your coordinates are off and you left off one of the critical fields: subject&lt;/P&gt;&lt;P&gt;which is A Nice Looking Dinner&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The coordinates actually are 28 21' 53.07" N and 81 33' 3043" W&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You also left off the title, Sample Picture, but I'm not interested in that, only Subject, Date Original and GPS Coordinates.&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I also didn't notice a coding tag in your example, which will be needed for the 2 character numbers.&amp;nbsp; It is little endian.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 07 Oct 2011 00:25:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25016#M4311</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2011-10-07T00:25:18Z</dc:date>
    </item>
    <item>
      <title>Deciphering a jpg file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25017#M4312</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Art, can you produce a 1x1 pixel image with the EXIF data you wish to capture present?&amp;nbsp; I seem to be having a little trouble reducing the amount of noise as I am figuring out my approach.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 07 Oct 2011 03:05:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25017#M4312</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2011-10-07T03:05:28Z</dc:date>
    </item>
    <item>
      <title>Deciphering a jpg file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25018#M4313</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Any luck with creating this file Art?&amp;nbsp; The issue I am finding is the there are a number of varieties based on manufacturer and exif version, an I do not seem to have a camera or program that allows me to create a subject tag that you describe.&amp;nbsp; A simple 1x1 pixel image in your desired format and exif version would provide the simpliest file for me to work with.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 10 Oct 2011 22:35:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25018#M4313</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2011-10-10T22:35:48Z</dc:date>
    </item>
    <item>
      <title>Deciphering a jpg file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25019#M4314</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I've posted my own attempt, thus far (even though it is WRONG), below.&amp;nbsp; I changed my mind and decided that the three fields of interest are title, gps info, and date picture was taken.&amp;nbsp; Date picture was taken is easy since it is the first datetime field that exists in the file.&amp;nbsp; Most of my code is an attempt to parse the exif information from the file.&amp;nbsp; However, I'm posting a secondary thread because I can't figure out how to get the code to correctly differentiate between big and little endian representations.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let path=c:\art\;&lt;/P&gt;&lt;P&gt;options datestyle=ymd;&lt;/P&gt;&lt;P&gt;proc format;&lt;/P&gt;&lt;P&gt;&amp;nbsp; value endian 18761='pibr4.'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 19789='pib4.';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;filename indata pipe "dir &amp;amp;path.*.jpg /b";&lt;/P&gt;&lt;P&gt;data want (drop=var1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; length fil2read title $80;&lt;/P&gt;&lt;P&gt;&amp;nbsp; retain _exif_pattern_num _dt_pattern_num;&lt;/P&gt;&lt;P&gt;&amp;nbsp; format dt_taken datetime19.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; format lat lon $1.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; length coordinates $35;&lt;/P&gt;&lt;P&gt;&amp;nbsp; infile indata truncover;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if _n_ = 1 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _exif_pattern_num =PRXPARSE("/\x45\x78\x69\x66/");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _dt_pattern_num=PRXPARSE(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "/\d\d\d\d\:\d\d\:\d\d\ \d\d\:\d\d\:\d\d/");&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; informat f2r $50.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input f2r;&lt;/P&gt;&lt;P&gt;&amp;nbsp; fil2read="&amp;amp;path."||f2r;&lt;/P&gt;&lt;P&gt;&amp;nbsp; done=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; infile dummy filevar=fil2read RECFM=n lrecl=12000&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end=done;&lt;/P&gt;&lt;P&gt;&amp;nbsp; picture=fil2read;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do while(not done);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; input VAR1 $char12000.;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; POSITIONX = PRXMATCH(_EXIF_PATTERN_NUM,var1)+6;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; type=put(input(substr(var1,positionx,2),pib4.), endian.);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; numberx=inputn(put(substr(var1,positionx+8,1),$hex2.)||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put(substr(var1,positionx+9,1),$hex2.),type);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; numberx=inputn(substr(var1,positionx+8,2),type);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gps_offset=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; title_offset=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=0 to (numberx-1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xtag=inputn(substr(var1,positionx+10+i*12,2),type);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if xtag eq 34853 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gps_offset=inputn(substr(var1,positionx+10+i*12+8,2),&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type)+positionx;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if xtag eq 40091 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; title_offset=inputn(substr(var1,positionx+10+i*12+8,2),&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type)+positionx;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; title_length=inputn(substr(var1,positionx+10+i*12+4,2),&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type)+positionx;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if title_offset then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; title=compress(input(substr(var1,title_offset,title_length),$50.),&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "/ ?+#$%&amp;amp;","knp");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else title="No Title";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if gps_offset then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=0 to (inputn(substr(var1,gps_offset,2),type)-1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gps_tag=inputn(substr(var1,gps_offset+2+i*12,2),type);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if gps_tag eq 1 then lat=&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; input(substr(var1,gps_offset+2+i*12+8,1),$1.);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if gps_tag eq 2 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lat_offset=inputn(substr(var1,gps_offset+2+i*12+8,2),type);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; latdeg=inputn(substr(var1,lat_offset,4),type)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lat_offset+4,4),type);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; latmin=inputn(substr(var1,lat_offset+8,4),type)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lat_offset+12,4),type);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; latsec=inputn(substr(var1,lat_offset+16,4),type)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lat_offset+20,4),type);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if gps_tag eq 3 then lon=&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; input(substr(var1,gps_offset+2+i*12+8,1),$1.);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if gps_tag eq 4 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lon_offset=inputn(substr(var1,gps_offset+2+i*12+8,2),type);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; londeg=inputn(substr(var1,lat_offset,4),type)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lat_offset+4,4),type);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lonmin=inputn(substr(var1,lat_offset+8,4),type)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lat_offset+12,4),type);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lonsec=inputn(substr(var1,lat_offset+16,4),type)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lat_offset+20,4),type);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; coordinates=strip(put(latdeg,best12.))||" "||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(put(latmin,best12.))||"' "||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(put(latsec,best12.))||'" '||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(lat)||","||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(put(londeg,best12.))||" "||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(put(lonmin,best12.))||"' "||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(put(lonsec,best12.))||'" '||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(lon);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else coordinates="No GPS";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; POSITION = PRXMATCH(_DT_PATTERN_NUM,var1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dt_taken=input(substr(var1,position,19),anydtdtm19.);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; done=1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 10 Oct 2011 22:51:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25019#M4314</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2011-10-10T22:51:51Z</dc:date>
    </item>
    <item>
      <title>Deciphering a jpg file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25020#M4315</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;With some invaluable assistance from DLing and Tom I was able to solve the problem.&amp;nbsp; The "almost" final code is shown below.&amp;nbsp; The code searches a directory for all JPG files and then outputs a file called "want" that contains the file names, coordinates where each picture was taken, the dates the pictures were taken, the titles that were assigned to the pictures, and the picures' heights and widths:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let path=c:\art\;&lt;/P&gt;&lt;P&gt;options datestyle=ymd;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc format;&lt;/P&gt;&lt;P&gt;&amp;nbsp; value ttwo&amp;nbsp; 18761='pibr2.'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 19789='s370fpib2.';&lt;/P&gt;&lt;P&gt;&amp;nbsp; value tfour 18761='pibr4.'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 19789='s370fpib4.';&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;filename indata pipe "dir &amp;amp;path.*.jpg /b";&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want (keep=picture dt_taken coordinatesn title&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; width height);&lt;/P&gt;&lt;P&gt;&amp;nbsp; length fil2read title $80;&lt;/P&gt;&lt;P&gt;&amp;nbsp; retain _exif_pattern_num _dt_pattern_num;&lt;/P&gt;&lt;P&gt;&amp;nbsp; format dt_taken datetime19.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; format lat lon $1.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; length coordinates $35;&lt;/P&gt;&lt;P&gt;&amp;nbsp; infile indata truncover;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if _n_ = 1 then _exif_pattern_num=&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; PRXPARSE("/\x45\x78\x69\x66/");&lt;/P&gt;&lt;P&gt;&amp;nbsp; informat f2r $50.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input f2r;&lt;/P&gt;&lt;P&gt;&amp;nbsp; fil2read="&amp;amp;path."||f2r;&lt;/P&gt;&lt;P&gt;&amp;nbsp; done=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; infile dummy filevar=fil2read RECFM=n lrecl=12000&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end=done;&lt;/P&gt;&lt;P&gt;&amp;nbsp; picture=fil2read;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do while(not done);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; input VAR1 $char12000.;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; POSITIONX = PRXMATCH(_EXIF_PATTERN_NUM,var1)+6;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; endian2=put(input(substr(var1,positionx,2),pibr2.),ttwo.);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; endian4=put(input(substr(var1,positionx,2),pibr2.),tfour.);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; numberx=inputn(substr(var1,positionx+inputn(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,positionx+4,4),endian4),2),endian2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; offset=positionx+inputn(substr(var1,positionx+4,4),&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endian4)+2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gps_offset=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; subject_offset=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; date_offset=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; last_offset=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=0 to numberx-1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xtag=inputn(substr(var1,offset+i*12,2),endian2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if xtag eq 34853 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gps_bytes=inputn(substr(var1,offset+i*12+2,2),&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endian2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if gps_bytes eq 2 then gps_offset=positionx+&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,offset+i*12+10,2),endian2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else gps_offset=positionx+&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,offset+i*12+8,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if xtag eq 40091 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; title_offset=positionx+inputn(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,offset+i*12+8,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; title_length=inputn(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,offset+i*12+4,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i eq numberx-1 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; last_offset=positionx+inputn(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,offset+i*12+8,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; last_length=inputn(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,offset+i*12+4,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; numberx2=inputn(substr(var1,last_offset+last_length,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2),endian2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; last_offset+(last_length+2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if last_offset then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=0 to numberx2-1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xtag=inputn(substr(var1,last_offset+i*12,2),endian2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if xtag eq 36867 then date_offset=&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,last_offset+i*12+8,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if xtag eq 40962 then width=&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,last_offset+i*12+8,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if xtag eq 40963 then height=&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,last_offset+i*12+8,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if title_offset then title=compress(input(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,title_offset,title_length),$50.),&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "/ ?+#$%&amp;amp;","knp");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else title="No Title";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if gps_offset then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; numberx=inputn(substr(var1,gps_offset,2),endian2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; offset=gps_offset+2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=0 to numberx-1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xtag=inputn(substr(var1,offset+i*12,2),endian2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if xtag eq 1 then lat=input(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,offset+i*12+8,1),$1.);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if xtag eq 2 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lat_offset=positionx+inputn(substr(var1,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; offset+i*12+8,2),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; latdeg=inputn(substr(var1,lat_offset+ 0,4),endian4)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lat_offset+ 4,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; latmin=inputn(substr(var1,lat_offset+ 8,4),endian4)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lat_offset+12,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; latsec=inputn(substr(var1,lat_offset+16,4),endian4)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lat_offset+20,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if xtag eq 3 then lon=input(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,offset+i*12+8,1),$1.);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if xtag eq 4 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lon_offset=positionx+inputn(substr(var1,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; offset+i*12+8,2),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; londeg=inputn(substr(var1,lon_offset+ 0,4),endian4)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lon_offset+ 4,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lonmin=inputn(substr(var1,lon_offset+ 8,4),endian4)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lon_offset+12,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lonsec=inputn(substr(var1,lon_offset+16,4),endian4)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lon_offset+20,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; coordinates=strip(put(latdeg,best12.))||" "||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(put(latmin,best12.))||"' "||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(put(latsec,best12.))||'" '||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(lat)||","||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(put(londeg,best12.))||" "||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(put(lonmin,best12.))||"' "||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(put(lonsec,best12.))||'" '||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(lon);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else coordinates="No GPS";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if date_offset then dt_taken=&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; input(substr(var1,positionx+date_offset,19),anydtdtm19.);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else dt_taken=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; done=1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 Oct 2011 03:22:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25020#M4315</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2011-10-12T03:22:49Z</dc:date>
    </item>
    <item>
      <title>Deciphering a jpg file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25021#M4316</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Excellent work Art, very impressive!&amp;nbsp; Wish I had a little more time to have dedicate to this one.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 Oct 2011 03:28:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25021#M4316</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2011-10-12T03:28:30Z</dc:date>
    </item>
    <item>
      <title>Re: Deciphering a jpg file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25022#M4317</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Art.&lt;/P&gt;&lt;P&gt;But I test it. It looks like it is not right.&lt;/P&gt;&lt;P&gt;I test the photo is FriedEgg offered.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Update: I am going to be working with this sample file: &lt;A class="jive-link-external-small active_link" href="http://www.exif.org/samples/sanyo-vpcsx550.jpg"&gt;http://www.exif.org/samples/sanyo-vpcsx550.jpg&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Your code get date taken is 01jan1960:00:00:00 .&lt;/P&gt;&lt;P&gt;But I take a look at this photo .it 2000-11-18:21:14:00.&lt;/P&gt;&lt;P&gt;and I also notice that if the photo were modified ,then your code will generated an errror.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 Oct 2011 09:45:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25022#M4317</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2011-10-12T09:45:43Z</dc:date>
    </item>
    <item>
      <title>Re: Deciphering a jpg file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25023#M4318</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ksharp,&amp;nbsp; Please try it again with the following code.&amp;nbsp; There was definitely something wrong with the code, particularly how it identified a second set of tags:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let path=c:\art\;&lt;/P&gt;&lt;P&gt;options datestyle=ymd;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc format;&lt;/P&gt;&lt;P&gt;&amp;nbsp; value ttwo&amp;nbsp; 18761='pibr2.'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 19789='s370fpib2.';&lt;/P&gt;&lt;P&gt;&amp;nbsp; value tfour 18761='pibr4.'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 19789='s370fpib4.';&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;filename indata pipe "dir &amp;amp;path.*.jpg /b";&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want (keep=picture dt_taken coordinates title&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; width height);&lt;/P&gt;&lt;P&gt;&amp;nbsp; length fil2read title $80;&lt;/P&gt;&lt;P&gt;&amp;nbsp; retain _exif_pattern_num;&lt;/P&gt;&lt;P&gt;&amp;nbsp; format dt_taken datetime19.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; format lat lon $1.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; length coordinates $35;&lt;/P&gt;&lt;P&gt;&amp;nbsp; infile indata truncover;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if _n_ = 1 then _exif_pattern_num=&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; PRXPARSE("/\x45\x78\x69\x66/");&lt;/P&gt;&lt;P&gt;&amp;nbsp; informat f2r $50.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input f2r;&lt;/P&gt;&lt;P&gt;&amp;nbsp; fil2read="&amp;amp;path."||f2r;&lt;/P&gt;&lt;P&gt;&amp;nbsp; done=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; infile dummy filevar=fil2read RECFM=n lrecl=12000&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end=done;&lt;/P&gt;&lt;P&gt;&amp;nbsp; picture=fil2read;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do while(not done);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; input VAR1 $char12000.;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; POSITIONX = PRXMATCH(_EXIF_PATTERN_NUM,var1)+6;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; endian2=put(input(substr(var1,positionx,2),pibr2.),ttwo.);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; endian4=put(input(substr(var1,positionx,2),pibr2.),tfour.);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; numberx=inputn(substr(var1,positionx+inputn(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,positionx+4,4),endian4),2),endian2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; offset=positionx+inputn(substr(var1,positionx+4,4),&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endian4)+2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gps_offset=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; subject_offset=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; date_offset=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; last_offset=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=0 to numberx-1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xtag=inputn(substr(var1,offset+i*12,2),endian2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if xtag eq 34665 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; numberx2=positionx+inputn(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,offset+i*12+8,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; last_offset=positionx+inputn(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,offset+i*12+8,4),endian4)+2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if xtag eq 34853 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gps_bytes=inputn(substr(var1,offset+i*12+2,2),&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endian2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if gps_bytes eq 2 then gps_offset=positionx+&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,offset+i*12+10,2),endian2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else gps_offset=positionx+&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,offset+i*12+8,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if xtag eq 40091 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; title_offset=positionx+inputn(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,offset+i*12+8,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; title_length=inputn(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,offset+i*12+4,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if last_offset then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=0 to numberx2-1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xtag=inputn(substr(var1,last_offset+i*12,2),endian2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if xtag eq 36867 then date_offset=&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,last_offset+i*12+8,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if xtag eq 40962 then width=&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,last_offset+i*12+8,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if xtag eq 40963 then height=&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,last_offset+i*12+8,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if title_offset then title=compress(input(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,title_offset,title_length),$50.),&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "/ ?+#$%&amp;amp;","knp");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else title="No Title";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if gps_offset then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; numberx=inputn(substr(var1,gps_offset,2),endian2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; offset=gps_offset+2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=0 to numberx-1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xtag=inputn(substr(var1,offset+i*12,2),endian2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if xtag eq 1 then lat=input(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,offset+i*12+8,1),$1.);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if xtag eq 2 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lat_offset=positionx+inputn(substr(var1,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; offset+i*12+8,2),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; latdeg=inputn(substr(var1,lat_offset+ 0,4),endian4)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lat_offset+ 4,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; latmin=inputn(substr(var1,lat_offset+ 8,4),endian4)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lat_offset+12,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; latsec=inputn(substr(var1,lat_offset+16,4),endian4)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lat_offset+20,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if xtag eq 3 then lon=input(substr(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var1,offset+i*12+8,1),$1.);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if xtag eq 4 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lon_offset=positionx+inputn(substr(var1,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; offset+i*12+8,2),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; londeg=inputn(substr(var1,lon_offset+ 0,4),endian4)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lon_offset+ 4,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lonmin=inputn(substr(var1,lon_offset+ 8,4),endian4)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lon_offset+12,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lonsec=inputn(substr(var1,lon_offset+16,4),endian4)/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputn(substr(var1,lon_offset+20,4),endian4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; coordinates=strip(put(latdeg,best12.))||" "||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(put(latmin,best12.))||"' "||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(put(latsec,best12.))||'" '||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(lat)||","||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(put(londeg,best12.))||" "||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(put(lonmin,best12.))||"' "||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(put(lonsec,best12.))||'" '||&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strip(lon);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else coordinates="No GPS";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if date_offset then dt_taken=&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; input(substr(var1,positionx+date_offset,19),anydtdtm19.);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else dt_taken=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; done=1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 Oct 2011 13:18:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25023#M4318</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2011-10-12T13:18:08Z</dc:date>
    </item>
    <item>
      <title>Re: Deciphering a jpg file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25024#M4319</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ksharp,&amp;nbsp; One additional note: DON'T use window's explorer to modify the jpg file.&amp;nbsp; It has a tendency to REALLY corrupt the exif portion of the file.&amp;nbsp; Usually will only affect the height, width and date settings (at least regarding the settings that my code is attempting to parse) but, other than title and gps coordinates, those are the only fields I am trying to extract.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;A MUCH safer way of changing the file's attributes is to use one of the proven perl-based routines, such as &lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: Calibri, sans-serif; font-size: 11pt;"&gt;&lt;A href="http://www.sno.phy.queensu.ca/~phil/exiftool/"&gt;http://www.sno.phy.queensu.ca/~phil/exiftool/&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Arial, sans-serif; font-size: 10pt;"&gt;) which, by the way, is free and has a windows executable version.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: Arial, sans-serif; font-size: 10pt;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 Oct 2011 23:52:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Deciphering-a-jpg-file/m-p/25024#M4319</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2011-10-12T23:52:21Z</dc:date>
    </item>
  </channel>
</rss>

