您好,欢迎访问一九零五行业门户网

HTML5联合canvas实现图片压缩

这次给大家带来html5联合canvas实现图片压缩,主要以代码的形式体现,下面就是实战案例,一起来看一下。
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1'> <title>lianxi </title> <style type="text/css"> </style> </head> <body> <form> 名字:<input type="text " name = 'username' id = 'username'/> 上传:<input type="file" name = 'fileimage' id = 'fileimage' /> </form> <button>button</button> <script> var file = document.queryselector('#fileimage') var username = document.queryselector('#username') var canvas = document.createelement('canvas'); var span = document.createelement('span') var formdata = new formdata() file.addeventlistener('change',function() { //实现的原理的new formdata()然后把这个formdata 用ajax传进去 span.innerhtml = '预览图加载中...' document.body.appendchild(span) console.log(file.files[0]) username.value ? formdata.append('username',username.value) : null; resize(file.files[0]); }) //上传前的图片压缩 function resize(file) { var reader = new filereader() reader.readasdataurl(file) var img = new image() reader.onload = function (e) { // this.result就是图片的base64地址信息 img.src = this.result; } var context = canvas.getcontext('2d'); var gif = document.createelement('img') // base64地址图片加载完毕后 img.onload = function () { // 图片原始尺寸 //定义画布的大小 if (img.width > 300 || img.height > 300) { if (img.width > img.height) { canvas.width = 300 canvas.height = img.height / img.width * 300 } else { canvas.height = 300 canvas.width = img.width / img.height * 300 } } //从那里开始截取图片 context.drawimage(img, 0, 0, canvas.width, canvas.height) /*第一个参数是创建的img对象;第二个参数是左上角坐标,后面两个是画布区域宽高*/ //压缩后的图片base64 url /*canvas.todataurl(mimetype, qualityargument),mimetype 默认值是'image/jpeg'; * qualityargument表示导出的图片质量,只要导出为jpg和webp格式的时候此参数才有效果,默认值是0.92*/ //var newurl = canvas.todataurl('image/jpeg', 0.92);//base64 格式 document.body.removechild(span) document.queryselector('body').appendchild(canvas) }; } //这是上传的 document.queryselector('button').addeventlistener('click',function(){ canvas.toblob(function(blob){ var xhr = new xmlhttprequest() formdata.append('fileimage', blob,'002.webp') xhr.open('post', 'test.php', true)//默认true 为异步 //上传进度 xhr.upload.addeventlistener('progress',function (e) { console.log('上传进度为:'+ (e.loaded/e.total*100).tofixed(2)+'%')//多次出现 // event.total是需要传输的总字节,event.loaded是已经传输的字节 }) xhr.upload.addeventlistener('loadstart', function () { console.log('上传开始')//只出现一次 }) xhr.onreadystatechange = function () { if (xhr.readystate === 4) { if (xhr.status >= 200 && xhr.status <300 || xhr.status == 304) { console.log(json.parse(xhr.responsetext))//成功后的返回值 } else { console.log("request was unsuccessful: " + xhr.status); } } } //xhr.setrequestheader("content-type", "multipart/form-data"); xhr.send(formdata) }, 'image/webp',0.9) }) </script> </body> </html>
需要注意的是后端需要加上header(access-control-allow-origin:*);以实现跨域
相关链接:
html5+canvas实现图片的压缩上传
html5 canvas 实现本地压缩图片
html5 canvas实现图片拉伸、压缩与裁剪
以上就是html5联合canvas实现图片压缩的详细内容。
其它类似信息

推荐信息