当前位置:首页 > VUE

vue实现图片压缩

2026-02-18 07:18:32VUE

使用 canvas 实现图片压缩

在 Vue 中可以通过 canvas 的 drawImagetoDataURL 方法实现图片压缩。创建一个方法接收 File 对象和压缩比例参数,返回压缩后的 base64 或 Blob 对象。

vue实现图片压缩

function compressImage(file, quality = 0.8) {
  return new Promise((resolve) => {
    const reader = new FileReader()
    reader.onload = (e) => {
      const img = new Image()
      img.onload = () => {
        const canvas = document.createElement('canvas')
        const ctx = canvas.getContext('2d')
        canvas.width = img.width
        canvas.height = img.height
        ctx.drawImage(img, 0, 0, canvas.width, canvas.height)
        canvas.toBlob(
          (blob) => resolve(blob),
          'image/jpeg',
          quality
        )
      }
      img.src = e.target.result
    }
    reader.readAsDataURL(file)
  })
}

集成到 Vue 组件

在组件中创建文件上传 input,调用压缩方法后显示预览或上传到服务器。

<template>
  <div>
    <input type="file" @change="handleUpload" accept="image/*">
    <img v-if="previewUrl" :src="previewUrl" style="max-width: 300px">
  </div>
</template>

<script>
export default {
  data() {
    return {
      previewUrl: ''
    }
  },
  methods: {
    async handleUpload(e) {
      const file = e.target.files[0]
      if (!file) return

      const compressedBlob = await compressImage(file)
      this.previewUrl = URL.createObjectURL(compressedBlob)

      // 上传逻辑
      const formData = new FormData()
      formData.append('image', compressedBlob, file.name)
      // axios.post('/upload', formData)
    }
  }
}
</script>

使用第三方库

对于更复杂的压缩需求,可以使用专门的处理库:

  1. compressorjs - 提供更多压缩选项
    npm install compressorjs
import Compressor from 'compressorjs'

new Compressor(file, {
  quality: 0.6,
  success(result) {
    // 处理压缩结果
  }
})
  1. image-conversion - 支持多种输出格式
    npm install image-conversion
import * as imageConversion from 'image-conversion'

imageConversion.compress(file, 0.5).then(res => {
  // 处理压缩结果
})

注意事项

  • 大图片压缩时需要考虑内存问题,建议限制上传文件大小
  • 移动端拍摄的照片可能包含 EXIF 旋转信息,需要正确处理方向
  • 不同格式图片压缩效果不同,JPEG 适合照片,PNG 适合带透明度的图片
  • 压缩比例需要根据实际需求调整,过高的压缩会导致明显质量下降

vue实现图片压缩

标签: 图片vue
分享给朋友:

相关文章

vue怎么实现文件树

vue怎么实现文件树

Vue 实现文件树的方法 使用递归组件 递归组件是处理嵌套数据结构的理想方式。文件树通常包含文件夹和文件的嵌套结构,适合用递归组件实现。 <template> <ul>…

vue中实现显示和隐藏

vue中实现显示和隐藏

控制显示与隐藏的方法 在Vue中实现元素的显示和隐藏可以通过多种方式完成,以下是常见的几种方法: 1. 使用v-if指令v-if根据条件动态添加或移除DOM元素,适合需要频繁切换的场景。当条件为f…

vue 实现筛选

vue 实现筛选

实现筛选功能的基本方法 在Vue中实现筛选功能通常涉及以下几个核心步骤: 数据绑定与筛选逻辑 使用v-model绑定筛选条件到Vue实例的数据属性,结合计算属性实现动态筛选: data() {…

vue mvvm实现

vue mvvm实现

Vue MVVM 实现原理 Vue.js 是一个基于 MVVM(Model-View-ViewModel)模式的框架,其核心是通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 M…

vue实现心电图

vue实现心电图

Vue 实现心电图效果 在 Vue 中实现心电图效果通常需要结合 Canvas 或 SVG 进行动态绘图,模拟心电图数据的实时变化。以下是两种实现方式的核心思路和代码示例: 使用 Canvas…

vue实现翻页

vue实现翻页

Vue实现翻页功能 在Vue中实现翻页功能通常需要结合分页组件和数据请求逻辑。以下是常见的实现方法: 使用Element UI分页组件 安装Element UI后,可以直接使用其分页组件:…