<meta charset="UTF-8"> <title> XMLHttpRequest上传文件 </title> <script type="text/javascript"> /* 三个参数 file:一个是文件(类型是图片格式), w:一个是文件压缩的后宽度,宽度越小,字节越小 objDiv:一个是容器或者回调函数 photoCompress() */ function photoCompress(file, w, objDiv) { var ready = new FileReader(); /*开始读取指定的Blob对象或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件处理程序,则调用之.同时,result属性中将包含一个data: URL格式的字符串以表示所读取文件的内容.*/ ready.readAsDataURL(file); ready.onload = function () { var re = this.result; canvasDataURL(re, w, objDiv) } } function canvasDataURL(path, obj, callback) { var img = new Image(); img.src = path; img.onload = function () { var that = this; // 默认按比例压缩 var w = that.width, h = that.height, scale = w / h; w = obj.width || w; h = obj.height || (w / scale); var quality = 0.7; // 默认图片质量为0.7 //生成canvas var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); // 创建属性节点 var anw = document.createAttribute("width"); anw.nodeValue = w; var anh = document.createAttribute("height"); anh.nodeValue = h; canvas.setAttributeNode(anw); canvas.setAttributeNode(anh); ctx.drawImage(that, 0, 0, w, h); // 图像质量 if (obj.quality && obj.quality <= 1 && obj.quality > 0) { quality = obj.quality; } // quality值越小,所绘制出的图像越模糊 var base64 = canvas.toDataURL('image/jpeg', quality); // 回调函数返回base64的值 callback(base64); } } /** * 将以base64的图片url数据转换为Blob * @param urlData * 用url方式表示的base64图片数据 */ function convertBase64UrlToBlob(urlData) { var arr = urlData.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new Blob([u8arr], { type: mime }); } var xhr; //上传文件方法 function UpladFile() { var fileObj = document.getElementById("file").files[0]; // js 获取文件对象 var url = "后台图片上传接口"; // 接收上传文件的后台地址 var form = new FormData(); // FormData 对象 if (fileObj.size / 1024 > 1025) { //大于1M,进行压缩上传 photoCompress(fileObj, { quality: 0.2 }, function (base64Codes) { //console.log("压缩后:" + base.length / 1024 + " " + base); var bl = convertBase64UrlToBlob(base64Codes); form.append("file", bl, "file_" + Date.parse(new Date()) + ".jpg"); // 文件对象 xhr = new XMLHttpRequest(); // XMLHttpRequest 对象 xhr.open("post", url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。 xhr.onload = uploadComplete; //请求完成 xhr.onerror = uploadFailed; //请求失败 xhr.upload.onprogress = progressFunction; //【上传进度调用方法实现】 xhr.upload.onloadstart = function () { //上传开始执行方法 ot = new Date().getTime(); //设置上传开始时间 oloaded = 0; //设置上传开始时,以上传的文件大小为0 }; xhr.send(form); //开始上传,发送form数据 }); } else { //小于等于1M 原图上传 form.append("file", fileObj); // 文件对象 xhr = new XMLHttpRequest(); // XMLHttpRequest 对象 xhr.open("post", url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。 xhr.onload = uploadComplete; //请求完成 xhr.onerror = uploadFailed; //请求失败 xhr.upload.onprogress = progressFunction; //【上传进度调用方法实现】 xhr.upload.onloadstart = function () { //上传开始执行方法 ot = new Date().getTime(); //设置上传开始时间 oloaded = 0; //设置上传开始时,以上传的文件大小为0 }; xhr.send(form); //开始上传,发送form数据 } } //上传成功响应 function uploadComplete(evt) { //服务断接收完文件返回的结果 var data = JSON.parse(evt.target.responseText); if (data.success) { alert("上传成功!"); } else { alert("上传失败!"); } } //上传失败 function uploadFailed(evt) { alert("上传失败!"); } //取消上传 function cancleUploadFile() { xhr.abort(); } //上传进度实现方法,上传过程中会频繁调用该方法 function progressFunction(evt) { var progressBar = document.getElementById("progressBar"); var percentageDiv = document.getElementById("percentage"); // event.total是需要传输的总字节,event.loaded是已经传输的字节。如果event.lengthComputable不为真,则event.total等于0 if (evt.lengthComputable) { // progressBar.max = evt.total; progressBar.value = evt.loaded; percentageDiv.innerHTML = Math.round(evt.loaded / evt.total * 100) + "%"; } var time = document.getElementById("time"); var nt = new Date().getTime(); //获取当前时间 var pertime = (nt - ot) / 1000; //计算出上次调用该方法时到现在的时间差,单位为s ot = new Date().getTime(); //重新赋值时间,用于下次计算 var perload = evt.loaded - oloaded; //计算该分段上传的文件大小,单位b oloaded = evt.loaded; //重新赋值已上传文件大小,用以下次计算 //上传速度计算 var speed = perload / pertime; //单位b/s var bspeed = speed; var units = 'b/s'; //单位名称 if (speed / 1024 > 1) { speed = speed / 1024; units = 'k/s'; } if (speed / 1024 > 1) { speed = speed / 1024; units = 'M/s'; } speed = speed.toFixed(1); //剩余时间 var resttime = ((evt.total - evt.loaded) / bspeed).toFixed(1); time.innerHTML = ',速度:' + speed + units + ',剩余时间:' + resttime + 's'; if (bspeed == 0) time.innerHTML = '上传已取消'; }
相关推荐
纯前端的图片压缩工具能够提高用户体验,减少服务器负担,同时还能有效管理网站的加载速度。本篇文章将详细探讨“纯前端图片压缩和预览工具”的相关知识点。 首先,我们要了解“纯前端”意味着所有处理都在用户的...
前端代码通常涉及用户上传图片、压缩图片并将其转换为base64编码。这里有一个简单的HTML和JavaScript示例: ```html 压缩并上传 const compressBtn = document.getElementById('compressBtn'); const imageInput...
10. **安全问题**:前端压缩不能完全替代后端的安全检查,因为恶意用户可能绕过前端限制,上传大文件或不合法图片。因此,后端仍需进行文件大小和格式的验证。 综上所述,前端图片上传压缩涉及到的技术点广泛,包括...
标题中的"html纯前端压缩图片神器"是指这个工具完全在用户浏览器上运行,无需服务器端的支持。这种特性使得它在隐私保护和离线应用场景中非常实用。使用JavaScript,特别是canvas元素,可以对图片进行处理,包括读取...
利用html5 canvas处理图片,得到图片字节流,上传。前端canvas压缩,代码简洁亲测可用,参考博客 :https://blog.csdn.net/jialiuyang/article/details/50787636;
前端压缩图片能有效降低图片文件大小,而不会明显降低图片质量,从而达到优化的目的。 前端图片压缩主要有以下几种方式: 1. **HTML5 Canvas压缩**:利用HTML5的Canvas API,可以读取图片数据并调整其质量和大小。...
首先做长宽压缩,如果图片太大,先做长宽压缩,暂定大于2M(大小读者可以自己设置)循环做长宽压缩(暂定长宽都压缩一半,山样读者可以自己设置大小),其次做质量压缩,大于1M,循环做质量压缩,直到图片大小在1m...
图片压缩插件通常工作原理是:在用户上传图片时,插件会自动对图片进行压缩,调整其尺寸和质量,以减少文件大小。在"jQuery前端图片压缩插件.rar"中,这个过程可能涉及到以下技术: 1. 图片读取:使用HTML5的...
前端JS实现图片压缩,直接浏览器打开后,选择要压缩的图片文件即可
针对这一问题,我们可以利用HTML5、PHP和JavaScript技术实现前端图片的压缩上传功能,以优化用户体验。 首先,我们需要理解HTML5中的File API。这个API允许网页在用户设备上直接操作文件,包括读取、写入和处理文件...
JavaScript 图片压缩插件是一种用于优化用户在网页上上传大...总之,JavaScript 图片压缩插件如 `LocalResizeIMG.js` 在现代网页应用中起着至关重要的作用,它们有效地解决了大尺寸图片上传的难题,提高了用户体验。
6. **应用场景**:前端压缩通常应用于JSON数据传输、大文件上传前预处理、本地存储数据压缩等场景。 7. **错误处理**:在使用pako时,应考虑处理可能的错误,例如输入数据无效、内存不足等情况。 8. **与其他技术...
由于图片往往是网页加载速度的主要影响因素,因此有效地压缩图片可以显著提高页面加载速度,同时保持图片质量。"js图片压缩,不会担心图片因为压缩变形"这个标题表明我们将探讨一种能够保持图片比例的压缩方法,避免...
在前端中使用canvas压缩图片的js,转换之后生成Blob文件
根据公司业务需求在前端裁剪对应的图片,并压缩图片,然后上传到阿里云OSS存储! 找了很久的资料,并没有发现合适的整合dome,于是自己花了一下时间整合了一下, 其中包括了对应的裁剪,压缩,上传有对应的注释...
本主题将深入探讨如何使用Java实现图片压缩,并能够将其调整到任意大小,同时保持图片质量并避免变形。 首先,我们需要理解图片压缩的基本原理。图片压缩主要有两种类型:有损压缩和无损压缩。有损压缩会牺牲一部分...
总的来说,HTML5 Canvas提供了一种灵活的方式来处理和压缩图片,适配各种浏览器和设备。通过理解并运用上述技术,你可以创建一个高效且兼容性强的图片压缩解决方案,确保在微信、Chrome、Firefox等不同环境中都能...
在C# Core中进行图片处理是一项常见的任务,其中包括图片压缩和剪切操作。无损压缩和剪切技术在保持原始图像质量的同时,可以减小文件大小或改变图像的形状。以下将详细介绍C# Core中如何实现这些功能。 首先,我们...
在这个项目中,我们关注的是如何利用`mui`进行图片的压缩上传以及在前端回显,同时配合Java后台完成整个流程。 首先,图片压缩是减少上传时间和服务器存储空间的关键步骤。`mui`提供了一种方法来实现这个功能,通常...
5. **导出压缩图片**:调用`toDataURL()`方法,将Canvas上的内容转换为新的Data URL,这就是压缩后的图片。 6. **上传图片**:最后,将这个压缩后的Data URL作为formData的一部分,通过Ajax发送到服务器进行存储或...