>웹 프론트엔드 >View.js >Vue에서 이미지 자르기 및 압축을 구현하는 방법은 무엇입니까?

Vue에서 이미지 자르기 및 압축을 구현하는 방법은 무엇입니까?

WBOY
WBOY원래의
2023-06-25 10:27:334699검색

모바일 장치가 대중화되면서 이미지 처리에 대한 수요가 점점 더 높아지고 있으며, 그 중 이미지 자르기 및 압축이 일반적인 요구 사항입니다. 이 기사에서는 Vue에서 이미지 자르기 및 압축을 구현하는 방법을 소개합니다.

1. 사진 자르기

  1. 플러그인 설치

먼저 Cropperjs를 기반으로 하며 이미지 자르기 기능을 빠르게 구현할 수 있는 플러그인 vue-cropper를 설치해야 합니다.

npm install vue-cropper --save
  1. 플러그인 소개

main.js에 플러그인 소개 및 등록:

import VueCropper from 'vue-cropper'
Vue.component('VueCropper', VueCropper)
  1. 컴포넌트 추가

컴포넌트에 자르기 컴포넌트 추가:

<template>
  <div>
    <input type="file" ref="file" @change="getFile($event)" />
    <vue-cropper v-model="image" :guides="true"></vue-cropper>
    <button @click="getCroppedImage">裁剪图片</button>
    <div class="result">
      <img :src="croppedImage" alt="裁剪后的图片" v-if="croppedImage" />
    </div>
  </div>
</template>
  1. 사진 가져오기

데이터의 그림 객체 정의 및 자른 이미지 객체 정의:

data () {
  return {
    image: null,
    croppedImage: null
  }
}

업로드된 이미지를 가져오기 위해 getFile 메소드 추가:

getFile (event) {
  let file = event.target.files[0]
  let reader = new FileReader()
  reader.readAsDataURL(file)
  reader.onload = e => {
    this.image = e.target.result
  }
}
  1. 이미지 자르기

이미지 자르기를 위한 getCroppedImage 메소드 추가:

getCroppedImage () {
  this.$refs.cropper.getCroppedCanvas().toBlob(blob => {
    this.croppedImage = window.URL.createObjectURL(blob)
  })
}

2. 이미지 압축

이미지를 자르는 것 외에도 페이지 로딩 속도를 향상시키기 위해 이미지를 압축해야 하는 경우도 있습니다. 이미지 압축 방법은 다음과 같습니다.

  1. 플러그인 설치

image-compressor.js를 기반으로 이미지 압축 기능을 빠르게 구현할 수 있는 플러그인 vue-image-compressor를 설치하세요.

npm install vue-image-compressor --save
  1. 플러그인 소개

main.js에 플러그인 소개 및 등록:

import ImageCompressor from 'vue-image-compressor'
Vue.use(ImageCompressor)
  1. 컴포넌트 추가

컴포넌트에 업로드 구성 요소 추가:

<template>
  <div>
    <input type="file" ref="file" @change="getFile($event)" />
    <button @click="compressImage">压缩图片</button>
    <div class="result">
      <img :src="compressedImage" alt="压缩后的图片" v-if="compressedImage" />
    </div>
  </div>
</template>
  1. 이미지 가져오기

이미지 개체 정의 data 그리고 압축된 이미지 객체:

data () {
  return {
    image: null,
    compressedImage: null
  }
}

업로드된 이미지를 가져오기 위해 getFile 메소드 추가:

getFile (event) {
  let file = event.target.files[0]
  let reader = new FileReader()
  reader.readAsDataURL(file)
  reader.onload = e => {
    this.image = e.target.result
  }
}
  1. 압축된 이미지

이미지를 압축하기 위해 extractImage 메소드 추가:

compressImage () {
  let options = {
    quality: 0.7,
    maxWidth: 500,
    maxHeight: 500,
    mimeType: 'image/jpeg'
  }
  this.$compress(this.image, options).then(data => {
    this.compressedImage = data
  })
}

그중 옵션은 압축 매개변수, 품질입니다. 압축 품질을 의미하고, maxWidth 및 maxHeight는 최대 너비와 높이를 나타내며, mimeType은 압축된 이미지 형식을 나타냅니다.

3. 샘플 코드

전체 코드는 다음과 같습니다.

<template>
  <div>
    <h2>图片裁剪</h2>
    <input type="file" ref="file" @change="getFile($event)" />
    <vue-cropper v-model="image" :guides="true"></vue-cropper>
    <button @click="getCroppedImage">裁剪图片</button>
    <div class="result">
      <img :src="croppedImage" alt="裁剪后的图片" v-if="croppedImage" />
    </div>
    <h2>图片压缩</h2>
    <input type="file" ref="file" @change="getFile($event)" />
    <button @click="compressImage">压缩图片</button>
    <div class="result">
      <img :src="compressedImage" alt="压缩后的图片" v-if="compressedImage" />
    </div>
  </div>
</template>

<script>
import VueCropper from 'vue-cropper'
import ImageCompressor from 'vue-image-compressor'

export default {
  name: 'Image',
  components: {
    VueCropper
  },
  plugins: {
    ImageCompressor
  },
  data () {
    return {
      image: null,
      croppedImage: null,
      compressedImage: null
    }
  },
  methods: {
    getFile (event) {
      let file = event.target.files[0]
      let reader = new FileReader()
      reader.readAsDataURL(file)
      reader.onload = e => {
        this.image = e.target.result
      }
    },
    getCroppedImage () {
      this.$refs.cropper.getCroppedCanvas().toBlob(blob => {
        this.croppedImage = window.URL.createObjectURL(blob)
      })
    },
    compressImage () {
      let options = {
        quality: 0.7,
        maxWidth: 500,
        maxHeight: 500,
        mimeType: 'image/jpeg'
      }
      this.$compress(this.image, options).then(data => {
        this.compressedImage = data
      })
    }
  }
}
</script>

<style>
.result {
  margin-top: 1rem;
  max-width: 500px;
}
</style>

4. 요약

이 글에서는 Vue에서 이미지 자르기 및 압축 기능을 구현하는 방법을 소개합니다. 압축에는 자르기 및 타사 플러그인이 사용됩니다. vue-image-compressor 플러그인을 사용하면 이미지 처리 기능을 빠르게 구현하고 개발 효율성을 높일 수 있습니다.

위 내용은 Vue에서 이미지 자르기 및 압축을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.