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

 更新时间:2018年03月30日 11:36:13   作者:Remind_hh  
这篇文章主要介绍了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实现图片的预览压缩和上传功能 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • bootstrap基本配置_动力节点Java学院整理

    bootstrap基本配置_动力节点Java学院整理

    这篇文章主要介绍了bootstrap基本配置,详细讲解如何下载并安装 Bootstrap,讨论 Bootstrap 文件结构,并通过一个实例演示它的用法。
    2017-07-07
  • JavaScript之解构赋值的理解

    JavaScript之解构赋值的理解

    今天小编就为大家分享一篇关于JavaScript之解构赋值的理解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • JavaScript函数的使用教程

    JavaScript函数的使用教程

    这篇文章主要介绍了JavaScript函数的使用教程,JavaScript函数是被设计为执行特定任务的代码块。JavaScript函数会在某代码调用它时被执行。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • JavaScript多并发问题如何处理

    JavaScript多并发问题如何处理

    这篇文章给大家介绍javascript多并发问题处理方法,涉及到js多并发处理方法相关知识,对js多并发处理方法感兴趣的朋友可以参考下本文
    2015-10-10
  • javascript 正则替换 replace(regExp, function)用法

    javascript 正则替换 replace(regExp, function)用法

    刚在弄网页通过servlet返回的json数据来添加div元素,简单研究了下replace(regExp, function)方式的function参数.
    2010-05-05
  • JavaScript Date对象详解

    JavaScript Date对象详解

    这篇文章主要为大家详细介绍了JavaScript Date对象,介绍 Date 日期和时间对象的操作,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例

    JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例

    这篇文章主要介绍了JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法,涉及javascript二叉树定义、赋值、遍历、查找等相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • ionic2.0双击返回键退出应用

    ionic2.0双击返回键退出应用

    这篇文章主要为大家详细介绍了ionic2.0双击返回键退出应用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • javascript 动态样式添加的简单实现

    javascript 动态样式添加的简单实现

    下面小编就为大家带来一篇javascript 动态样式添加的简单实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • 详解Bootstrap四种图片样式

    详解Bootstrap四种图片样式

    本文给大家介绍Bootstrap 对图片的支持,Bootstrap提供了四个可对图片应用简单样式的class,对Bootstrap四种图片class相关知识感兴趣的朋友一起学习吧
    2016-01-01

最新评论