Feature request: Binary support for JSON output

Started by ejball, January 30, 2014, 06:58:31 PM

Previous topic - Next topic

ejball

It would be great if the JSON output format supported binary output via -b using Base64 like the XML format does. Thanks for your consideration.

Phil Harvey

In XML this is possible because XML supports attributes that allow the encoding to be specified.

As far as I know, this is not possible with JSON, so how would the base64 encoding be indicated?

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

ejball

I don't think that Base64 needs to be declared explicitly in the output; it would still be useful even if the caller needs to know in advance. That is, much like the caller has to know that "ImageSize" will be in the format "(width)x(height)" for it to be useful, the caller has to know that "ThumbnailImage" will be in Base64 in order to interpret it properly. Since the caller has to request it explicitly via "-b" anyway, I can't think of any disadvantage in supporting it, even if it is not self-describing like the XML.

Thanks again for your consideration!

Phil Harvey

I agree that this may make some sense for ThumbnailImage, but there are many other tags which may contain binary data and for which Base64 encoding may not be immediately obvious.

I was under the impression that JSON strings are constrained to valid UTF-8 characters, but I re-read the specification and it seems that "\u0000" may be a valid way to represent a zero byte (even though a zero byte is not valid UTF-8).  Perhaps your goal could be accomplished via \u escape sequences?  I checked, and this is valid JSON according to the JSON validator.  What do you think?  The disadvantage of this is that a single byte would grow into 6 bytes, resulting in up to a 600% size expansion factor for binary data.

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

Phil Harvey

I have run a couple of tests.  Escaping bytes 0x80-0xff with "\u" is expensive in terms of file size, while values in this range can be expressed by 2 bytes in UTF-8.  So if I escape control codes (<0x20), and encode bytes 0x80-0xff in UTF-8, the expansion factor for my test ThumbnailImage is about 2x (while if I escape 0x80-0xff too, the factor is about 4x).

I think this is valid JSON, but the question is:  Can you convert it back to a valid JPEG image?:

[{
"SourceFile": "../pics/a.jpg",
"ThumbnailImage": "ÿØÿÛ\u0000„\u0000\u0003\u0002\u0002\u0002\u0002\u0003\u0003\u0002\u0003\u0003\u0005\u0004\u0003\u0003\u0003\u0005\u0004\u0004\u0005\u0005\u0008\n\u000B\u0008\u0006\u0007\u0007\t\u000E\u000C\n\u000B\n\u000B\u000B\u000C\r\r\u0011\r\u000C\u000F\u0011\u0012\u0011\u000F\u0015\u000F\u000B\u000C\u0014\u0014\u0014\u0013\u0015\u0017\u0015\u000F\u0011\u0017\u0013\u0014\u0013\u0013\u0001\u0003\u0003\u0003\u0005\u0004\u0005\t\u0005\u0005\t\u0013\r\u000B\r\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013\u0013ÿÀ\u0000\u0011\u0008\u0000 \u0000x\u0003\u0001\u0012\u0000\u0002\u0011\u0001\u0003\u0011\u0001ÿÄ\u0001¢\u0000\u0000\u0001\u0005\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\t\n\u000B\u0010\u0000\u0002\u0001\u0003\u0003\u0002\u0004\u0003\u0005\u0005\u0004\u0004\u0000\u0000\u0001}\u0001\u0002\u0003\u0000\u0004\u0011\u0005\u0012!1A\u0006\u0013Qa\u0007\"q\u00142‘¡\u0008#B±Á\u0015RÑð$3br‚\t\n\u0016\u0017\u0018\u0019\u001A%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„\u0085†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùú\u0001\u0000\u0003\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\t\n\u000B\u0011\u0000\u0002\u0001\u0002\u0004\u0004\u0003\u0004\u0007\u0005\u0004\u0004\u0000\u0001\u0002w\u0000\u0001\u0002\u0003\u0011\u0004\u0005!1\u0006\u0012AQ\u0007aq\u0013\"2\u0008\u0014B‘¡±Á\t#3Rð\u0015brÑ\n\u0016$4á%ñ\u0017\u0018\u0019\u001A&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„\u0085†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ\u0000\u000C\u0003\u0001\u0000\u0002\u0011\u0003\u0011\u0000?\u0000üèø\u0010žgŽt4=þ×ÿ\u0000¤ïR|\u0000\u001B¼{ úüÿ\u0000Òy(\u0014¶>‡ø¯ýƒo Þ¥ñO1á\"\u0015?x·µyÇí\u000B xûJ=o\u000EúbÅ´ã¢\u001FZ‰7±\u0007\u0085Ê\u0085|°y+ž(‘LN\u0018\u001DÁŽG½fîR;O\u0085Z†•oâ>ëRÚ-Ãà–è\u000Fjç#Žÿ\u0000[¼†ÖÞ×\u00172\u0015DŽ1‚MMÚz\u0014Ñ÷§Ùæ%\u0085ƒDÊ\n•èEsÿ\u0000\tt-gCð핆¨ÄÝ(É\u0004ä¨=«¡;£3ªHrjâ&\u000Eh\u0002\u0006ˆ\u0000\u0005Xd$Ð\u0005Q\u000F\u0019Å^òÎ(\u0002\u0008\"Ï\u0015vÖ,“@È<jÑò\u000F¥\u0000Ì[û\u0018n`’\tP4n¤0=ÅSø>©§è\u001AÞž\u0085®£·b€uéEúˆø×ã6\u0085¦øoÄ÷\u0016\u001Aq\u0002ÞdÞè½\u0014žµÍk·7·òË{;´—\r#\u0019Ëu\u0006±”ºŽ*ìÆ·xâó\u0014¦IáO¥X¶›OÙ0–&i\nþìƒÐÔ)¾Æ¼‹¹õ\u0017ì×¢èGÃÆú ¨<Ì&þòúW™þΖþ*\u0011ÛI`$þÏ\u000C~Ó×n=êéÉíb%\u001Bu<×âJìñwŠSÓÄz€ÿ\u0000ÈÍOø 1ã/\u0016O\u0013j_ú=«q£ ýž\u0000oˆ>\u001F\u0007¡ûgþ“IU>\u0007j\u0011i^6ѵ\t\u000E\u0012\u0015¼$ýmÜP'±ôßÆO\u0013è\u001A.y¦Ü²½ÕÔ\u0005b‹¾Ozùßã'‰×]×N§\u001C»ÑSfßJÎR!œ\u000BþèÆ\u0003|ÈIúUY\u000B+\t\u0014ýã‘PÓ\u001A;ÿ\u0000†>)µÐ¼Sc®êŸ4a‚¹#§\u0018\u0006«ø\u001BÁ^ ø“ª-’)HmÕMÔøâ5ì>§µCŸ&¬§f}µ¥ø‡DÕ-Òþ\u000B”h\u001Cd6k3Â_\u000Eí¼)ei¥Å\u0018\u0011‹uuÞrÌ\t#'êA¬§Ž¶È\\§Ege|í\u000C2nd\u001B\u0007‘íTonäÓ5\u000BKh-K\u0019­›.\u0007Ê3ƒó~\u001D>´¨ã9®ç¢)Áš“ÝØYa®gH”2ä\u0001’p:׃½Äÿ\u0000\u0011|k\rìÍ&‡áé>Ì°3a'¹_¼Î=\u0010ôãÓ\u0015o\u0018­t„âö=ªÇÅZ>¦‹weºâͳ‰Óî;¯r?\u000F¦iú~•\u0011ˆ¥¨\u0011Ä#\u0001€\u0018É|ô\u001Cu®Yc§}\u000BTÍí4Ãp\u000BFC\u0000qÅeé–óé—\rk\tØ\u0011\u0018Ý\u000F=2{~£ž•´s\u0008ßT/d͝JêÓI·{ë–+\n2) \u0013Ë°P0=I®Jöâ/\u001Ck–š=å̖Z%¬i,À©Ì—\u0003\u0007žåW8\u001D2AààUÖÆÆ*Ñwa\u001AO©Ñê\u0017v&Áo‰Ýo?–«Á9ó\u0018*Œ{’\u0005Esá«{{‹\r\u000EÓPSa$âçʘó¾<²ª±é¹ðqùw¨–9(ù‚¥C俌ÿ\u0000\t<DÚÍ÷‰ô½0Ç¢\u001D%õ)¦b\u0015\u0002!Áêzž0:šú‹ã\u0007‡n<YðÛĚT2,RÃáXõ\u0002ÏÀ\u0002ÕÄ̹ã–Û·êh¥‰u5·KŠTÔ^§ç\u0085¬Ë\nM\tˆ\u0013&0Ǩ«\u0016—¶«\rÄMj®ò\u0000\u0015Îr˜=«w7Ø¥\u0005Üúÿ\u0000öb¹ðäž\u0016†ÒՐj\t#\u001B•þ\"}kË?eï\u0007ø¦ï^‡Ä\u0006Kƒ\"VìþÕt¤ö±\u0012Š]O\u001Fø¦1ãO\u0017O\u0014jú=©~+\u000CxÛÆ#ÓÅ:§þjÜhç´ûɬ'K¨Ž$Ep\u000FûÊGõ©4>]Vò\r>!™'}«ùR–Â{\u000C-5ܟ1Ë1ïZzæ‹wá‹ß²Ì¸`3Ï¥fA‘3\u0005*ªs³½:H\u000CŽ‚ I”ð=è\u0003ë߃ö±xcÃ\u001A\u0008\u0085#7\u001AÕ·Û§’\\‘’\u0014Œã\u00198 \u000EG\u0015Ðé˜Ó~\u0013A¬\\Û\u001F±èÞ\u001CÓæºÀÁY#Œ,y=‰c´{œW•ZNRv5Š]NÚÁu+Ân¦Ô#\u000C‰÷P\u0001ÀÏ\u0018l×/ðSâ\u001E—ñKL¸»’Ò;[ë%•§ÈùKE\u001A¸\u000BŽ~b8à\u000Ey¬*)EêTlÎÞÚÞ{èžó%̈‘ð„ƒ´c·ÐWŠ|+ý¢Ž¹­_x^ït\u0016³oþÊU$\u0017“?uˆé»¨üy¨•\u0019¥v‹çô)ü>²wñ†¿¥ìݍzñÊö$LØ-ß\u000BŽ=ϵmü/ÓÒæþËÅ3Ü\u0015_\u0015ÛIyæv[”•¼äú\u0002@­9ì‰jìú\u0006Î\u0007¶Å ˆ‚Ð+yœm8þ\u0011ïøVNŽº¥ýÅÌ~{A¾òæ00p¨‘¨Lvùˆ=ÿ\u0000c:¶Õ#HÂêÆm¬ï/ˆ­¡)òF$ó\u0015†G\u0018Áür*Ο¦ÜYkFñæy\u0003E%±“\u0019\u0003f\u0018žýÈ\u001FþªÆS{ص\u0013WYðõž¯y\u001AÀL2G\t‘¥P8=\u0000#Ï_¶t Ó\u0019îL¾`%QH\u0018\u001CuýkÐÀa•[ÊkC:ÓåÑ\u001C‹iך­¾ž\nͪÛÄË#¯\u0008’C\"N{\u0016\u0018õÆqZÖR=Ž£®ê\u0008\u0003)Õ­bÀ?x}œ|¤öù¿Îk:‘T'(ôÛïÔi¹¤úœWíYáX¬¾\u000FŸ\u0012Eu2Ï6­c\u0014È\u000FÉ,lÎ\t<ÿ\u0000x\u000EÃô­ÏÚÖhÓà}Ɯ\u0008Y#¿±m¹î³n<{\u0003]8t”bÒÔÉë&›Ðüë‚å ‚[O)H”˜ŽF=*{=\\Ciyhm#Ý*(‘‡Í\u0019Sœ©÷é]jr¶¨n\u0010èÏ´?f/\u0016økQ𽟇-\u0013Q²R&»{ך~Ê\u000C|@ú”>>˜tôFT\u001FóÓ?Òµ¥)=,g$“Ñž\u000BñgþG\u0019\u000FúšõOý(z>-ÿ\u0000Èóã?û\u001B5_ý(zÜ\u000B\u0005c¶—ƺ\u0012\\cÉ3Ë»?õɱXÞ\u0007\u0017Ç[²6`›\u0085ó]1þÌlOéCv\u0013=7öµÓÿ\u0000á\"·µ´Æão¹ñ\\ÏÄ]fM\\ÛÞ\\FVú\u0011±‰î+)nCÜÁð\u001Ež5Ÿ\u0011èúH”Çæß \u000F\u0008ÁÏ\u0019ã<T~\u000C½¸Ó¼C¢_[Ý¥œ­¨D†â@\nÄ\u001Cíf ö\u0000šÎªn\u000EË×SëOŽVÞ*_‡:Ž£#5Î¡i&¦Š>c\u000C\u0000±P=\u000Bì|vÛÇ|÷>3ñÿ\u0000†¾\u001FÉaáýe’+m~T0g¢¥¹PÙ8À8l\u000CŽy¯\u0012iÁ¶•Î¹Æ2Ððÿ\u0000Ø«UÓ!ñ%ׇõ'\"ÎõíÚ\\\u0004lJHöFF+Þ4o‚\u001E\u0002:´_\u0010ü3¨'™yk\"\\Dƒn哒@\u0004©Á\u0000ä\u001Fºªâ#;;jb¡n§Ï—¿\u0002üAàO‹\u001A§†çSn4­UîìåÆ\u0014Ç¿r\u0011žÃÞ¾šñ׍¼=ãcÃÞ\u0016’ÌMâ\rØ̺¬Ñsæ\"ìX\u001AAýâ\u001B¹9#5¢Ä¨Çk“Évs^\u0004ø-ŸÃ[M6úX†«k}qx“BÁ†ç¹}¬\u0008ã\u000CúÕínúøß-‡–mÓËÝ\u0014xãn0\u001B·qÿ\u0000ë®\n•\u0017Tm\u0014ú\u001D®‰á\u001F\u0015Í¥.°í\u0002¨*Ï2\u0003¸çå݂p\u000Ex8ªö\u001Aþ§\u000EšúKÍu\u0012ˍà\u0015Øä\u0010W<g×\u001Dz×74-®æ֑¡åÁ\u0004öV0³­ÂÛK\u001A¶r\u001Bs©b{d€IéŸÂ©èփP\u0006ÒbÁ‘ÌêW¨Ç|ÿ\u0000/¥mNQms-\u0008’hÖÕîßE¶‚ÂÊ1-ýË\u000B{8؏™Ïväp:±Èúó[þ\rÓ­´Y ñVµ\u0010Ôn’9c³Ž_¹€ØÜ@ëÈägëÒ½9ã\u0015”iè¿­ŒT:³‚{Tðm›}®àî€5þ¥3õ\u00138à}yÏN8ìqZ¾ ðˆÕ\u0012sâ\r@Eg4¯3@\u0000Ý+\u0013žF:väôìkš—\"|ÒM²äÞ×8)|s'Ä?\u0003xŸÄV֋?Øíob±†tܒI\u001C|IŒŒãª‚qžNzV§ˆ<_á]3Âú¾›\u0014eg¦ÛÏ\u000C×\u0011Â\u001FÊ\u001B@'Ë?{\u0019\u0007\u0004\u0001ƒÉ\u0015œjZ¦ŠÞE¸ûºŸžv÷—PÙϦˆÔÃ4ŠìÄr\u0008ô5j\rW¶±¿ÓáÇص\t\u0010LJ\u000C¹}qø\u001Aõo+jŒÒ‡sìßٟâG‡õï\u000FXøF6\u0011êZt\u001BZ?ï\u0001ÜW;û.|\u0019›FŠßâ-ä¤Kyn~Ï\u0010ì­ÜÖÔ\\­®ÆSQèϕ¾.ÈõãOû\u001B5_ý(z>.ÿ\u0000ÈõãOû\u001Bu_ý(zÜ\u0011oàµÝ¥Œ´{«¬y\n.ÃçÞ\u0007\u0003õ®_A‘ῶ‘N\u00181\u0019úƒIì&z?Æ\rOM¿Õ\u0085\u0085¤j*of\u001DÍKªøkL¾Ó&Õd—\u0013E\u0016A5›D3ËâHîn ·%•\u001AeBW¨\u0004ö÷ükÖ¼\tû4øÇâ/‡\"ñæyk$K;¬öä‘*\u0004lgӟ¨ëYʤc»\u0004®{_í\u0007ðóÅÿ\u0000\u0011|5àÛÝ:Üj\u001A†\nFó¨ò¤¨\u000B3)À\u0004°\u0004㌚ïü;7Ä\r'@·´’ÊÝ.¬í\u0012\u0008RIyeŒ\u0000\tÀoJñUiӓkS¯’-Yž=ðÃÂ\u001F´\u0007ÓAbãO$\u0019`y\u0015\u000Fï.\tÁúb½\u000FXý¦|{àhN•â?\u000CI\u0015\u0085Â\u0018VHœ20\u001Cc8Çê\rmyUZÅ_úó3vŽÌ»û\u001Aø3Å_\u0014eøƒñ\t#FšûYXf\u0012H  †6'nâ8\u001E`éé^qð\u0013ãí§%¹ðkï\u001A.¥¬<ÐH§cmœ\u0005ebU½9ÇçÀ«i(®dÉë£>­´°¶žêKÙàIãY6©\\\u001DȲ0àûã?hé—\u0016›RÆÔÅÀ\u0004óÁ\u001C\u0000\u0007=+Ϫﱽ7b\u000Bí\"ÂâK{u\u001F>Ö<\u0008<gù⺭?OÒßPH¤‘\u0004QܲHùàóó\u001Cú\u000E1ïJ4äݘÜÖèóyWSðÖ¨šzY›‰eƒí,±õ(\u001Bo\u001EÀqø×gâÍ\u001EÏSø‘á½\u0003JÕ\u0011\"}\t¥žà)m‚W*PÝp\u000F\u001DýkHÑj|‹Psº»0 ñ•ðÒÐXر\u0010ÜÈÅ×\u001Bƒ9Ë`œvÇ\u001F­I¦¿ˆtƒ©izx­áÔ$\u0008do›~\u0000l¤ST§=cv¹’Üç5Ÿ\u0013èV6wZ›,òê(¼,èÛÉ=—<\u000FÀýk_R¿Õ¢\u0016÷Zž•\u0014‰\u001C蟸\nI\u000CˌŽ\u000FQŽü\u001AêUêQWö*œf÷<G[ð_ŠSOø\u0085ã\u001D%ã»»Ö4¤³†;â°Ç\u0014m\u0013\u001B†Q!\nÍÐ.q’\u0007^•«ûPxïA»ð^£f·QÆ÷©$vqƒ·Ì(pÁFÒ2¹É\u001C}A¬è՝JšëaÎ1Šì|A\u001E™®-„—g”éÑÝù\u000F \u001F —\u0019Û»¦qïL¶¿××Mm=n\u001CiÍt%h³ò™1Œã×\u0015éÞV%(u>Êý—þ0[øžÂßÀW1•¾Ómvݝ\u0016µ?f¯ƒºgƒô›O\u0018͙5]RÐ9'¢+v\u0015­\u001E~»\u0019O–þéñ_Åÿ\u0000ù\u001F<mÿ\u0000cn«ÿ\u0000¥\u000FKñƒþGÏ\u001BØÝ«éC×@\u001C­¼\u000C‹*œ2œŠbu\u0014¥°¥±¸þ\"Ô/#[)e>OqëXõ™\u0007Ù_±÷Œ|'¦è\u001A\u0085®£\u0002³ZFdºòÛ,VG‘P\u0014\u001Cä\u001EHî¸çÓÉ?eûvþÙ»º‚C%ЇÊû6\u000E\u0008(Ä1Ç^FÑîs^f>*-LދoCïý\u000Fῇ|Ym«kzEͨ}.ÐÜÉ\u001B\u001C³.pJ®z¯Zâ~\u001Ch×z\ríϋõ‹‚š\u0085ޘlżxÙ\u001A1ËgՉÇ>\u0000ÉÏ=5\tÞè$å\u001E¦„Þ\u0010ðþ­\u001DŎ¯ký¡\u0004r\u0010þ`\u0004\u001F0\u0000XÂµô»•t¾»Ýòù€7°'‚{úë+%¨)3ƒÀ~\u000Fðuä\u001AE¬k¥ÜC¾\u0018Ùså˼ž:ýz÷®³Æ\"ÞHì.Ô\u001Déz¨JqÃu?¥e6Û¹¢Ñ\u001A\u0016>\nӇïÒù<Ò˹NíÇë•Ç\u001FZßµºGòÙ$u \u000F¸qž*å\u0018¢\u0013l©iágŒ\u0017ŠíC/M»²}:\nڊò(Ü»É#($á¤ÀüqIB\u000F©MÈç´_\tëº\u0016­\u001F‹ígqsgn¶ñÊ@c\u001AîܸÝïÓ#šêˆ¢¹FѬØ\t®x.\u0006\u0004JO;3Ü÷'“Ó dUƌc¬[¸:­ü[\u001Eiá/\u0016¥¾±×<ØoäÔ$žFhÎߜ\u000Eã=O9é]ö½£Úê÷×\u001A¼vñ\u0085±0i©\u0018Þ\u0012<eû\u001Cíäã¾kªiaýůùÒ©®Ç1â{ø.ím~É2ºÍx©½\u00088ùI\u001F®*¥ï\u0085ã¹·iÒ\u0003o6ö“\u0008~éSÓê)ÖÅ:Ô앇\u0018r=OŒÿ\u0000h/\u0012Ïý—¤x\u001Dôöf†åõ\u0019u\u0017R\u0003Ë>æhã큿æäò\u0007§;¿´§þ-jÖpø¹­>ÙàÝ>\u0007KVµREž\u0018«4‹÷€b¿xñێï\t\u0017g+ê÷\u001C¥\u001Ek5¡ó´V\u0017¿fyÇü{£€yã?JbXÝý–;‡”\u0008¤—nÜóõÅuZVÔ®htG؟²wÅÍOÅ\u0011\u001F\u0002^ÄX鶁¡”tv5ê?³ÿ\u0000Ã/\rx'Ã\u001Amí”J׺\u0085šMq?ñ1aœgÐWE%+jsÉŽ\u000FϟŒ#\u001E=ñ¸ÿ\u0000©¿Vÿ\u0000҇§|e\u0018ñÿ\u0000ŽG§Œ5ý)zÜg#\u001A–`\u0007½_ðü1Ïz±¿Ýû=Áü¢b*e°¥±\u0004E\u0010‚Ý0j3’p\u0005A™½à_\u001Fø‹áÞªž!ÒfÙ8C\u001CˆßvD'%XW?.>^9Ç4§\u00055i »[\u001Fpü9øý¥xËM7WRù7¨Ÿ¾Œô\u001BFN\u000Fç_ ü>Õg°Õ µB6]M\u001A¶GB\u000F\u0007×\u001E¼ò+̯ƒPNPz\u001BFwÜý.ø{=ÕΛ=ÊZÈÏ«È\u0004Q’±“ò\u00021œœ\u000EžýkËt\u001F‹:—ƒ\u0012\u00185XÞ\u001F²C\u0016e\\ò\u0013\u001C†à\u001E>\u0007\u0015Á\t[Ý5’¾§¯eéƒi!9ýÅíÓ\u0004ÿ\u0000Nk\u001BJñzêþmø!RAç\u0000½˜€\u0006qïŒcŒtâ²æW³Ciô:ë=\u000EÕ!g[‰\u0001\u000E\u0017\u0001²0X(ÁýjîmäŠÈ+‚p€œÿ\u0000²Mm\u001A\\Ö%Í«›þ\u0016ðΉ>¥kqqmçYC«Ék*±Æ|ȳ\u0016yêÄ\u001EÜb­AªN!×4;R‚+×±—\u0003\u0019/\u001E<²\u000FQó\u0003œ\u0011Ô×M:Q‹nÛ?̉M´ŽŚlZF¥\u0005å¿Ë\u001D¥ð€#-\u001B\u001F—8ã uâ§ø‡g\u0004Oe©A*ýŸT²K¶ˆ\u001C˜‰ãœdlöëX×\\’ºÛ¡p\\ۏ‡U·•u\r-mÖånîâ‘%\u001C\u0018ö’Ì\u0017Žà~ëO\u0011ÚiM\u0005à‰·C2\u001F-92m=\u0000\u001E¸Æ3E:©·~¡(´u\u0013[M›ÇT\"5‘\u0019¿ØހàýNk7Á?\u0014ôo\u0010¦«¦”0µõÆ$Žl‡„+\r¹\u0007Ô\u000Cò8ÉÇZÚ2¦Û³!ÆIjeøoŞ\u001F–ËPð”RÆ÷\u00167÷0ÝÁÁ ;\u0012¡‡÷H?ΰüKðí´\u000F\u0010Mñ#I„ºßÙ¤:”\u000Bœ•ˆ¶×Qê2sÞ¢QpÕ\u0014š–ççÿ\u0000ğ\rZèúߊ$µ–\u0008­,¼Myi\r°?2¨‘¶€=\u0000â£ø§G­kºôú„~}VKqê¦V;°{W¡OàM²—Cé_ØËâ/‹5ô½ð½Øi´Ý>ÝL\u0012œü‡û¹¯nø7£xGÃ>\u0015Òmth£\u0011=œo$‰ŒÈÄrI®ºqkvs¹'²?8þ2óãÿ\u0000\u001CŸúœ5ý)z>20o\u001Føå‡Cã\r\\ÿ\u0000äËÖÅ#˜ÓÝ£œ08>\\ƒ?U5\u0004mµ³ì•L¶\u0014¶\u001E’4dyÁ¦\u0003ÍA\u0016-éz}Æ«uo§Âžd÷3,q®z³\u001E\u0007ãZ\u001E\u0012ÑõÝJö+.2f±–9üÌ\u001CFÀås€{Š‰Ë•\r#×þ\r~Ϟ-Ô<G\u0015έ§Éken\u000B«\u00120Xœ`\u001F^¿Ïµzæñ/X²xe{\u0019<à½@êG#Œc\u0019çšñk×­Ur5eätÆ1‹º6>>ëº\u001F„4I4I\u000CRÜ^ÅöXÑ~ñ\u001Dۜð\u0007ëŠñ\u000F‰š/Œ|u«K¬Ý\\\u0085TGk\u0013+\u0000‹ÔöêOZXL*ož«ù\u0005Iô‰è_\u0008~6øb0<3ªÿ\u0000¢\u0004c±˜7\u0000\u000EŠsèyç?\u0085y¯ÃŸƒ\u0016>#žîÇ_žki¡‘\u001A'‹;dF\u0007=GPG¯zëÄƋ~fQæ>繖ÛKÓ?µÒê9¡HŒçxÚp çX~xúW9áý#J´ð¶©¤Þê^l‘iàZ’É–*9È,9##€~•çÊ/•É-â®ìÏ.ñgíyá\u000CÉ\rŔ?n»‘Jy\u0010r‘ª7VrG-Ø\u0000kæ-GáV»\u000E§w\u0002É\u0017Ù¢¸‘bf$’ˆ\u0007§¥zt¨SKš÷0œåµªôÿ\u0000Û\u001BVø•\u0019€xrÞÊ\u0018\u0014œ£3\u0016$嘆$\u0002IçµyïìÍ}¦ü.Õ5\u001B½nÒ\u001B¸ç³X¢m»±ó‚ÃiÇÞ\u001DNUnUk+Š)÷>¯ýŸ†«ã­\u001FÄ^ Ö-V-\rîÕl%‘\u0017.cŒ\u0019~s‚\u0010\u001Cw=O5Â|Cý¡mõ\rÉà\nÝl­n¶CpÑ VhFw&Aîqž:dw®eMMê·û[ihp\u001F\u0017~#Í{«-·†eû-²êV¨.€\u0019eB\u0003àÿ\u0000tójãô½2\u001F\u001Ck\u0016^\u0011³½ŽÞîêP\u000C³î\t\nÿ\u0000yŽ:\u000Fl×W±\u0085:N\u0017ßó3ær•Ï®<\u001Dâ\u000BËÝ6;{öI\n&Ôu\u001DN?‘ôýkžÔÖãÀ>\u001BÔõS©Ãvt½.â引\u001F¼\u0010!b@ÉäÐgë^e7;ØÚJ;Ÿ\u000Büx³ð¾¡â\u000F\u0012ø–ÇTAxþ'šÌéê‡*±.֓vqË\u000FNõå÷7òÞ4“ÈKÝ\\\\4²Jǖf99úšöiÒQŠW1æÔ÷oÙÛã\u000E»á×¹Ñ.äy¬–0aR~á®wᦃ.–²j·#q–1±~µ´43z³Ì>\"ßiø³Äú–1ö¿\u0010ê\u0013ãýù˜ÕO\u0017\u001DÚî´qŒê×Gÿ\u0000\"\u001AÙ\u0016Œ¸ñ¸g§4G÷\u0085)l'°ò€SÄo!TQ–b\u0000\u001E¤ÖDžÓû*øŸKÐuÝVÆþH¢‚öÂ9\u0011æ`«¾'À\u001C÷!‰ü+èOÙïகð×LT½eñ\u0005í¿úSžDjüùkÛ\u0003\u0003žæ¸qN5\u0017)QÑÜît½oÃ\u0017\u001Ed¿mµ‘ü¼ƒ½1n\nžò[Uƒ\u001A\u0085ÏR£^Sj:Xé·6·+j7ºV\u0016Eò\u0008¨@0yÆ}úR<–\u001B—lqÊ­×å\u0014t\u0011§mÉt«Ë[Ç[ÛdF‰þI\u0018\u000E\u0003\u0011Æxã8?•\\´Ò¢œ‰!‚%P>ogJ¨T›Ù\\\u001A‚4~Ý\u001EV'Lc‚H\u001E¸«vÚu¢íìˁœ\u000CWde.¨Åµ}\u0005µ±Ñ$–IÚÂ\u0012ò\u0010\u0019¶\u0002N8ÏJ¶š|\u00087G\u001EÂrxãüæ´S]Q/R톋áF’9±­Ÿ´™‰>•šö÷\u0016ß¼Ži\u0014\u0003ü$Õª¶è+\u001EŸ¡ø;áΣ\u0008µ¹ðՃÛ²Ð&sé’+͖âõÈ1ßΤ Æ\u001Dº~tÞ!uˆrùž´Ÿ\u000B¾\u001FÚ\u0010Ö\u001E\u001C²Mìså¼~B¼³ÏÖ\\mmRçŽ8vàgëS,D_Ù\u001A‡™ë7\u001E\u0018øw¥YOs­è6sZI\u0019UW·R[=²W¡¯%Ôµzê/²Ï©Ü<[\u0000Ú\\à€r*]xôAfÎ\u001FŽW\u001A\u0004¿\u0010|XÚ-ŒvZd:ýÄ6öñ\u000C*\u0008›iÀ÷ ŸÆ»OÚsá$Þ\u000E՟Åöj_KÖnæ'¬W\u000EI`}›¨÷ÈôÏ]*±šÐOb焵k\u001BÛ(\u0015NY#\u0000ãµq^\u0000F\u0085L nÈïÚ·LƒÏ<XA×5’:\u001DVë\u001F÷ðÓ<JÛµ}U½u+ƒÿ\u0000šÕlZØ£n»¤Uõ4¶€™P\u000E¼ÿ\u0000*%°=‹²¯–\u0003\u000EH¤¸uÆÞõ‘'¤xoÆsßÄ!iÞ9QFà\u0018ãNkŒð´‘$²;6\t\u0001TW=H%¨Ñèo©_³\u0012·scýöïøÕ\u000B)Rf0ŽY‡A\\Î7-Jƀյt Ç}r¹;¸•‡ò5“yw\u0014Ga8\u0002fW5Β\u001F\u0012kÜ\u0006Õosá¸—É«›´½·vùOAúÓQh–ÑØÇâ=}FFµ¨Žü]Î?özÀY>_3?(ëíUa\u001D|^3ñTj\u0000ñ\u0016­ÀÇü~ÜñÊä£Õm\u0017;Ÿ\u0000U{6+’ü@ñšýÏ\u0010ê¤ûÝΛÖ\u0005\u0085å­Óª£\u0006\u0000\u0002Ô{0¹ÕÛ|Nñݳ\u0007\u001Aíé#\u001EWoæM6ÒÒÞ\u001BAªM\u001E '\u0001˜qG#\u0015Ñyþ/xýÈq­Ü.\u0017o\u0007¯× Öoö–’Œ\u000Cm–9\u0018íùÐé4\u001CÈԓã\u001FÄ\u0085\u0008WX—)ÎJFsù©«SøÂ2i3ZÜٕt^$Oÿ\u0000UO³\u001DÏ-ø£ñ—Å>,°\u000B^êFæÞIciWd`\u0002‡#•PsŸzó-Q kû§V+\u0011¹‘“w\\gŠè§IGQ6z\u0007\u0085®\u0004Vê±°Î9®gH¸Ô\u0019À·ÿ\u0000QîqÇÖµ$å|@ÅõMIS9?÷Ù¨õs›ûÓÜÝËÿ\u0000¡\u001AÙlZØÿÙ"
}]


If this works, then the only problem I can see is that binary values which are valid UTF-8 will be double-UTF-8 encoded via this process.  I don't see any way around this, but I'm not sure how often this would happen.

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

ejball

Base64 is the de facto standard for encoding binary in JSON and would certainly be my preference over using U+0000...U+00FF, especially in light of the difficulties you mention. It doesn't seem intuitively preferable to Base64; either way, the client needs to know that the value is a binary blob and not a normal Unicode string.

Perhaps an encoding prefix would be a good compromise? e.g. "ThumbnailImage":"base64:/9j/7QAMQWRvYmVfQ00AA..."

Phil Harvey

Quote from: ejball on February 03, 2014, 12:13:55 PM
Perhaps an encoding prefix would be a good compromise? e.g. "ThumbnailImage":"base64:/9j/7QAMQWRvYmVfQ00AA..."

This sounds reasonable.  I'll think about this.

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

Phil Harvey

OK.  I think this is do-able.

The only complication is when reading back a JSON database with -json=infile.json

When reading back a file like this, the value will be converted back from base64 if it starts with the string "base64:".  The problem is that this may produce funny results if any value starts with this string by chance.  But I think this is a reasonably remote possibility, so maybe worth the risk.

Unless you hear back from me, this will be implemented in ExifTool 9.50

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

ejball


Phil Harvey

Quote from: ejball on February 08, 2014, 09:09:18 AM
Thanks, Phil! Looking forward to it!

Version 9.50 was released about an hour before you posted this. :)

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

ejball

Awesome! Successfully extracted and decoded "PhotoshopThumbnail". Thanks again!