javascript初心者です。
jQueryを素のjavascriptに書き換えてみようとしたのですが、失敗しました。
コンソールログにも何も出てこなく、どうしたら分かるか、
どこが違うか、どのように書けば良いかなど、一部だけでもご教示いただけますと勉強になります。
よろしくお願いいたします。
html
<div style="width: 500px"> <form enctype="multipart/form-data" method="post"> <input type="file" name="userfile" accept="image/*" onChange="imgInput"> </form> </div>
javascript
// profile var file = null; // 選択されるファイル var blob = null; // 画像(BLOBデータ) const THUMBNAIL_WIDTH = 500; // 画像リサイズ後の横の長さの最大値 const THUMBNAIL_HEIGHT = 500; // 画像リサイズ後の縦の長さの最大値 // ファイルが選択されたら function imgInput() { // ファイルを取得 file = this.prop('files')[0]; // 選択されたファイルが画像かどうか判定 if (file.type == 'image/jpeg', file.type == 'image/png') { // 画像でない場合は終了 file = null; blob = null; return; } // 画像をリサイズする var image = new Image(); var reader = new FileReader(); reader.onload = function(e) { image.onload = function() { if(image.width > image.height){ // 横長の画像は横のサイズを指定値にあわせる var ratio = image.height/image.width; var width = THUMBNAIL_WIDTH; var height = THUMBNAIL_WIDTH * ratio; } else { // 縦長の画像は縦のサイズを指定値にあわせる var ratio = image.width/image.height; var width = THUMBNAIL_HEIGHT * ratio; var height = THUMBNAIL_HEIGHT; } // サムネ描画用canvasのサイズを上で算出した値に変更 var canvas = document.getElementById('canvas'); canvas.setAttribute('width', width); canvas.setAttribute('height', height); var ctx = canvas[0].getContext('2d'); // canvasに既に描画されている画像をクリア ctx.clearRect(0,0,width,height); // canvasにサムネイルを描画 ctx.drawImage(image,0,0,image.width,image.height,0,0,width,height); } } } }
元html
<div style="width: 500px"> <form enctype="multipart/form-data" method="post"> <input type="file" name="userfile" accept="image/*"> </form> </div>
元jQuery
$('input[type=file]').change(function() { // ファイルを取得 file = $(this).prop('files')[0]; // 選択されたファイルが画像かどうか判定 if (file.type != 'image/jpeg' && file.type != 'image/png') { // 画像でない場合は終了 file = null; blob = null; return; } // 画像をリサイズする var image = new Image(); var reader = new FileReader(); reader.onload = function(e) { image.onload = function() { var width, height; if(image.width > image.height){ // 横長の画像は横のサイズを指定値にあわせる var ratio = image.height/image.width; width = THUMBNAIL_WIDTH; height = THUMBNAIL_WIDTH * ratio; } else { // 縦長の画像は縦のサイズを指定値にあわせる var ratio = image.width/image.height; width = THUMBNAIL_HEIGHT * ratio; height = THUMBNAIL_HEIGHT; } // サムネ描画用canvasのサイズを上で算出した値に変更 var canvas = $('#canvas') .attr('width', width) .attr('height', height); var ctx = canvas[0].getContext('2d'); // canvasに既に描画されている画像をクリア ctx.clearRect(0,0,width,height); // canvasにサムネイルを描画 ctx.drawImage(image,0,0,image.width,image.height,0,0,width,height); } } } });
回答4件
あなたの回答
tips
プレビュー