たまりば

  パソコン・インターネット パソコン・インターネット  三鷹市 三鷹市

Twitterの画像の扱いがやっとまともになって嬉しい
2019年06月23日 00:23

大昔、TwitterにJPEG画像を上げればJPEGのまま、PNG画像を上げればPNGのままだった。まあこれはこれで最高ではあった。

それが2016年1月、基本的にPNGはJPEGに変換されるようになった。
ただし、1pxでも透過部分のあるPNGはPNGを維持する。(容量の上限もあり。3MB?)

この仕様の問題点は
・PNGの方が容量が少ないようなファイルは、容量が増える。
・PNGの方が望ましいような画像をPNGで上げたい場合、目立たないよう隅などを透過する面倒な作業が発生する。
・PNGをPNGで上げる操作は本来意図していないであろう裏技であり、知っている者と知らない者に不公平がある。
・JPEGの方が望ましい画像(JPEGの劣化はさほど目立たない一方、PNGでは容量が非常に大きくなるもの)もPNGで上げられる。ダウンロードに時間が掛かったり、ギガが減る。


それが先日、2019年2月11日の新しい仕様で、透過PNGの裏技が使えなくなったとともに、一定の条件でPNGを維持するようになった。
具体的には、「900×900以下」または「256色」または「JPEGに変換した場合よりPNGのままの方がデータ量が少ない」場合にPNGを保つようになった。
(なおJPEGも、TwitterのJPEGよりデータ量が少ない場合に上げたままのJPEGを保つようになったようだ)

これは上記の問題点の解決を意図したものだろう。
・PNGの方が容量が少ないようなファイルは、PNGのまま容量は増えない。
・PNGの方が望ましいような画像をPNGで上げたい場合、PNGで上げるだけで済む。
・裏技は無く、公平に処理される。
・PNGでは容量がかさむ画像はJPEGでしか上げられないので、適切な容量で閲覧できる。900×900制限は、小サイズなら容量も少ないので許容ということだろう。

新仕様に問題が無いわけではない。

イラストなど劣化の無い最高の画質で見せたい/見たいような画像については、新仕様では無劣化は不可能になった。
これ自体はサーバーのコストとの兼ね合いであり、仕方ないことだ。
だが、それにしてもPNGとJPEGで落差が激しすぎるのは問題だと思う。
Twitterで使われるJPEGは85%・サンプリング4:1:1という画質のだいぶ低めな設定なので、色がくすむなどものによって劣化がかなり目立つ。
そしてPNGを保つ条件はこの低画質のJPEGより容量が少ないことなので、かなり厳しい条件となってしまっている。

一方、900×900の上限はかなり緩すぎると感じる。このサイズの無駄PNGはかなりの大容量だ。
風景写真などJPEGの方が望ましい画像も、このサイズ以内ならPNGで上げられてしまう。
わざわざ写真をPNGで上げる人もそういないと思うだろうが、フォトリアルなゲームのスクリーンショットはよくPNGで上げられる。
また実写写真でもたまに見かける。MSペイントのデフォルト保存形式がPNGなことや、ファイルでなく画像データをそのまま投稿画面にペーストすることができることを考えると、意図せずPNGで上げられることもあるのだろう。


総合して、問題はあるものの、基本的には今回の仕様変更は改善だと思っている。
以前あった無駄や不公平は無くなり、新たな制限もコストとのトレードオフで納得のできるものだ。

一応改善案も示しておこう。
PNGとJPEGの落差が激しい問題に対して、現状のPNG・低画質JPEGの間に例えば90%・4:4:4程度の「それなりに高画質のJPEG」を挟めば大分印象は変わる。
単純に判定するなら、「PNGは高画質JPEGより容量が少ない場合PNGを保ち、そうでなければ高画質JPEGにする。JPEGは低画質JPEGにする。」という判定が考えられる。
JPEGをPNGとして上げると高画質で上げられてしまう欠点はある。
もっと適切な判定をするなら、何らかの指標(単純なPSNRで十分だろう)でJPEG化した時の劣化度合いを測り、劣化が激しいようなら高画質にするという判断が考えられる。
サーバーコストとのトレードオフだが、まず900×900の小サイズ許容は無くしても問題ないだろう。
また、現状PNGを保つ場合はタイムラインに表示される縮小版もクリックして表示される拡大版もPNGとなっているが、縮小版はサイズがかさむ場合JPEGでも構わない(むしろ望ましい)だろう。
拡大して見る画像は少ないから、これだけでかなり通信量は抑えられるのではないだろうか。それでも足りなければ縮小版を更に低画質にするのもよいだろう。