0

PNG 画像があり、その Base64 PNG 文字列表現を取得しました。まだかなり大きいので、さらに大幅に圧縮できるかどうか知りたいです。それは可能ですか?

バックグラウンド

html2canvas を使用して現在の Web ページのスクリーンショットを作成し、それを base64 (canvas.toDataURL() を使用) 文字列として変換してサーバーに送信します。ただし、文字列のサイズが大きすぎる場合、サーバーは例外を返します。

キャンバスを文字列の形で圧縮する最も効率的な方法は何ですか?

どんな助けでも大歓迎です。前もって感謝します。

4

3 に答える 3

0

おそらくここから先には行けません。画像を URL に詰め込むのではなく、別の方法で画像を取得する必要があるでしょう。

小さな利益のために、 pngcrushを試して PNG 画像を小さくするか、解像度や色数を減らすことで直接 PNG 画像のサイズを単純に縮小することができます。

Base64 とは異なるエンコード スキームを使用して、64 を超えるエンコード文字を使用することで、さらにいくつかの文字を絞り出すこともできます。使用できる予約されていない文字は 66 文字あり、URL の構文によっては、18 文字の予約文字の多くを使用できる可能性があります。

しかし、画像自体を変更することを除けば、わずかなメリットしか実現できません。

于 2013-05-27T17:56:43.177 に答える
0

ほとんどの場合、圧縮では辞書やその他の方法を使用してデータを圧縮することに注意してください。これにより、ベース文字列をうまく圧縮できない場合、さらに大きな圧縮データが考慮されます。圧縮後にサイズが小さくなる画像サイズを見つける必要があります。

多分別のアプローチが役立つでしょう。URL だけを送信すると、サーバーは html2canvas を実行できませんか? データを小さなバッファに分割して送信してみてください。おそらく、データのサイズをループし、64 KB のバッファーに分割して送信する必要があります (サーバー側で、どのバッファーがどのパケットに属しているかを確認する必要があることに注意してください)。

それ以外の場合は、GZIP、LZW、LZMA アルゴリズムを試してください。html2canvas が作成する画像を圧縮するツールを使用することもできますか?

于 2013-05-27T08:27:30.183 に答える