ホームページ > ウェブフロントエンド > H5 チュートリアル > HTML5 キャンバス モバイル ブラウザーでの画像圧縮アップロード_html5 チュートリアル スキル

HTML5 キャンバス モバイル ブラウザーでの画像圧縮アップロード_html5 チュートリアル スキル

WBOY
リリース: 2016-05-16 15:45:33
オリジナル
2240 人が閲覧しました

最近モバイル端末でアバターのアップロード機能を設計したとき、当初は を指定して formData 経由で直接アップロードしていましたが、実際の使用方法は次のとおりです。高画素携帯電話など) アップロード時間が長すぎるとアップロードに失敗しますし、毎回オリジナルサイズの画像をアップロード(バックグラウンド処理圧縮)するとユーザーエクスペリエンスに大きく影響するため、圧縮方法を検討しました。キャンバスを通して画像をアップロードして、以下にいくつかのアイデアと考えを示します:

1. ローカル画像を取得し、キャンバスに画像を描画します。ここでの問題点は、ブラウザの保護メカニズムにより、ローカル ファイルの画像パスを直接取得できないため、ローカル画像を Base64 形式にコンパイルしてからアップロードする必要があることです 。コードは次のとおりです。

JavaScript コードコンテンツをクリップボードにコピーします
  1. var result = document.getElementById("/* エラーメッセージ表示ブロック */"); 🎜>
  2. var input = document.getElementById("/* ファイルタグをアップロードします */"); >
  3. if(typeof FileReader === '未定義'){ result.innerHTML =
  4. "

    申し訳ありませんが、お使いのブラウザは FileReader をサポートしていません

    "; input.setAttribute(
  5. '無効'
  6. ,'無効'); }else
  7. {
  8. input.addEventListener('change'
  9. ,readFile,
  10. false); }
  11. 関数
  12. readFile(){
  13. var ファイル =
  14. this
  15. .files[0]; if(!/image/w /.test(file.type)){
  16. alert(
  17. "ファイルの種類が画像であることを確認してください");
  18. return
  19. false;
  20. }
  21. var Reader = new
  22. FileReader();
  23. Reader.readAsDataURL(ファイル)
  24. Reader.onload = 関数(e){
  25. // this.result コンパイルされた画像エンコーディングは、src
  26. で直接表示できます。
  27. } }
  28. 2. キャンバスでの画像処理
  29. JavaScript コード
  30. コンテンツをクリップボードにコピーします
    1. var c=document.getElementById("/* Canvas タグ ID */"); >
    2. var cxt=c.getContext("2d");
    3. var
    4. img=new Image(); img.src=/* 取得した画像エンコードアドレス */
    5. ;
    6. var width = img.width;
    7. var 高さ = img.height; dic = 高さ / 幅;
    8. c.width = 200; //画像圧縮の基準、ここでは 200px のデポジットに基づいて計算されます
    9. c.height = 200 * dic;
    10. cxt.clearRect(0,0,200,200*dic);
    11. cxt.drawImage(img,0,0,200,200*dic);
    12. var
    13. finalURL = c.toDataURL();
    14. // 取得された最終 URL は圧縮された画像エンコーディングであり、これを使用して画像タグをアップロードまたは直接生成できます
    15. ここで注意すべき点がいくつかあります: 1. ローカルでデバッグするとエラーが発生するため、サーバー側でデバッグする必要があります。 2. キャンバスのdrawImage()メソッドには画像のトリミング機能がありますが、画像の伸縮とトリミングを同時に記述すると、トリミングメソッドが先に実行されます。
    16. 3. AJAX を使用して画像エンコードをアップロードすると、エンコード内のプラス記号がスペースに変換され、バックグラウンドでのコンパイルが失敗します。
    17. 4. 画像領域の選択とアップロードの方法はまだ試用段階なので、後で私の経験を追加します。 以上がこの記事の全内容です。皆様の学習のお役に立てれば幸いです。 原文: http://www.cnblogs.com/liaojh/p/5209433.html
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート