風柳メモ

ソフトウェア・プログラミング関連の覚書が中心。

【覚書】 Twitter の画像サイズの変換など(PNG・JPEG)

Twitter に画像(PNG・JPEG)をアップロードし、これを表示する際、URLの末尾によってそれぞれ異なるサイズの画像が得られるが、これに関する覚え書きなど。



Twitter の画像サイズ種別

Twitter にアップロードした画像は、以下のような URL で参照(表示)できる。

https://pbs.twimg.com/media/~.<拡張子>[:サイズ種別]

サイズ種別は以下のようになっている。

:サイズ種別 最大サイズ(*1)
:thumb 150px×150px
:small 680px×680px 横340px(*2)
680px×680px(*3)
:medium
(なし)
1200px×1200px 横600px(*2)
1200px×1200px(*3)
:large 2048px×2048px 横1024px(*2)
2048px×2048px(*3)
:orig (制限なしか?) 横8000px(?)(*2)
4096px×4096px(*3)

(*1) このサイズ内の画像は原寸で取得できるが、それ以上のものは矩形に収まるよう縮小される(:thumbについては、短辺に合わせてトリミング&リサイズされているものと思われる)。
なお、各種別毎の最大サイズは2016/02/24時点。これまでも何度か変更されている模様。

(*2) 2016/04/13の時点で確認した内容に修正(いつの時点で変更されたかは不明、過去の画像サイズはそのまま)。矩形に収めるようにではなく、横幅を基準に縮小されている?
(*3) 2016/06/05の時点で確認した内容に修正(いつの時点で変更されたかは不明、過去の画像サイズはそのまま)。再び、矩形に収めるように縮小されるようになった(戻った)?


また、試した範囲では、:orig を除く種別については、アップロードした画像の種別(PNG/JPEG)に関わらず、二種類(PNGおよびJPEG)の画像がそれぞれ作成される模様。
これはURL中の拡張子の部分を、pngにしたものjpgにしたものとをダウンロードして調べた。なお、拡張子をgifにしたものもダウンロードできるが、中身はPNG形式のものと同一の模様。

原寸画像(:orig)の画像種別について

:orig については、2016/02/24時点で、表示(ダウンロード)できるのは PNG もしくは JPEG のどちらかに限られる(それ以外は 404 not found となる)。
アップロードした画像の種別と、実際に表示(ダウンロード)出来る画像の関係は以下のようになっている。

アップロード種別 PNG(.png:orig)を表示 JPEG(.jpg:orig)を表示
JPEG ×
PNG(24bpp)PNG(透明ピクセル無し、もしくは約3MBを超えるもの?) ×
PNG(32bpp)PNG(透明ピクセル有り、かつ約3MB以下のもの?) ×

なお、種別に関わらず、Twitter側での画像変換は実施されるため、完全に元画像と同じものではない。

トピックス

原寸画像(:orig)の劣化を抑えるには?(アップロードの前に)

24bpp(アルファチャンネル無し)透明ピクセル無しのPNG画像はJPEGに変換されてしまうため、PNG形式のままで表示(ダウンロード)させたい場合は、32bpp(アルファチャンネル有り)に変換透明ピクセルを追加した後にアップロードするのが今のところ解決方法となる。
ただし、32bpp のPNG 画像が :orig を付けて原寸でダウンロードできた場合も、元画像そのものがダウンロードできるわけではなく、Twitter側で変換されたものになる(アップロードしたものとはファイルサイズ等が異なっている)。

既存の画像については、例えばPNG 32bpp変換 | しぇ庫を使って簡単に24bppから32bppへ変換できる(2016/02/27現在、Twitterの仕様変更により、透明ピクセル追加の対応検討中とのこと→2016/02/28に改訂版がリリースされた)。

原寸画像を表示・保存するためのブラウザ拡張機能/スクリプト

PC 用ブラウザで、Web 版 Twitter の原寸画像を表示したり、ダウンロードしたり出来る拡張機能/ユーザースクリプト等。
furyu.hatenablog.com
いちいち :orig をつけたり、ダウンロード時に拡張子を修正するのが面倒だったので、↓の二つを参考に、独自機能も付け加えて自作したもの。原寸表示・ダウンロード共に対応。Google Chrome、Opera、Firefox(Greasemonkey)に対応(ブックマークレットは一部機能を IE11 にも対応)
hogashi.hatenablog.com
chrome.google.com

試行錯誤など


スマートフォンで公式アプリを使った場合、最大横2048pxあたりまで(アプリ側で)縮められてしまうのかも…?


↑は元画像がJPEG・3264px×2448px(3.39MB)だが、:orig で見ても2048px×1536pxまで縮小させれてしまっている