主要用了两个html5的 API,一个file,一个canvas,压缩主要使用cnavas做的,file是读取文件,之后把压缩好的照片放入内存,最后内存转入表单下img.src,随着表单提交。
照片是自己用单反拍的,5M多,压缩下面3张分别是600多kb,400多kb,300kb的最后那张失真度很大了,压缩效率蛮高的。
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8"/>
- <title>File API Test</title>
- <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
- <script type="text/javascript" src="js/JIC.js"></script>
- <style>
- #test{
- display: none;
- }
- </style>
- </head>
- <body>
- <input type="file" id="fileImg" >
- <form>
- <img src="" id="test" alt="">
- </form>
- <script>
- function handleFileSelect (evt) {
- // var filebtn = document.getElementById(id);
- // console.log(filebtn);
- // var files = filebtn.target.files;
- // console.log(filebtn.target);
- // console.log(files);
- var files = evt.target.files;
- for (var i = 0, f; f = files[i]; i++) {
- // Only process image files.
- if (!f.type.match(‘image.*‘)) {
- continue;
- }
- var reader = new FileReader();
- // Closure to capture the file information.
- reader.onload = (function(theFile) {
- return function(e) {
- // Render thumbnail.
- // console.log(evt.target.files[0]);
- // console.log(e.target);
- console.log(e.target.result);
- var i = document.getElementById("test");
- i.src = event.target.result;
- console.log($(i).width());
- console.log($(i).height());
- $(i).css(‘width‘,$(i).width()/10+‘px‘);
- //$(i).css(‘height‘,$(i).height()/10+‘px‘);
- console.log($(i).width());
- console.log($(i).height());
- var quality = 50;
- i.src = jic.compress(i,quality).src;
- console.log(i.src);
- i.style.display = "block";
- };
- })(f);
- // Read in the image file as a data URL.
- reader.readAsDataURL(f);
- }
- }
- document.getElementById(‘fileImg‘).addEventListener(‘change‘, handleFileSelect, false);
- </script>
- </body>
- </html>
- var jic = {
- /**
- * Receives an Image Object (can be JPG OR PNG) and returns a new Image Object compressed
- * @param {Image} source_img_obj The source Image Object
- * @param {Integer} quality The output quality of Image Object
- * @return {Image} result_image_obj The compressed Image Object
- */
- compress: function(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‘);
- //naturalWidth真实图片的宽度
- 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;
- },
- function ****(***){}
- }