..."> 首页..."> 工具类:JS版图片压缩获得base64字符串
 个人随笔
目录
工具类:JS版图片压缩获得base64字符串
2020-09-11 22:54:11

有时候我们上传图片需要对图片进行压缩,为了减少传输过程的流量损耗,可以选择直接在页面用js进行压缩即可,我这里是直接对图片压缩后获取base64的二进制流,然后我们可以当做字符串参数传输到后台,后台再进行base64解码就可以获取文件啦,代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>首页</title>
  6. </head>
  7. <body>
  8. <input type="file" id="image_upload" accept="image/*" >
  9. <script>
  10. var fileInput = document.getElementById("image_upload");
  11. //选择文件
  12. fileInput.addEventListener('change',function(){
  13. //如果未传入文件则中断
  14. if(fileInput.files[0] == undefined){
  15. return;
  16. }
  17. var file = fileInput.files[0];
  18. //FileReader可直接将上传文件转化为二进制流
  19. const img = new Image();
  20. var reader = new FileReader();
  21. reader.readAsDataURL(file);//转化二进制流,异步方法
  22. reader.onload = function(){//完成后this.result为二进制流
  23. // console.log(this.result);
  24. //页面显示文件名
  25. var base64Str = this.result;
  26. img.src = base64Str;
  27. //用onload才能获取值
  28. img.onload=function(){
  29. var canvas = document.createElement('canvas');
  30. var context = canvas.getContext('2d');
  31. var originWidth = img.width;
  32. var originHeight = img.height;
  33. // 最大尺寸限制,这个可以做成配置的
  34. var maxWidth = 1000;
  35. var maxHeight =1000;
  36. // 目标尺寸
  37. var targetWidth = originWidth;
  38. var targetHeight = originHeight;
  39. console.log("当前图片尺寸:originWidth="+originWidth+";originHeight="+originHeight);
  40. //对长或者宽大于最大尺寸的,进行等比例压缩
  41. if (originWidth > maxWidth || originHeight > maxHeight) {
  42. if (originWidth / originHeight > 1) {
  43. // 宽图片
  44. targetWidth = maxWidth;
  45. targetHeight = Math.round(maxWidth * (originHeight / originWidth));
  46. }else {
  47. // 高图片
  48. targetHeight = maxHeight;
  49. targetWidth = Math.round(maxHeight * (originWidth / originHeight));
  50. }
  51. }
  52. console.log("目标图片尺寸:targetWidth="+targetWidth+";targetHeight="+targetHeight);
  53. canvas.width = targetWidth;
  54. canvas.height = targetHeight;
  55. context.clearRect(0, 0, targetWidth, targetHeight);
  56. // 图片绘制
  57. context.drawImage(img, 0, 0, targetWidth, targetHeight);
  58. canvas.toBlob(function(blob) {
  59. console.log(blob);
  60. var a = new FileReader();
  61. a.readAsDataURL(blob);
  62. a.onload = function(){
  63. var b64 = this.result;
  64. var startNum = b64.indexOf("base64,");
  65. startNum = startNum*1 + 7;
  66. //去除前部格式信息(如果有需求)
  67. var baseStr = b64.slice(startNum);
  68. //临时存储二进制流,后台传入要的就是base64的二进制流
  69. console.log("baseStr:"+baseStr);
  70. //比如java后台只需要用如下方法就可以获取文件字节流即可
  71. //byte[] src = Base64.decodeBase64(baseStr);
  72. };
  73. //设置为jpeg才能压缩,若是png可能图片会更大
  74. }, 'image/jpeg');
  75. };
  76. };
  77. });
  78. </script>
  79. </body>
  80. </html>
 364

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2