TL;DR;
アップロードする前に、画像 (主に jpeg、png、gif) をブラウザ側で直接圧縮する方法はありますか? JavaScriptでこれができると確信していますが、それを実現する方法が見つかりません。
実装したい完全なシナリオは次のとおりです。
- ユーザーが私のウェブサイトにアクセスし、
input type="file"
要素を介して画像を選択し、 - この画像は JavaScript を介して取得され、正しいファイル形式、最大ファイル サイズなどの検証が行われます。
- すべて問題なければ、画像のプレビューがページに表示されます。
- ユーザーは、画像を 90°/-90° 回転する、事前に定義された比率に従ってトリミングするなどの基本的な操作を実行するか、別の画像をアップロードしてステップ 1 に戻ることができます。
- ユーザーが満足すると、編集された画像が圧縮され、ローカルに「保存」されます (ファイルには保存されませんが、ブラウザのメモリ/ページに保存されます)。
- ユーザーはフォームに名前、年齢などのデータを入力します。
- ユーザーが「完了」ボタンをクリックすると、データと圧縮された画像を含むフォームがサーバーに送信されます (AJAX なし)。
最後のステップまでの完全なプロセスはクライアント側で行う必要があり、最新の Chrome と Firefox、Safari 5+ とIE 8+で互換性があるはずです。可能であれば、JavaScript のみを使用する必要があります (ただし、これは不可能であると確信しています)。
今は何もコーディングしていませんが、すでに考えています。ローカルでのファイルの読み込みはFile API経由で可能で、画像のプレビューと編集はCanvas要素を使用して行うことができますが、画像圧縮部分を行う方法が見つかりません。
html5please.comとcaniuse.comによると、これらのブラウザーをサポートすることは (IE のおかげで) 非常に困難ですが、FlashCanvasやFileReaderなどのポリフィルを使用して行うことができます。
実はファイルサイズを小さくするのが目的なので、画像圧縮が解決策だと思います。しかし、アップロードされた画像が私のウェブサイトで毎回同じ場所に表示されることはわかっており、この表示領域のサイズ (例: 200x400) もわかっています。そのため、これらの寸法に合わせて画像のサイズを変更し、ファイル サイズを小さくすることができました。この手法の圧縮率がどうなるかわかりません。
どう思いますか ?何かアドバイスはありますか?JavaScript でブラウザ側の画像を圧縮する方法を知っていますか? 返信ありがとうございます。