当前位置:首页 > VUE

vue实现图片压缩

2026-02-18 07:18:32VUE

使用 canvas 实现图片压缩

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

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>

使用第三方库

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

vue实现图片压缩

  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 实现拖拽功能 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性和相关事件实现拖拽功能。 <template> &l…

vue实现机制

vue实现机制

Vue 实现机制的核心原理 Vue.js 的核心实现机制主要基于响应式系统、虚拟 DOM 和组件化设计。以下是关键实现细节: 响应式系统 Vue 通过 Object.defineProperty(V…

vue 实现注册

vue 实现注册

Vue 实现注册功能 注册功能通常包括表单验证、数据提交和用户反馈。以下是实现注册功能的步骤: 1. 创建注册表单组件 在 Vue 项目中创建一个注册表单组件,包含用户名、邮箱、密码等输入字段。…

vue实现driver

vue实现driver

Vue 实现 Driver.js 引导功能 Driver.js 是一个轻量级的 JavaScript 库,用于在网页上创建引导式导览。以下是在 Vue 项目中集成 Driver.js 的详细方法:…

vue 实现脚本

vue 实现脚本

Vue 实现脚本的方法 Vue.js 提供了多种方式来实现脚本功能,包括组件内脚本、混入(Mixins)、插件(Plugins)以及自定义指令等。以下是常见的实现方式: 组件内脚本 在 Vue 单文…

vue实现Siri

vue实现Siri

Vue 实现 Siri 风格语音交互 实现类似 Siri 的语音交互功能需要结合语音识别、语音合成和前端交互逻辑。Vue 作为前端框架,可以很好地管理这些功能的交互状态。 语音识别集成 使用 Web…