2016-11-20 8 views
1

私は、フォームを送信してフォームに追加する前に、クライアント側のイメージのサイズを変更しようとしています。現在イメージをサイズ変更してHTMLフォームに追加する正しい方法はありますか?

私はこれを持っている:

<form method="post" action="abc.php"> 
    <input id="image-1" type="file" name="image-1" onchange="resizeImage('image-1')"> 
    <input id="image-2" type="file" name="image-2" onchange="resizeImage('image-2')"> 
    <input type="submit" value="Submit"> 
</form> 

画像が追加され、動的に削除されている - ので、私は一緒に入れ、すべてまたは20

で何も存在しないかもしれない、この(画像をリサイズして正しく動作するようです):

function resizeImage(inputID) { 
    //Read in file 
    var file = event.target.files[0]; 

    //Ensure it's an image 
    if (file.type.match(/image.*/)) { 
     // Load the image 
     var reader = new FileReader(); 
     reader.onload = function (readerEvent) { 
      var image = new Image(); 
      image.onload = function (imageEvent) { 

       // Resize the image 
       var canvas = document.createElement('canvas'), 
        max_size = 1200, 
        width = image.width, 
        height = image.height; 
       if (width > height) { 
        if (width > max_size) { 
         height *= max_size/width; 
         width = max_size; 
        } 
       } else { 
        if (height > max_size) { 
         width *= max_size/height; 
         height = max_size; 
        } 
       } 
       canvas.width = width; 
       canvas.height = height; 
       canvas.getContext('2d').drawImage(image, 0, 0, width, height); 

       document.getElementById(inputID).src = canvas.toDataURL('image/png'); 
      }; 
      image.src = readerEvent.target.result; 
     }; 
     reader.readAsDataURL(file); 
    } 
} 

私はこれを提出すると、最初は正常に動作しているようです。しかし、サーバー側の検証では、3000x3000pxから1200x1200pxに切り取っても、元の画像と同じサイズになります。まるでそれがまだオリジナルをアップロードしているかのように。

この新しいサイズ変更されたイメージを追加する前に、ソースを削除する必要がありますか?私は現時点で正しくしていますか?私はサーバー側の操作を制御できないため、通常の画像選択を再現する必要があります。うまくいけばこれが可能です!

答えて

0

同じ問題を解決している間だけ、この投稿に気付きました。 'file'タイプのユーザー選択入力をサイズ変更したものに置き換えることはできません。セキュリティ上の理由から、ブラウザはこれを許可していません。 フォームはHTTP POSTを使用して同期されて転記されます。いくつかの記事によれば、変更されたイメージは非同期的に掲示されるべきである。すべての例では、XHRまたはAjaxを使用しています。 考えられる解決策は次のようです: 1)イメージのサイズを変更し、キャンバスをdataUrlまたはblobに変換します。 2)フォームに新しい隠しフィールドを追加するか、フォームの外にイメージアップロードを移動します。 3)XHRまたはAjaxを使用してサイズ変更された画像を投稿します。 4) 'file'タイプの元の入力からname属性を削除するか(これは送信されません)、またはサーバ側を無視します。 5)サーバー上でdataUrlをデコードし、アップロードフォルダに画像を保存します。

関連する問題