misskey-dev / misskey

🌎 A completely free and open interplanetary microblogging platform 🚀
https://misskey-hub.net/
GNU Affero General Public License v3.0
9.97k stars 1.35k forks source link

ファイルアップロード時のブラウザ圧縮のpngのサイズを小さくしたい #11100

Open tamaina opened 1 year ago

tamaina commented 1 year ago

Summary

https://github.com/misskey-dev/browser-image-resizerOffscreenCanvas.convertToBlobを使うが、pngの圧縮が不十分に感じる

もっとpngのサイズを小さくしたい

tamaina commented 1 year ago

https://docs.rs/png/latest/png/ をwasmにして使う?

tamaina commented 1 year ago

(とか言ってるとacが言うように変換一式をRustに丸投げしたくなる)

sorairolake commented 1 year ago

PNGの圧縮ならoxipngとかでしょうか? Wasmにも対応していそうではあります。 shssoichiro/oxipng#194

tamaina commented 1 year ago

https://github.com/misskey-dev/misskey/issues/9283

Q. アップロード時はavifにすればいいのでは A. ブラウザ側の圧縮画像をwebpublicにそのまま利用することでサーバーの負荷を軽減する意図がある。Edgeがavifに対応しないことにはwebpublicをavifにできない

tamaina commented 1 year ago

(サーバーの再変換負荷を受け入れるのであればavifでアップロードしても構わないと思っている。それかMS Edgeを切り捨てるか。)

acid-chicken commented 1 year ago

https://github.com/misskey-dev/misskey/issues/9370#issuecomment-1584394567

manzyun commented 1 year ago

釈迦に説法な気がしますが、png形式の圧縮技術の特性上 「色数が少ない画像データに対しては大変圧縮効率が良い」 事は申し上げさせて頂きます:

【画像処理】今さら聞けない画像フォーマット - Qiita PNG画像の圧縮について - Qiita

裏を返すと、 「うっかりスマホやデスクトップのスクリーンショットを、拡張子を意識せずにアップロードするとそりゃ重い」 という話にもなるかと(大抵 png で保存する為)

拙案

ここまでで思い付いた稚拙な案ですが、下記になります。

オフトピ

jpgに関しては misskeyでサブモジュールで取得して改変しているソースコードの標準値 を眺める限りは、大変良く攻めた圧縮率を指定していると思います:

あなたのサイトのjpeg画像は過剰品質である。多分。 - Qiita

オフトピ2 WebPという選択肢

これはHTTPサーバーの実装やクライアント側の表示可能精査が必要ですが、WebP・WebMは 2021年の misskey.devサーバーをPC・スマホのFirefoxで閲覧時に表示できたので、これらを用いるのも手かと思います。