2016-09-25 5 views
0

これは私がユーザー選択イメージを持っていて、イメージがサイズ変更され、サーバーにアップロードされているので、私がacchomplishしようとしているものです。私がしたいのは、画像を選択してサイズを変更してからスクリプトを停止した後です。次に、私が選択したときにサイズ変更されたイメージをアップロードする関数を作成したいと思います。理由は、フォームに入力テキストを追加して、ユーザーが完了したらファイルを使用して画像をアップロードしたいからです。注意:私は、テキスト入力がちょうどfunctions..Iが送信いるFormDataポスト部分formData seperatlyを送信します。

JAVASCRIPT

<script> 
function ResizeMe(){ 
var dataurl = null; 
var uniq = 'id' + (new Date()).getTime(); 
var filesToUpload = document.getElementById('input').files; 
var file = filesToUpload[0]; 

// Create an image 
var img = document.createElement("img"); 
// Create a file reader 
var reader = new FileReader(); 
// Set the image once loaded into file reader 
reader.onload = function(e) 
{ 
    img.src = e.target.result; 

    img.onload = function() { 
     var canvas = document.createElement("canvas"); 
     var ctx = canvas.getContext("2d"); 
     ctx.drawImage(img, 0, 0); 

     var MAX_WIDTH = 200; 
     var MAX_HEIGHT = 400; 
     var width = img.width; 
     var height = img.height; 

     if (width > height) { 
      if (width > MAX_WIDTH) { 
      height *= MAX_WIDTH/width; 
      width = MAX_WIDTH; 
      } 
     } else { 
      if (height > MAX_HEIGHT) { 
      width *= MAX_HEIGHT/height; 
      height = MAX_HEIGHT; 
      } 
     } 
     canvas.width = width; 
     canvas.height = height; 
     var ctx = canvas.getContext("2d"); 
     ctx.drawImage(img, 0, 0, width, height); 
     dataurl = canvas.toDataURL("image/jpeg",.2); 
     var blobBin = atob(dataurl.split(',')[1]); 
     var array = []; 
     for(var i = 0; i < blobBin.length; i++) { 
     array.push(blobBin.charCodeAt(i)); 
     } 
     var files = new Blob([new Uint8Array(array)], {type: 'image/jpg', name: "ddd"}); 
     // Post the data 
     var fd = new FormData(); 
     fd.append("image", files, uniq); 
     $.ajax({ 
      url: 'http:///www.***/upload.php', 
      data: fd, 
      cache: false, 
      contentType: false, 
      processData: false, 
      type: 'POST', 
      success: function(data){ 
       $('#form_input')[0].reset(); 
       location.reload(); 
      } 
     }); 
    } // img.onload 
} 
// Load files into file reader 
reader.readAsDataURL(file); 
} 
</script> 
+1

'ResizeMe()'は何回呼び出されますか?一度に複数のキャンバスが送られるのを待っていますか? – Howzieky

+0

アプリの終了時にちょうど1回。それは1つの画像と収集されたすべてのフォームデータを送信します – INOH

+0

ユーザーは別の画像を取ることを選ぶかもしれないので、1つのキャンバスがアプリを通して私の変更を送っただけです。アプリケーションの最後には、フォームと1つの画像/キャンバスからすべてのデータをアップロードし、すべての画像をmySQLのフォルダとデータにアップロードします。 – INOH

答えて

1

コードを区切るする方法がわからない、アップロードをsepearateできるようにしたいの後に行います追加されていませんフォームデータは

$.ajax({ 
    url: 'http:///www.***/upload.php', 
    data: fd, 
    cache: false, 
    contentType: false, 
    processData: false, 
    type: 'POST', 
    success: function(data){ 
     $('#form_input')[0].reset(); 
     location.reload(); 
    } 
}); 

です。このコードは、別の機能に入れたいコードです。他の場所に移動するには、送信されるすべての変数、つまりfdにまだアクセスできることを確認する必要があります。 fdは複数の変数に接続され、すべてcanvasに戻ります。一度に1つのキャンバスしか表示されないので、canvasをグローバル変数にすることができます。そして、fdをどこからでも簡単に取得できます。

<script> 
    //Moved to global so that sendFormStuff will see it 
    var canvas = document.createElement("canvas"); 
    var ctx = canvas.getContext("2d"); 
    function ResizeMe(){ 
    var dataurl = null; 
    var uniq = 'id' + (new Date()).getTime(); 
    var filesToUpload = document.getElementById('input').files; 
    var file = filesToUpload[0]; 

    // Create an image 
    var img = document.createElement("img"); 
    // Create a file reader 
    var reader = new FileReader(); 
    // Set the image once loaded into file reader 
    reader.onload = function(e) 
    { 
     img.src = e.target.result; 

     img.onload = function() { 

     ctx.drawImage(img, 0, 0); 

     var MAX_WIDTH = 200; 
     var MAX_HEIGHT = 400; 
     var width = img.width; 
     var height = img.height; 

     if (width > height) { 
      if (width > MAX_WIDTH) { 
      height *= MAX_WIDTH/width; 
      width = MAX_WIDTH; 
      } 
     } else { 
      if (height > MAX_HEIGHT) { 
      width *= MAX_HEIGHT/height; 
      height = MAX_HEIGHT; 
      } 
     } 
     canvas.width = width; 
     canvas.height = height; 
     ctx.drawImage(img, 0, 0, width, height); 
     } // img.onload 
    } 
    function sendFormStuff() { 
     var dataurl = canvas.toDataURL("image/jpeg",.2); 
     var blobBin = atob(dataurl.split(',')[1]); 
     var array = []; 
     for(var i = 0; i < blobBin.length; i++) { 
     array.push(blobBin.charCodeAt(i)); 
     } 
     var files = new Blob([new Uint8Array(array)], {type: 'image/jpg', name: "ddd"}); 
     // Post the data 
     var fd = new FormData(); 
     fd.append("image", files, uniq); 
     $.ajax({ 
     url: 'http:///www.***/upload.php', 
     data: fd, 
     cache: false, 
     contentType: false, 
     processData: false, 
     type: 'POST', 
     success: function(data){ 
      $('#form_input')[0].reset(); 
      location.reload(); 
     } 
     }); 
    } 
    // Load files into file reader 
    reader.readAsDataURL(file); 
    } 
</script> 

だから、本当に私たちがここでやったすべてが別の関数に要求コードを移動し、その関数からアクセス可能(あなたが二回宣言された、ところで)canvasctxを行いました。

+0

私は上記のコードから送信するコードを削除し、 'sendTheForm()'のタグの間に配置する必要があります – INOH

+0

私は上記のスクリプトをコピーし、 'function sendFormStuff()'を呼び出そうとしましたが、スクリプトタグ内のその部分の場所を削除しようとしましたが、何もアップロードしませんでした – INOH

+1

何のエラーがありますか? – Howzieky

関連する問題