テクノロジー

画像をBase64で送るとサイズが33%増えるが、Gzip圧縮すれば「ほぼ元通り」になるという話 - Qiita

1: ugo_uozumi 2026/01/17 05:26

Base64で送るなら Compression Dictionary Transport (Shared Brotli) を使うと効率良さそう。まだAndroidとPCのChromium系限定だけど。

2: sgo2 2026/01/17 08:13

Gzip圧縮後のバイナリデータを受け付けるなら、そもそもBase64エンコードする必要は⋯という気もしなくはない。(事情は分かるが)

3: pico-banana-app 2026/01/17 08:21

「Base64は重い」っていう思考停止な通説に理論で殴りに行くスタイル、嫌いじゃない。結局リソース食うから一長一短だけど、設計の選択肢としてはアリだな

4: GARAPON 2026/01/17 08:49

なるなる。こういう記事たすかる

5: Magicant 2026/01/17 09:20

かういふ ChatGPT 文体の記事を見る度に「本当に実験したのか? ハルシネーションぢゃねえの?」と疑ふやうになってしまった

6: nakag0711 2026/01/17 09:48

マッチポンプ感…まあJSONに埋め込む便利さはあるんだろうけど…でも巨大JSONにはなっちゃうなあ

7: eggplantte 2026/01/17 10:02

テキスト化した物をバイナリ化するんだからそりゃそうだよね

8: civicpg 2026/01/17 10:32

受け取った側のgunzip後のJSONパースがでっかいJSONノードのパースでメモリ効率が悪いというのが通信のことよりもずっと問題視してた。

9: yorkfield 2026/01/17 10:37

Base64は64種類の文字しか出現しないから圧縮できる、なんてほぼ自明で、説明の流れで言ってるとは言え「謎」扱いはモヤモヤする。

10: beejaga 2026/01/17 10:45

何でこんな「どんな形の折紙でも広げれば1枚なのです、折るのは大変だけど」みたい話がブクマされてるの?もしかしてLLMの回答を記事としてキャッシュすればAIの電力消費を削減できるっていう実験?それって検索と何…

11: ku__ra__ge 2026/01/17 11:09

本当だわ。やってみたら確かに、10MBのjpeg画像ファイル→(base64エンコード)→13MBのテキストファイル→(zip圧縮)→11MBのzipファイル……となった。

12: megumin1 2026/01/17 11:25

当たり前すぎ。しかも記事の至るところでおかしな記述("ランダムな英数字"、"実質的な情報量 = bit"、"出現率 100%"など)が見られる。著者がそもそも基本を全く理解しておらず、ところどころAIに書かせたっぽい記事。

13: mohno 2026/01/17 11:28

当たり前なのでは。

14: gaudere 2026/01/17 11:34

Webのフロントエンドとかやってるやつは、結局、見よう見まねでキーボードをランダムにたたいてるだけではないかという疑いを抱かせる観測事例。

15: fusionstar 2026/01/17 11:42

この記事もエントロピーが低いから圧縮して三行にしよう。

16: kyoai 2026/01/17 11:47

ISHだとサイズ増えるけどMNPクラス5で圧縮できる話 歴史は繰り返す

17: honeybe 2026/01/17 12:05

お、おう…

18: amd64x64 2026/01/17 12:23

塵も積もれば。無駄な計算資源は使わないに越したことはない。

19: momonga_dash 2026/01/17 12:24

Base64エンコードしたら効率下がるだろうとは思ってたけど、3割増えるのは知らなかった

20: toyoshi 2026/01/17 12:57

氷を溶かすと水になるが、もう一度冷やすと氷に戻るみたいな・・・

21: dec123456789 2026/01/17 13:10

普通のサーバフレームワークならmultipart/form-dataもオブジェクトとして扱えるからbase64で送るメリットはほとんど無い。multipart/form-dataが前提でストリームにするか非ストリームにするかの選択かと。

22: miki3k 2026/01/17 13:20

AIっぽさが消えてない

23: fashi 2026/01/17 13:27

テキストデータとして処理したいから冗長化してまでエンコードしているはずなのにバイナリのまま送るのと比較するのはナンセンス。あとmultipart/form-dataはバイナリじゃないだろ

24: daishi_n 2026/01/17 13:31

BASE64が情報密度を下げるけど、圧縮すれば元の情報密度に戻る

25: poliphilus 2026/01/17 13:38

当たり前というか、バイナリで送れるならそもそも Base64 でテキスト化する意味はないだろ…

26: tSU_RooT 2026/01/17 14:04

Base64がランダムだと思ってる人、いないとは思うが、いたら暗号化と混同してると思う

27: tettekete37564 2026/01/17 14:04

面白いよね

28: pochi-taro00 2026/01/17 14:16

当たり前や、んでgzipを送るときはbase64化されるんだから33%増加するだろ 馬鹿なのかな?

29: hanagesan 2026/01/17 14:29

圧縮したやつをbase64にして、それを再び圧縮するという設計に、ウッとなる、そういう感覚を大切にしていきたいね

30: north_korea 2026/01/17 15:11

“この特性を理解してアーキテクチャを選定”することがあるのかは気になる

31: snowcrush 2026/01/17 15:37

圧縮率の話は別に問題ないと思うけど、multipart/form-dataはクライアントからの送信なのに、gzip圧縮を有効にすればという書き方はサーバーから送信する話に見えるのでそのあたりの理解がチグハグしてそう

32: kagerou_ts 2026/01/17 16:10

ここでいう圧縮て要はWebサーバーとクライアントが自動でやってくれるオプションだから、それに乗せるリクエスト/レスポンスにBase64化したバイナリつけたい場合がないとはいえないとは

33: irh_nishi 2026/01/17 16:24

圧縮できるのは自明だけど、同じ情報量まで圧縮できるかは分からんでしょ。まぁそりゃなるんだけどさ、バカにしてるやつほどプログラマーとしてはヤバいと思うけど。

34: udddbbbu 2026/01/17 16:24

ブコメの方が勉強になるのでこういうアホ記事も歓迎です とりあえずZOZO大丈夫か?こんなレベルのエンジニアに記事書かせて

35: zkq 2026/01/17 16:33

バイナリOKならjpegのままでええやん。パスワードかかるけど

36: umaemong 2026/01/17 16:34

『Base64はデータ量が増える』で思考停止してる人は見かけるので、『gzipでトントン』という発信はそこまで無意味でもないと思うな。(細部はともかく)決定的な誤りがあるわけでもない記事に対して反応が辛辣すぎる。

37: OkadaHiroshi 2026/01/17 16:48

本文には「HTTP圧縮(Gzip/Brotli)を有効にしていれば」と書いてあるが、タイトルだけだとどのレイヤーでgzipされるか明白でなく誤解している人がいる。本文を読まないのが悪いのだが、こういう不親切なタイトルは嫌い

38: spark64 2026/01/17 16:52

webのapiサーバが転送目的で画像データを送出する際、バイナリか、base64後のjson等をhttpdのgzipで送るか、どっちでも容量的には変わらんという話ならわからない話でもないだろう。

39: tmurakam 2026/01/17 18:20

いやbase64せずにバイナリで送れや。そしてわざわざ記事にせんでもわかる内容じゃろ

40: yourmirror 2026/01/17 18:27

理想的なサンプルによるBASE64+gzipの最適(化)値が元の(ハフマン)圧縮画像のデータより小さくならない証明ができた時点で「やるだけ無駄」の証明になるんじゃないのかな

41: lainof 2026/01/17 18:38

Gzip圧縮ってWebサーバとかがやるやつ(Content-Encoding)のことで、プログラム側では意識しないところの話でしょ?理解してない上位コメントが多くない?

42: FEMRIK 2026/01/17 19:20

みんな言ってるけど、Base64がなぜ圧縮できるか以前に、なぜBase64で送る必要があるのか?がよく分からん

43: hurafula 2026/01/17 20:33

Base64はテキストデータで送る必要がある視点しか無かったので変換のところの理解がうまく出来なかった… 精進します。ありがとうございます

44: petitbang 2026/01/17 20:41

「(圧縮)画像を送るのにBase64使ってもHTTP圧縮で結局通信容量は殆ど変わらない」だけなら、まあそうですね、で終わってる話なのかな。解説部分にツッコミが集まってしまった感。

45: lessninn 2026/01/17 20:49

そもそもBase64を使うときはHTMLとか他のテキストフォーマット内に埋め込んで通信の行き来を軽減するとかだろうし、バイナリそのまま送りゃいいというのも違うのでは

46: softstone 2026/01/17 20:51

え、良い記事じゃん。

47: acealpha 2026/01/17 20:59

シャノン限界の話かな?可逆圧縮の理論限界に近づくのは至って理屈通りではあるな

48: canadie 2026/01/17 21:05

gzipがbase64の復号に対応してる可能性すらある

49: tyhe 2026/01/17 21:17

“Web APIでJPG画像を送信する際、「バイナリ(multipart/form-data)で送るか」「Base64エンコードしてJSONに埋め込むか」で迷うことがあります。” と冒頭に書いてあるのが読めないブクマカが多くてびっくりする。

50: ryo_ryoo_ryooo 2026/01/17 21:46

ただわかりやすく解説してるだけやのに「あたりまえやろ」って叩かれまくっててかわいそう。

51: wushi 2026/01/17 22:14

タイトル見て意味なくない?と思ったけど、アプリケーションレイヤーではテキストベースのBase64を使うのが妥当で、HTTPのレイヤーでgzip圧縮でサイズを減らせばテキスト化のデメリットを取り戻せるという話。

52: richmikan 2026/01/18 01:01

いつものQiita民クォリティー。

53: atsushieno 2026/01/18 01:09

AIに対して失礼なコメントが散見される

54: nnnmmmlll 2026/01/18 02:45

「ハフマン符号は、Base64化によって人工的に引き伸ばされた「8bit表現」を、本来の「6bit表現」に再圧縮して詰め直します。」は明確に誤りでは