楽にPNGをTwitterにアップロードしたい皆さん,こんにちは.
Twitterに自分が撮影したアイドルさんの写真をアップロードするようになってから,Twitterによる汚いJPEG圧縮が気になるようになりました.
普段はラーメンの画像を載せたり,オタクと画像で会話するためにしか画像アップロード機能を使っていないのですが,推しちゃんの画像となれば話は別です.可能な限り綺麗な画質でアップロードしたいと思うのは自然なことでありましょう.
2018/12/20追記
Windows版だけ若干修正しましたがまだ怪しい部分を含んでいます、DnDが欲しいというご意見があったので対応しました。
http://studioykk.com/tmp/PNGJohn_win_v02.zip
この修正にかかわらず画像は複数枚同時に処理可能です
TL;DR
自分が期待するようなものがなかったので作りました.
動作が大変怪しいですが折角なのでリリースしました.
Releases · kai4562/PNGJohn · GitHub
Twitterに上げられるPNGの仕様
先に書いておきます.何故こんなことをしているんだと普通は不思議に感じると思いますので….
・容量3MB以下
・アルファチャンネルを持つ画素を1px以上含む
・最大解像度2048px * 2048px
・(開発中に私が確認した限りでは)zlibで最大まで圧縮すると上記を満たしていてもアップロード不能
既存サービスで良くない?
既にTwitterにアップロード可能なPNGを出力するWebサービスがあります.それを使えば画像を投げてやると仕様に沿ったPNGをダウンロードすることができます.簡単ですね.
しかし,「3MBを超える画像が入ってきた時に3MBに収まるサイズまで自動的に縮小してくれる」機能を持つサービスというのが,私が探した限りでは見つかりませんでした.
既存サービスを使っていた時のワークフローは,
Lightroomで適当なサイズで出力→既存サービスに投げる→3MBを超えてたら縮小しなおす
というものでした.この流れで3MBの限界を攻めるのは結構面倒です.
ないなら作れ
仕方がないので3MBまで自動で縮小してくれるアプリをQtで作りました.
こういうちょっとしたツールを作るのにはQt結構おすすめです.
PNG太郎と呼んでいたアプリケーションですが,太郎は格好がつかないという理由でJohnにしました.山田太郎的な名前としてJohn Smithが英語圏では使われるそうなので.
一応バイナリも用意しましたが,Qtが入ってない環境で起動するのかちゃんとは試してません.Qt Creatorをインストールすれば簡単にビルドできるので,ご自分でビルドするのをお勧めします.
Releases · kai4562/PNGJohn · GitHub
まだ怪しい動作が色々あったり,プレビューのアス比がめちゃくちゃになったりと問題を抱えていますが,画像を読み込んで出力するという操作は問題なく行えるはずです.
プルリクお待ちしています.
だるかったところ
全て
QImageからPNGを書き出す時に圧縮レベル(多分zlibのだと思うけど定かでない)を高圧縮側にすると何故かTwitterに上がらず「サーバー内部のエラー」となる.原因は不明ですが今の所圧縮レベルを60にしています.前は50で上がっていたのですが,50でもダメな画像があるのでとりあえずの60.
謝辞
re3turn (@re3turn) | Twitter 氏の多大なる貢献に感謝いたします.ちゃんとしてる部分はre3turnさんで,デタラメな部分は私のコードです.
おまけ
早速実際に使っています.
2018/12/06 "ヤなことそっとミュート presents YSMSBY" at 渋谷Glad
— かい (@kai4562) December 12, 2018
ヤなことそっとミュート 間宮まにさん (@mani_YSM ) pic.twitter.com/1XL9nEZsIk
2018/12/06 "ヤなことそっとミュート presents YSMSBY" at 渋谷Glad
— かい (@kai4562) December 15, 2018
ヤなことそっとミュート なでしこさん (@nadeshiko_YSM ) pic.twitter.com/MYBESRmwZK