美文网首页
上传图片压缩

上传图片压缩

作者: 普通不平庸 | 来源:发表于2020-12-15 18:32 被阅读0次

1. 原生的上传图片

  <input type="file" onchange="fileChange" />

  function fileChange(event){
    // 获得文件对象
    console.log(event.targe.files[0])
    const file = event.target.files[0]
    // 获得base64流数据
    const reader = new FileReader()
    reader.readAsDataURL(file)
    reader.onload = (e) => {
      // e.target.result 是图片的 base64 流数据
      console.log(e.target.result)
    }
  }

通过上述代码可以得到 上传文件的文件对象,然后可转换为 base64

参见例子获得文件对象以及转换base64

2. 图片压缩

上述代码获得base64流数据,压缩函数如下
```javascript
 function compressImage(base64Img){
    const image = new Image()
    image.src = base64Img
    let canvas = document.getElementById("compressCanvas")
    if(!canvas){
      const body = document.body
      canvas = document.createElement('canvas') // 创建canvas标签
      canvas.id = 'compressCanvas' // 给外层容器添加一个id
      canvas.style.position = 'fixed'
      canvas.style.zIndex = '-1'
      canvas.style.opacity = '0'
      canvas.style.top = '-100%'
      canvas.style.left = '-100%'
      body.append(canvas)
    }
    const context = canvas.getContext("2d")
    canvas.height = height
    canvas.width = width
    context.drawImage(image, 0, 0, width, height)
    const compressBase64 = canvas.toDataURL('image/jpeg', '0.7')
    // 此处获得压缩后的 base64 流图片
    return compressBase64
}

3. 将压缩后的base64 图片转换为对象

  // 传入文件对象和文件名合成 file 对象 
  function base4ToFile (base64Image, fileName) {
    const arr = base64Image.split(',')
    const mime = arr[0].match(/:(.*?);/)[1]
    const bstr = atob(arr[1])
    let n = bstr.length
    const u8arr = new Uint8Array(n)
    while (n--) {
      u8arr[n] = bstr.charCodeAt(n)
    }
    fileName = fileName || ('pj' + Date.now() + '.jpg')
    return new File([u8arr], fileName, { type: mime })
  }

4. 至此,功能部分完成

串起来即可
完整例子 [点击跳转](https://codepen.io/mineminego/pen/qBarPwV)

相关文章

  • iOS 网络上传图片

    上传图片 构造参数(NSArray *)files 上传图片—压缩 压缩到小于(...

  • iPic for Mac(图床神器) v1.7.0中文免费版

    上传图片相关设置 上传前压缩图片 可以在 iPic 的 偏好设置 中开启「上传前压缩图片」选项,目前支持压缩的图片...

  • Vue上传图片压缩的问题

    上传图片太大,需要前台进行图片压缩上传图片大于100* 1024 的用canvas 来压缩来解决然后IOS拍照上传...

  • 图片压缩上传

    参考1-HTML5实现图片压缩上传功能参考2-移动前端—图片压缩上传实践参考3-移动端H5图片压缩上传 大体步骤 ...

  • 前端学习之路——图片上传压缩

    废话不多少,直接上代码! 压缩图片函数 调用函数 图片上传与压缩 图片上传与压缩就是这么简单,欢迎大家点评指导。

  • vue 图片压缩

    vue 图片压缩 上传图片大于100* 1024 的用canvas 来压缩来解决 然后IOS拍照上传会有图片旋转的...

  • vue 图片压缩

    vue 图片压缩 上传图片大于100* 1024 的用canvas来压缩来解决 然后IOS拍照上传会有图片旋转的问...

  • h5图片上传预览压缩

    图片压缩预览上传 欢迎纠错 ~

  • 提高上传效率,iOS图片压缩总结

    最近项目中用到七牛上传图片,多张上传时,png图片大,上传极慢,特地研究了一下图片压缩的方法。 两种压缩图片的方法...

  • iOS 上传图片到服务器

    1.单张图片上传 2.多张图片上传 PS:上传图片前,必须先压缩图片,不然图片过大,可能会导致上传失败!

网友评论

      本文标题:上传图片压缩

      本文链接:https://www.haomeiwen.com/subject/utnwgktx.html