Js利用Canvas实现图片压缩功能

 更新时间:2017年09月13日 07:51:04   作者:similar  
下面小编就为大家带来一篇Js利用Canvas实现图片压缩功能。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

最近做的APP项目涉及到手机拍照上传图片,因为手机拍照的图片通常都比较大,所以上传的时候就会很慢。为此,需要对图片进行压缩处理来优化上传功能。以下是具体实现:

/* 
 * 图片压缩
 * img    原始图片
 * width   压缩后的宽度
 * height  压缩后的高度
 * ratio   压缩比率 
 */
 function compress(img, width, height, ratio) {        
   var canvas, ctx, img64;
        
   canvas = document.createElement('canvas');        
   canvas.width = width;
   canvas.height = height;
        
   ctx = canvas.getContext("2d");        
   ctx.drawImage(img, 0, 0, width, height);
        
   img64 = canvas.toDataURL("image/jpeg", ratio);
        
   return img64;
 }

上面是一个图片压缩函数,返回 base64 格式的图片数据。 其中压缩比率取值(0 - 1 之间)越大图片质量越高。建议不要将图片转为 png 格式,因为转为 png 格式,图片的 base64 比转为 jpeg 的要长不少。下面是实际调用:

var image = new Image();
image.src = "/img/test.jpg";
      
image.onload = function(){
  var img64 = compress(image, 500, 400, 0.7);
  document.getElementById("test").src = img64;
}

注意: 压缩方法的调用以及图片src赋值必须放在图片的 onload 方法里面。因为只有等图片加载完成后才能进行压缩处理,从而转换为base64 进行赋值。 如果放在 onload 方法外面,则可能压缩代码无效,或者会生成一张纯黑色的图片。

以上这篇Js利用Canvas实现图片压缩功能就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • js快速与任意QQ号码建立临时对话

    js快速与任意QQ号码建立临时对话

    那时候在群里讨论的,吸纳很多人的方法与意见,修改而成的
    2008-10-10
  • JS中利用FileReader实现上传图片前本地预览功能

    JS中利用FileReader实现上传图片前本地预览功能

    FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。下面通过本文给大家介绍JS中利用FileReader实现上传图片前本地预览功能,需要的朋友参考下
    2018-03-03
  • 基于JavaScript实现页面轮播图渐变效果的示例代码

    基于JavaScript实现页面轮播图渐变效果的示例代码

    这篇文章主要给大家分享如何使用JavaScript实现一个页面轮播图渐变效果,轮播图是网页开发中常见的功能之一,它能够展示多个图片或内容,并以一定的时间间隔进行自动切换,而通过添加渐变效果,可以让切换过程更加平滑流畅,感兴趣的小伙伴可以自己动手尝试一下
    2023-10-10
  • JavaScript中while循环的基础使用教程

    JavaScript中while循环的基础使用教程

    这篇文章主要给大家介绍了关于JavaScript中while循环的基础使用教程,文中通过示例代码介绍的非常详细,对大家学习或者使用JavaScript具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-08-08
  • JS中Require与Import 区别对比分析

    JS中Require与Import 区别对比分析

    这篇文章主要为大家介绍了JS中Require与Import 区别对比分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 解决Webpack 热部署检测不到文件变化的问题

    解决Webpack 热部署检测不到文件变化的问题

    下面小编就为大家分享一篇解决Webpack 热部署检测不到文件变化的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • 使用 JS 判断用户是否处于活跃状态的案例详解

    使用 JS 判断用户是否处于活跃状态的案例详解

    这篇文章主要介绍了如何使用 JS 判断用户是否处于活跃状态,案例演示了如何获取用户活跃状态,时间阈值定为5秒,超出该阈值没有操作表示非活跃,否则属于正在活跃中,需要的朋友可以参考下
    2024-05-05
  • 使用JavaScript实现ajax的实例代码

    使用JavaScript实现ajax的实例代码

    实现ajax之前必须要创建一个 XMLHttpRequest 对象。这是必须的。那么对使用js实现ajax的代码感兴趣的朋友可以参考下本文
    2016-05-05
  • javascript密码强度校验代码(两种方法)

    javascript密码强度校验代码(两种方法)

    为了保证网站个人信息的安全,很多网站在注册页面都设置密码强度这项,用javascript如何实现密码强度校验代码呢?下面小编给大家整理了两种方法使用javascript密码强度校验代码,有需要的朋友可以参考下
    2015-08-08
  • js封装的textarea操作方法集合(兼容很好)

    js封装的textarea操作方法集合(兼容很好)

    对应用到对textarea处理的朋友可以参考下。控制的比较不错的代码封装。
    2010-11-11

最新评论