input type のfileから取得した画像データを圧縮するにはどうすればいいのだろうか?
$('input[type="file"]').on('change',function (e){
var $currentTarget = $(e.currentTarget);
var path = $currentTarget.val();
path = path.toLowerCase();
var file = e.currentTarget.files[0];
var size = file.size;
var type = file.type;
var filename = file.name;
var dataUrl = URL.createObjectURL(file);
var image = new Image();
image.onload = function(){
var width = image.width;
var height = image.height;
var ratio = 0.5;
var canvasWidth = Math.floor(width * ratio);
var canvasHeight = Math.floor(height * ratio);
var $canvas = $('<canvas></canvas>');
var canvas = $canvas[0];
canvas.width = canvasWidth;
canvas.height = canvasHeight;
var ctx = canvas.getContext('2d');
ctx.drawImage( image , 0, 0, width, height, 0, 0, canvasWidth, canvasHeight);
var base64 = canvas.toDataURL(type);
};
image.src = dataUrl;
});元の大きさの画像を半分にする処理なのですが、0.5のところを調整すれば、拡大したりすることも可能。この処理では、実際に、html内に、inputだけあればよく、canvasタグとimgタグを用意しなくても処理を実行できちゃうところが便利ですね。
参考
クライアント側でcanvasを使って画像をリサイズする
0 コメント:
コメントを投稿