UpladFile.js 2.3 KB

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