当前位置:   article > 正文

js纯前端压缩图片_纯前端实现压缩图片大小

纯前端实现压缩图片大小

js纯前端压缩

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>压缩图片</title>
  7. </head>
  8. <body>
  9. <input id='file' type="file">
  10. <script>
  11. var eleFile = document.querySelector('#file')
  12. var file;
  13. var render = new FileReader(), img = new Image();
  14. render.onload = function(e) {
  15. img.src = e.target.result
  16. }
  17. // 获取图片文件
  18. eleFile.addEventListener('change', function(e) {
  19. file = e.target.files[0];
  20. if(file.type.indexOf('image') === 0) {
  21. //读取文件,并返回一个URL格式的Base64字符串
  22. render.readAsDataURL(file)
  23. }
  24. })
  25. //使用canvas把图片画出来
  26. var canvas = document.createElement('canvas');
  27. var context = canvas.getContext('2d');
  28. img.onload = function() {
  29. //原始尺寸
  30. var originWidth = this.width;
  31. var originHeight = this.height;
  32. //最大尺寸限制
  33. var maxWidth = 200, maxHeight = 200
  34. // 目标尺寸
  35. var targetWidth = originWidth, targetHeight = originHeight;
  36. //当原始尺寸大于200*200时候
  37. if(originWidth > maxWidth || originHeight > maxHeight) {
  38. if(originWidth / originHeight > maxWidth / maxHeight) {
  39. //更宽
  40. targetWidth = maxWidth;
  41. targetHeight = Math.round(maxWidth * (originHeight / originWidth))
  42. }else {
  43. targetHeight = maxHeight;
  44. targetWidth = Math.round(maxHeight * (originWidth / originHeight))
  45. }
  46. }
  47. //画图
  48. canvas.width = targetWidth;
  49. canvas.height = targetHeight;
  50. //清除画布
  51. context.clearRect(0,0,targetWidth, targetHeight)
  52. //图片压缩
  53. context.drawImage(img, 0, 0, targetWidth, targetHeight);
  54. //canvas 转为blob并上传
  55. canvas.toBlob(function(blob) {
  56. try {
  57. var xhr = new XMLHttpRequest();
  58. xhr.onreadystatechange = function() {{
  59. if(xhr.status == 200) {
  60. }
  61. }}
  62. //开始上传
  63. xhr.open('POST','upload.php', true);
  64. xhr.send(blob)
  65. } catch (error) {
  66. console.log(error)
  67. }
  68. }, file.type || 'image/png')
  69. //在页面预览原图片
  70. var div1 = document.createElement('div')
  71. div1.innerText = '原图:'
  72. document.body.appendChild(div1)
  73. document.body.appendChild(img)
  74. //canvas预览
  75. var div2 = document.createElement('div')
  76. div2.innerText = 'canvas图:'
  77. document.body.appendChild(div2)
  78. document.body.appendChild(canvas)
  79. }
  80. </script>
  81. </body>
  82. </html>

分析:原理是用canvas的生成的图片,控制其大小来进行图片的压缩,需要注意的是,如果图片的尺寸太小,会导致图片模糊,使用时候,注意设置其比例控制。

  1. 通过FileReader读取图片文件,用 Image来装图片url(可以用来预览)
  2. 转化成base64字符串模式
  3. 通过maxWidth,MaxHeight和比例来控制最终的canvas的宽高
  4. 用canvas画图
  5. 在把canvas输出blob文件,进行上传
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/612699
推荐阅读
相关标签