在日常的一些项目中会有上传图片之类的接口,如果图片过大了再上传的时候是非常的耗时以及占用资源,在这里就给大家分享一下如何在js中把大的图片压缩成小的图片,我这里的功能是用户点击按钮调用相机或者选择文件后进行压缩的:

直接上代码

  1. /*
  2. 三个参数
  3. file:一个是文件(类型是图片格式),
  4. w:一个是文件压缩的后宽度,宽度越小,字节越小
  5. objDiv:一个是容器或者回调函数
  6. photoCompress()
  7. */
  8. function photoCompress(file,w,objDiv){
  9. var ready=new FileReader();
  10. /*开始读取指定的Blob对象或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件处理程序,则调用之.同时,result属性中将包含一个data: URL格式的字符串以表示所读取文件的内容.*/
  11. ready.readAsDataURL(file);
  12. ready.onload=function(){
  13. var re=this.result;
  14. canvasDataURL(re,w,objDiv)
  15. }
  16. }
  17.  
  18. function canvasDataURL(path, obj, callback){
  19. var img = new Image();
  20. img.src = path;
  21. img.onload = function(){
  22. var that = this;
  23. // 默认按比例压缩
  24. var w = that.width,
  25. h = that.height,
  26. scale = w / h;
  27. w = obj.width || w;
  28. h = obj.height || (w / scale);
  29. var quality = 0.7; // 默认图片质量为0.7
  30. //生成canvas
  31. var canvas = document.createElement('canvas');
  32. var ctx = canvas.getContext('2d');
  33. // 创建属性节点
  34. var anw = document.createAttribute("width");
  35. anw.nodeValue = w;
  36. var anh = document.createAttribute("height");
  37. anh.nodeValue = h;
  38. canvas.setAttributeNode(anw);
  39. canvas.setAttributeNode(anh);
  40. ctx.drawImage(that, 0, 0, w, h);
  41. // 图像质量
  42. if(obj.quality && obj.quality <= 1 && obj.quality > 0){
  43. quality = obj.quality;
  44. }
  45. // quality值越小,所绘制出的图像越模糊
  46. var base64 = canvas.toDataURL('image/jpeg', quality);
  47. // 回调函数返回base64的值
  48. callback(base64);
  49. }
  50. }
  51.  
  52. function setImagePreview(e,a) {
  53.  
  54. var fileMsg = e.files[0];
  55. if(fileMsg==null){
  56. return;
  57. }
  58. //文件名
  59. var fileName = fileMsg.name;
  60. //大小 字节
  61. var fileSize = fileMsg.size;
  62.  
  63. /*调用
  64. * fileMsg 是input type="file" 的值
  65. * quality 压缩图片质量 范围是(0-1)
  66. * base64Codes 就是最终压缩成的图片
  67. */
  68. photoCompress(fileMsg, {
  69. quality: 0.3
  70. }, function(base64Codes){
  71. //这里可以一个图片预览 把base64Codes 赋值给img的src即可
  72. });
  73. }

html的写法:

  1. <input class="btn takepicture" type="file" name="img5q" id="img5q" accept="image/*" onchange="javascript:setImagePreview(this,5);"/>

其实图片压缩是很简单的,这里说明一下,如果需要上传到服务器的话,把base64Codes当成一个字符串传到服务器即可,mysql表中对应的字段类型可用用longtext来储存,但是longtext的长度也是有限制的,所以在上传的时候要控制文件大小。

如有需要可以加我Q群【308742428】大家一起讨论技术。

后面会不定时为大家更新文章,敬请期待。

喜欢的朋友可以关注下。
如果对你有帮助,请打赏一下!!!

  

  

base64之js压缩图片的更多相关文章

  1. js压缩图片base64长度

    var myCanvas=$('.img-container > img').cropper('getCroppedCanvas'); (function (base64){ var image ...

  2. JS压缩图片(canvas),返回base64码

    上传图片时总会遇到图片过大上传不上去的问题,本方法是在网上搜的压缩图片的例子,我测试过了,确实能用,但是照搬别人的代码,发现压缩后图片会失真,不清晰,现经修改图片清晰度还可以,不仔细看差别不大,so, ...

  3. file上传图片,base64转换、压缩图片、预览图片、将图片旋转到正确的角度

    /** * 将base64转换为文件对象 * (即用文件上传输入框上传文件得到的对象) * @param {String} base64 base64字符串 */ function convertBa ...

  4. js压缩图片上传插件localResizeIMG

    示例 /** * 本地图片压缩后上传 */ $("#vfile").change(function(){ var _this = $(this); lrz(this.files[0 ...

  5. js 压缩图片(只缩小体积,不更改图片尺寸)

      1.情景展示 如上图所示,点击上传图片按钮,调用手机摄像头拍照功能. <input onchange="javascript:imgFun.uploadPicture();&quo ...

  6. js 压缩图片 上传

    感谢,参考了以下作者的绝大部分内容 https://blog.csdn.net/tangxiujiang/article/details/78755292 https://blog.csdn.net/ ...

  7. 了解JS压缩图片,这一篇就够了

    前言 公司的移动端业务需要在用户上传图片是由前端压缩图片大小,再上传到服务器,这样可以减少移动端上行流量,减少用户上传等待时长,优化用户体验. 插播一下,本文案例已整理成插件,已上传npm ,可通过 ...

  8. HTML5 JS 压缩图片,并取得图片的BASE64编码上传

    基本过程 1) 调用 FileReader 的 reader.readAsDataURL(img); 方法, 在其onload事件中, 将用户选择的图片读入 Image对象. 2) 在image对象的 ...

  9. js压缩图片并上传,不失真,保证图片清晰度

    <!DOCTYPE HTML> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

随机推荐

  1. Django form验证

    # 模版 class LoginForm(forms.Form): # 模版中的元素 user = forms.CharField(min_length=6,error_messages={" ...

  2. linux 图形化界面 && 谷歌浏览器 安装

    一.图形化界面安装 yum groupinstall "Desktop" 如果运行显示 则 yum groupinstall "X Window System" ...

  3. python3 第三十三章 - 标准库概览Part II

    第二部分提供了更高级的模块用来支持专业编程的需要.这些模块很少出现在小型的脚本里. 1. 输出格式化reprlib 模块提供了一个用来缩写显示大型或深层嵌套容器的 定制版repr() . >&g ...

  4. 使用Python完成排序(快排法、归并法)

    class Sort(object): def quick_sort(self, ls): self.quick_sort_helper(ls, 0, len(ls) - 1) return ls d ...

  5. 使用C#重写网上的60行 Javascript 俄罗斯方块源码 (带注释)

    在很久很久以前,就已经看过 60行Js的俄罗斯方块源码.无奈当时能力不够看明白,当时觉得就是个神作. 现在总算有空再看了,顺便用c#实现一遍(超过60行),顺道熟悉下Js API. 网上其他博客也有分 ...

  6. springmvc 简单使用

    一.配置(使用)流程 1.新建maven工程,在pom.xml中导入相关包,重要的是springmvc包,servlet包,jstl包 <dependencies>             ...

  7. PHP安装+使用

        curl -s http://php-osx.liip.ch/install.sh | bash -s 5.4       ...... Extracting usr/local/php5-5 ...

  8. PE文件常用结构体

    Dos头结构: typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header WORD e_magic; // Magic number WORD e_c ...

  9. centos 6.5升级openssl

    1.下载升级版本 wget https://www.openssl.org/source/openssl-1.1.0i.tar.gz 2.安装 zlib zlib-devel yum -y insta ...

  10. C#反编译笔记

    碰到下面这种 public class DstBoneName : Enum { public int value__; ; } 还原为 public enum DstBoneName { cf_J_ ...