JSFiddle - React, Tailwind, and code Playground
by qian jin
HTML
<div>
<div>
<p id="original_size"></p>
<img id="original_image" class="col-xs-6" src="" style="width:600px">
</div>
<div>
<p id="now_size"></p>
<img id="now_image" class="col-xs-6" src="" style="width:600px">
</div>
<form id="image_upload" method="post" enctype="multipart/form-data">
<input class="hide" type="file" id="upload_image" name="img" />
</form>
<input style="ime-mode:disabled" onkeyup="return ValidateNumber($(this),value)" id="set_size" value="50">
<input id="choose_box" value="选择本地图片" type="button">
</div>
CSS
.hide{
display: none
}
JavaScript
$(window).ready(function() {
$('#choose_box').click(function() {
$('#upload_image').click();
$('#choose_box').addClass('hide');
$('#set_size').addClass('hide')
});
$('#upload_image').change(function() {
readURL(this);
})
});
function ValidateNumber(e, pnumber){
if (!/^\d+$/.test(pnumber)){
$(e).val(/^\d+/.exec($(e).val()));
}
return false;
}
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#original_image').attr('src', e.target.result);
$('#original_size').html('图片原大小:' + e.target.result.length);
var i = document.getElementById("now_image");
i.src = event.target.result;
var quality = $('#set_size').val() || 50;
i.src = compress(i,quality).src;
$('#now_image').attr('src', i.src);
$('#now_size').html('压缩后图片大小:' + i.src.length);
};
reader.readAsDataURL(input.files[0]);
}
}
function compress (source_img_obj, quality, output_format){
var mime_type = "image/jpeg";
if(output_format!=undefined && output_format=="png"){
mime_type = "image/png";
}
var cvs = document.createElement('canvas');
cvs.width = source_img_obj.naturalWidth;
cvs.height = source_img_obj.naturalHeight;
var ctx = cvs.getContext("2d").drawImage(source_img_obj, 0, 0);
var newImageData = cvs.toDataURL(mime_type, quality/100);
var result_image_obj = new Image();
result_image_obj.src = newImageData;
return result_image_obj;
}