当前位置: 首页 > 编程笔记 >

JS和Canvas实现图片的预览压缩和上传功能

弘靖琪
2023-03-14
本文向大家介绍JS和Canvas实现图片的预览压缩和上传功能,包括了JS和Canvas实现图片的预览压缩和上传功能的使用技巧和注意事项,需要的朋友参考一下

先来一张效果图,压压惊

第一步:用户选择需要上传的图片

<input type="file" accept="image/*" type="file"" name="imageFile" onchange="upload()"> 

在选定了图片后 upload 函数将被触发,我们需要在这个函数中,获取到图片的资源,将它压缩并利用canvas绘制出来,若需要上传到服务器,也可以利用ajax或者其他方式上传。

第二步:获取图片资源压缩预览上传

function upload() { 
  let file = document.querySelector('input[type=file]').files[0] // 获取选择的文件,这里是图片类型 
  let reader = new FileReader() 
    reader.readAsDataURL(file) //读取文件并将文件以URL的形式保存在resulr属性中 base64格式 
    reader.onload = function(e) { // 文件读取完成时触发  
      let result = e.target.result // base64格式图片地址  
      var image = new Image() image.src = result // 设置image的地址为base64的地址  
      image.onload = function(){  
        var canvas = document.querySelector("#canvas");  
        var context = canvas.getContext("2d");  
        canvas.width = image.width; // 设置canvas的画布宽度为图片宽度  
        canvas.height = image.height;  
        context.drawImage(image, 0, 0, image.width, image.height) // 在canvas上绘制图片  
        let dataUrl = canvas.toDataURL('image/jpeg', 0.92) // 0.92为压缩比,可根据需要设置,设置过小会影响图片质量  
                                  // dataUrl 为压缩后的图片资源,可将其上传到服务器  
      }  
    } 
 } 

现在我们来比较一下图片是否成功压缩:

原图大小: 

  

压缩比设置为0.92:

压缩比设置为0.52

乍一看,你是不是觉得很奇怪,为什么设置了缩放比为0.92,图片居然比原图大?其实图片通过base64编码后都会变的比原图大,具体原因可以查阅base64的编码原理。如此看来,我们已经成功压缩了图片!

注意点:canvas在IE9以下不支持;大图片尽量不要使用base64,影响响应速度。

总结

以上所述是小编给大家介绍的JS和Canvas实现图片的预览压缩和上传功能 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!

 类似资料:
  • 本文向大家介绍JS实现图片上传预览功能,包括了JS实现图片上传预览功能的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,直接给大家贴js代码了,具体代码如下所示: 以上所述是小编给大家介绍的JS实现图片上传预览功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!

  • 本文向大家介绍javascript实现移动端 HTML5 图片上传预览和压缩功能示例,包括了javascript实现移动端 HTML5 图片上传预览和压缩功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript实现移动端 HTML5 图片上传预览和压缩功能。分享给大家供大家参考,具体如下: 在开发移动端web网页中,我们不可避免的会遇到文件上传的功能,但由于手机图片尺寸

  • 本文向大家介绍js实现图片上传并预览功能,包括了js实现图片上传并预览功能的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了js实现图片上传并预览的具体代码,供大家参考,具体内容如下 思路:完成这个功能,首先需要美化上传图片的按钮,然后添加一个<img/>标签,在图片上传之后,用新图片的src替换原来<img/>标签中的src。 如下图所示,是原始的按钮样式: 美化步骤: (1)将上传图片

  • 本文向大家介绍vue.js 实现图片本地预览 裁剪 压缩 上传功能,包括了vue.js 实现图片本地预览 裁剪 压缩 上传功能的使用技巧和注意事项,需要的朋友参考一下 以下代码涉及 Vue 2.0 及 ES6 语法。 目标 纯 javascrpit 实现,兼容ie9及以上浏览器,在本地做好文件格式、长宽、大小的检测,减少浏览器交互。 现实是残酷的,为了兼容Ie9 还是用上了 flash,第二篇来解

  • 本文向大家介绍vue实现压缩图片预览并上传功能(promise封装),包括了vue实现压缩图片预览并上传功能(promise封装)的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了vue实现压缩图片预览并上传的具体代码,供大家参考,具体内容如下 主要用到filereader、canvas 以及 formdata 这三个h5的api 过程大致分为三步: 用户使用input file上传图

  • 本文向大家介绍Nodejs实现图片上传、压缩预览、定时删除功能,包括了Nodejs实现图片上传、压缩预览、定时删除功能的使用技巧和注意事项,需要的朋友参考一下 前言 我们程序员日常都会用到图片压缩,面对这么常用的功能,肯定要尝试实现一番。 第一步,node基本配置 这里我们用到的是koa框架,它可是继express框架之后又一个更富有表现力、更健壮的web框架。 1、引入基本配置 2、使用基本配置