棒人間FAT

テキトーまとめ

Twitterの新機能Fleetは文字数制限が無いらしいので画像を意味もなくBase64で投稿してみたかったという話

TwitterにFleet機能が追加された。

Fleet機能がどういうものなのかはさておき、こういった新しい機能には文句を言いつつもとにかくおもちゃにしたいのがツイッタラーの性-サガ-というもの。

そこでFleetについて調べていたところ、以下のようなツイートを発見。

お前…文字数制限無いのか……

じゃあ文字で写真送るしかないな(?

思い返せば、画像も元を正せばバイナリの集合でしかないのに、それを意識したことはなかった。なんとなく、画像は画像としてビューンと送られているようなイメージ。

昨今はスマホのカメラも性能が向上している。実際、私の持っているスマホでは1600万画素の写真が撮れるらしい。一昔前のちょっと良いデジカメじゃん…

 

ラーメン

おいしかった


先日撮影したこの美味しそうなラーメンの画像は7486531バイト=59892248ビットらしい。つまりバイナリデータにしてテキストで表示すると6千万文字……一般的な卒業論文が2万文字~4万文字なのでこのラーメンは2000卒論くらいである(?)

いくらFleetが文字数制限無し?だとしてもさすがに6千万文字も表示したらもはや文字に見えないだろう。FullHDの画面でも2073600ピクセルしかないのだから。というかそれ以前にTwitter君とスマホ君が耐えられない気がする。

いや、それでも私はFleetで画像を文字として送りたいんだ。

そういえば、似たような話が合ったような。そうだ、MIMEだ。

元来EメールというものはUS-ASCIIのプレインテキストしか送れないものだった。つまり画像も送れなかった。そこで、US-ASCIIだけで表現できない文字や、画像、音声などの非文字データを送信するために作られた規格がMIME(Multipurpose Internet Mail Extension)だ。ちなみに基本情報技術者試験に出題される。MIMEはデータのエンコード形式として、7bit、8bit、binary、quoted-printable、base64が指定できる。このことを参考にすればFleetで画像を文字として送る野望の実現に一歩近づくのでは?

上記の中で一番文字数が少なく済むのはBase64だろうか。Base64は、データを64種類の文字で表現するエンコード方式である。具体的には、A~Z、a~z、0~9までの62文字と、+、/、さらに余った部分を詰めるための記号として=が用いられる。つまり文字は65種類だし気持ち的にはBase65なんだよな

エンコードするときは、元となるデータを6ビットずつに分割し、各6ビットの値を変換表を使って4文字ずつ変換するらしい。

例えば、"ABCD"というデータがあったら、

01000001, 01000010, 01000011, 01000100

バイナリにして、

010000 010100 001001 000011 010001 00

6ビットずつに分割して、

010000 010100 001001 000011 010001 000000

2ビット余るので4ビット分0を追加して6ビットに揃え、

"QUJD", "RA"

変換表で4文字ずつ変換し、

"QUJD", "RA=="

2文字余るので、=を追加して4文字に揃え、

"QUJDRA=="

完成!

人間の手でやると死ぬほど時間がかかる。

ちなみにBase64エンコードするとデータ量が1.4倍くらいになるらしいので、バイナリで送れるならバイナリで送った方がいいし、よほど特殊な事情でもない限りこんなことはせずにFleetの機能を使って画像を投稿すべきことは言うまでもない。

先ほどのラーメンのデータをBase64エンコードすると9982044文字になる。6千万文字よりはマシだが、まだ300卒論くらいある。Twitter君が耐えられる気がしない。

でも……私はFleetで画像を文字として送りたいんだ。

何かを変えることのできる人間がいるとすればその人はきっと大事なものを捨てることができる人だ。

ということで画像サイズをめちゃくちゃ小さくすることにした。

極小ラーメン

極小ラーメン

そのサイズ実に50×50ピクセルの極小ラーメン画像を用意した。ファイルサイズは2735バイト、バイナリで言うと21880文字。Base64なら3648文字だ。大体0.1卒論にすることができる。

0.1卒論といっても絶対手でエンコードしたくないので、ネット上のツールを使った。以下が極小ラーメン画像をBase64エンコードしたテキストである。

data:image/jpeg;base64,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 

いや長…

まだちょっとFleetに貼れる気がしない。

断腸の思いで画像をさらに小さくする。

もう何が何だかわからない画像

ラーメン…?

もうドット絵ですらないミクロ画像である。これはラーメンなのか?

エンコード結果がこちら。

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAEAAAAAAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAZABkDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD7q8MaRGfE1ppcsMP9oXunvfgvaJcR25HlPDEUZGjMssbmT94CiRlWOTkLU+LXjbWPhn4EsdUuNa8Uf8I6tzb2Op6sF+wyWMcsXMqwxbt8okG0QpAE+cndGEZR4x+3N8IPE3if4+61qvgz4hSeF9Y1C11Dw/b6RHG32XWJ18xp4ZJRuWKU24iEQIbIicbCu7bxN1+174x8O/8ACUak8fj23sNaW+WwtL/R4rvUbW5u5bIQPZLve0Ww06G3lKt9qj89pdr2salHH4Piq9HCyeFoe611vZ3S3ab1u/XTsftGF9vj5+1rrtZW0ab2TS0t569VfW30BoHj+Pxlq1jouoWjW+p6wqjR9QvLBdLk1GdwTHazwAbQ7lWVZo/+WmxXGJFK4f8Awklv/wA+i/8AfEn+NcV4F+J/hHx/408Fa/f6k0Pi3RVlsLO90+MwWOsWThXkS4hLvElwHjSZfs8jyPIgQKwkVa/Rf/hEbX/nw0X/AL6jrTCZWs0pLERkk9m0kr/JaJ97eRtic2nlU1Q5W1a6u3p6Pdp+e2p8a/Fbwrb/ABj1jV760h0/+3bmYGezkWOMXrxupinhZxjzwqRqYyQWMcTKWYFRm6p4H8S3thpVk/h26uZ7wSRXlvJbrp1xlXIAmWZlfYwYgbUdiC5O7eCW6z/qdV/35v5tXeeAv+TZT/17t/6A1axp0MfFqvH34/aTs2l0aaa+ZzYqNXBSjKhL3ZP4Wrpejun8nc4H4X/s7voPxX0fx34m0C18Paxpaj7BpSk+c10jSMktyoPEMbMXVZB5kj7dqRpvz6P/AGX/ANRi8/7+SVzGhf8AIk6H9T/6MruK86piE4qjSXLCN7JPvu2+rZ6lPCLmdWq+aUrXf5Jb2SP/2Q== 

1787文字。これならギリギリいける気がする。

 

Fleet画面

成し遂げた

やった。できたぞ。

クソ小さいけどまだギリギリ文字として認識できる程度だ。

あとはこれをデコードしてもらえれば…

 

ここで私は大変なことに気づいてしまう。

 

F l e e t の テ キ ス ト は コ ピ ー で き な い 。

 

え…?

 

(´・ω・`)

 

(´・ω:;.:...

 

(´:;....::;.:. :::;.. .....

 

 

Fleet

完