Version 9 (modified by Sam Hocevar, 16 years ago) (diff)

--

A few notes and thoughts about compressing images to 140 characters for use on Twitter.

The first I read about this "competition" was here.

Discussion

Bit availability

Twitter allows for 140 characters in a message. UTF-8 is allowed.

UTF-8 is restricted to the formal Unicode definition by RFC 3629. It means that the only legal UTF-8 characters range from U+0000 to U+10FFFF. The following restrictions must also be added:

  • The 2¹¹ high and low surrogates, used for UTF-16 encoding, restricting the Unicode range to U+0000..U+D7FF and U+E000..U+10FFFF.
  • The 66 non-characters.

The final size of this set is:

$(2^{20} + 2^{16}) - 2^{11} - 66 = 1111998$

The number of bits that can be encoded using 140 such characters is computed as follows:

$n_{bits} = \mathrm{floor}\left(\dfrac{140 \log(1111998)}{\log(2)}\right) = 2811$

In theory, 2811 bits is therefore the maximum we can stuff into a Twitter message. However, a lot of these characters are undefined, not yet allocated or are control characters. As of Unicode 5.1 there are 100507 graphic characters, reducing the number of expressed bits to:

$n_{bits} = \mathrm{floor}\left(\dfrac{140 \log(100507)}{\log(2)}\right) = 2326$

We'll go on with this value of 2326 encodable bits.

Bit allocation

A compressed image usually contains the following information:

  • The image geometry information (width and height)
  • Optional colour information (palette)
  • Elementary picture elements (encoded as pixels, triangles, vectors...)

Given the amount of compression we are doing, there is little point in compressing images larger than 512×512. This reduces image geometry information to 18 bits, leaving us with 2308 bits to encode the image information.

Whether to use a palette or to encode colour information into the picture elements is undecided yet. We'll cover both options.

Strategy 1: colour information in picture elements

Each picture element will hold data for:

  • coordinates
  • colour information
  • additional control information

Coordinates could be absolute (therefore requiring 16 or 14 bits, maybe 12) or relative. I would favour a coordinate system relative to predefined image cells because there is a good chance that each cell will hold a point. Assuming at least 8 horizontal and vertical subdivisions, 6 bits can be gained this way. The final coordinate bit allocation is now 10, 8 or 6. We'll pick 8 to be safe for now: 16 X values and 16 Y values.

Using 7 bits per colour allows for the following options:

  • full bit range usage: 4 red values, 8 green values, 4 blue values
  • almost full bit range usage: 5 red values, 5 green values, 5 blue values

Finally, a weight value could be added, using a final bit.

The proposed allocation is then 16, allowing 144 points to be stored in the following configurations:

  • 12×12
  • 10×14 (wasting 4 point slots)
  • 9×16
  • 8×18
  • 7×20 (wasting 4 point slots)
  • 6×24

Strategy 2: colour information in a separate palette

To do.

Image reconstruction

Image reconstruction is an interpolation problem on a Delaunay triangulation. We use the natural neighbour coordinates to interpolate between nodes and obtain a first-order smooth image.

Preliminary results

Here are the results of img2twit using 140 characters, restricted to U+4e00..U+9fa5 (CJK Unified Ideographs). The 一一一一 characters at the end of some lines indicate wasted bits that the algorithm is unable to use efficiently yet.

梨攲蘝擟伕樱矚锵匽蟢礡唦廽咡湤靮纯棢豒诊诤度苲晦帶榽簃恑姄猪鶤恛濙謖疻療衙弔溘匀誀鐿酺檸璟重敧悪蔂苹鐥葷洞埒妩垇攽鮐殉肍尗籞粕惕瀣籶牯扇醩鷸蚕燳兑訪搪蛫觢飏僴氽莋鮩爘鰱輲枉愖賛恡果瀌鐉碴鮹俲鼿屦唄鱨韤涙钭廓屙嗿淒鰏灀冰鲲褠繛幚駩怜馕礁凳媬绖钙硫拲颵仆一一一一一一一一一一一一一一一

秮鋽問軡棩兟御囏疢晚逘新虀鲻嵹幣羒痢獥蠔秧辜攌峒鴷荚秇舝痎媉芾浆厾坖鮞纶斄鷖倍襵釷橁詝婘帘辡蚔槳鎣气窬偩掛炘忧阙膇样箠愍畄帠掭歜黵歫徯堠傌蕨鱏鷥軠慰糐掭辢猆孏錦戹濸巉魽嚲腫就恩沽厲測沎婲舁铧蠃犱闆醛焊茴鋈叶狝痺矹铓疿镭緄熐魆郗忤櫯嫟韥烥彸漻藉醺夝趼惻炘訶焝汒蝧潚诪躗丌一一一一一一

No image "Cornell_box.png" attached to img2twit

缶鮁咄諼覌诗婓拥汪宐霓藿犹秮詏溑鲋夬悹愃鯀觰侍鶴瑖篾垇腹盺珦鶞翐騃澫螈濾遰獥聃蛌乏迹泾魥蜐簤趩檸梿簇氡鰷髦粕岚別淈闽螢簋陊魗爯讂毃瓊兤疡淯貶抣尰娍壭拣鴆騰审枢譊朳椓琟沩姿摊瓩鍇協烼欦錣蒾捵洭罬獀柢垜侇躬挼磡佇賽乞灒懆藆鈗逘帠渝攝皓籅楘喋轁盔瞗挌朇亽一一一一一一一一一一一一一一一一

坍嗝昫噰碒荓奊镂胆鶊灦翵歓八罡睂釬篾媹蹛赜言齊瓰谕豭璞捘帔穼柞娀癥卢栀儻湐崽洧俅蔿尘犁倴苠鹯焋朓嗸哉姟箊燐蘫矻豣底氲浧喋婏氾藽憺鄐嵔武枣歚雛胠蓸豑逿娳繜婔涙賁醙淸鍮蕙悢龡賚厴惌鎛膟缷概狙峴鋱鮬刬杂蒟驇骧袹璹導练閦饥頖筎梋炻鼑鎄薕粮軝帨雡豄瀴诨霉窐搉裷橌漣濯超瞉秘驔包颾蘱礜鼦挈蓒諹

橺茁偼賚岞治警磈鲷濐掰耈揭耟磯僅鷉湂禓愢慌誸熱鲳涹楎瑍奷蕷鶬卵啲蚁魢緖拧藐一珠濄炒瀢矟锇棹峗鍭喞蘑苹溄饌剰茀謻槔餡躻毙黑豊掟縱躔章澯膙徝帯佲搙淎蕾嘞葚貐叴塰珄碲诂酧馼謣際繽鰈釸茠耰釨眍嵝鼓氵銨萓珙鹹螎糧獑臔樔縅慊纥褝嵘圁慍锌羟梕贪硘甚玿枭炁囋卨髧鐺乯一一一一一一一一一一一一一一一

Attachments (12)

Download all attachments as: .zip