Das Vue-Cropper-Plugin realisiert die Kapselung der Bildaufnahme- und Upload-Komponente

Das Vue-Cropper-Plugin realisiert die Kapselung der Bildaufnahme- und Upload-Komponente

Der spezifische Code zum Einkapseln der Bildaufnahme- und Upload-Komponente basierend auf dem Vue-Cropper-Plugin wird zu Ihrer Information bereitgestellt. Der spezifische Inhalt ist wie folgt

Bedarfsszenario:

Die Backend-Entwicklung erfordert das Hochladen von Bildern und deren Zuschneiden in den entsprechenden Proportionen. Diese Komponentenentwicklung verwendet die Ant Design Vue-Komponentenbibliothek mit dem Vue-Cropper-Plugin zur Kapselung

Die Umsetzung erfolgt wie folgt

html

<Vorlage>
  <div>
    <a-hochladen
      Name = "Avatar"
      Listentyp = "Bildkarte"
      Klasse = "Avatar-Uploader"
      :show-upload-list="false"
      :custom-request="BenutzerdefinierteAnfrage"
      :before-upload="vor dem Hochladen"
      :style="`Breite: ${width}; Höhe: ${height};`"
    >
      <Bild
        v-if="Bild-URL && !wird geladen"
        :src="Bild-URL"
        alt="Avatar"
        :style="`Breite: ${width}; Höhe: ${height};`"
      />
      <div v-sonst>
        <a-icon :type="wird geladen ? 'wird geladen' : 'plus'" />
        <div class="ant-upload-text">Bilder hochladen</div>
      </div>
    </a-upload>
    <a-modal
      v-Modell = "imageCut.isShowModal"
      Titel="Bildaufnahme"
      Breite="400px"
      @ok="fertig"
      @cancel="Bild ausschneiden.schließen"
    >
      <div Klasse="cropper-content" v-if="imageCut.isShowModal">
        <div Klasse="cropper" Stil="text-align:center">
          <vueCropper
            ref="Beschneider"
            :img="imageCut.imgFile"
            :outputSize="Ausgabegröße"
            :outputType="Ausgabetyp"
            :info="Informationen"
            :voll="voll"
            :canMove="kannBewegen"
            :kannBoxVerschieben="kannBoxVerschieben"
            :original="Original"
            :autoCrop="automatisch zuschneiden"
            :fixiert="behoben"
            :festeNummer="festeNummer"
            :centerBox="Mittelbox"
            :infoTrue="infoTrue"
            :festeBox="festeBox"
          ></vueCropper>
        </div>
      </div>
    </a-modal>
  </div>
</Vorlage>

js

<Skript>
importiere { uploadImage } von '@/api/common'
importiere { VueCropper } von "vue-cropper";
Standard exportieren {
  Name: 'BildUpload',
  Komponenten: { VueCropper },
  Daten() {
    zurückkehren {
      wird geladen: falsch,
      Bildschnitt: {
        isShowModal: false,
        imgDatei: '',
        init: imgFile => {
          this.imageCut.imgFile = Bilddatei
          this.imageCut.isShowModal = true
        },
        schließen: () => {
          this.imageCut.imgFile = ''
          this.imageCut.isShowModal = false
        }
      }
    }
  },
  Requisiten: {
    imageUrl: Zeichenfolge,
    Breite: {
      Typ: Zeichenfolge,
      Standard: „100px“
    },
    Höhe:
      Typ: Zeichenfolge,
      Standard: „100px“
    },
    kann ausschneiden: {
      Typ: Boolean,
      Standard: false
    },
    Info:
      Typ: Boolean,
      Standard: false
    }, // Informationen zur Größe des Zuschneidefelds outputSize: {
      Typ: Nummer,
      Standard: 0,8
    }, // Die Qualität des zugeschnittenen Bildes outputType: {
      Typ: Zeichenfolge,
      Standard: „jpeg“
    }, // Zuschneiden zum Erzeugen des Bildformats canScale: {
      Typ: Boolean,
      Standard: true
    }, // Ob das Bild das Zoomen mit dem Scrollrad zulässt autoCrop: {
      Typ: Boolean,
      Standard: true
    }, // Ob standardmäßig ein Screenshot-Rahmen generiert werden soll // autoCropWidth: 300, // Die Standardbreite des Screenshot-Rahmens // autoCropHeight: 200, // Die Standardhöhe des Screenshot-Rahmens fixedBox: {
      Typ: Boolean,
      Standard: false
    }, // Behoben: Screenshot-Framegröße kann nicht geändert werden behoben: {
      Typ: Boolean,
      Standard: true
    }, // Ob das feste Verhältnis von Breite und Höhe des Screenshot-Rahmens aktiviert werden soll fixedNumber: {
      Typ: Array,
      Standard: () => [1, 1]
    }, // Das Seitenverhältnis des Screenshot-Frames full: {
      Typ: Boolean,
      Standard: true
    }, // Ob der Screenshot in der Originalproportion ausgegeben werden soll canMove: {
      Typ: Boolean,
      Standard: false
    },
    kannBox verschieben: {
      Typ: Boolean,
      Standard: true
    }, // Kann der Screenshot-Rahmen ins Original gezogen werden: {
      Typ: Boolean,
      Standard: false
    }, // Rendere das hochgeladene Bild entsprechend dem Originalverhältnis centerBox: {
      Typ: Boolean,
      Standard: true
    }, // Ist das Screenshot-Feld auf das Bild beschränkt? infoTrue: {
      Typ: Boolean,
      Standard: true
    } // true, um die tatsächliche Breite und Höhe des Ausgabebildes anzuzeigen. false, um die Breite und Höhe des Screenshot-Rahmens anzuzeigen. },
  Methoden: {
    vorUpload(Datei) {
      const isJpgOrPng = Dateityp === 'Bild/jpeg' || Dateityp === 'Bild/png'
      wenn (!istJpgOrPng) {
        this.$message.error('Bitte laden Sie eine JPG- oder PNG-Datei hoch!')
      }
      const isLt2M = Dateigröße / 1024 / 1024 < 2
      wenn (!isLt2M) {
        this.$message.error('Bitte laden Sie eine Datei unter 2 MB hoch!')
      }
      Rückgabewert ist JpgOrPng und isLt2M
    },
    benutzerdefinierteAnfrage(Datei) {
      wenn (dies.kannSchnitt) {
        this.readFile(Datei.Datei)
      } anders {
        dies.laden = wahr
        const formData = new FormData()
        formData.append('fileIdcard', datei.datei)
        Bild hochladen(formData).then(res => {
          dies.laden = falsch
          dies.$emit('uploadSuccess', res.ossUrl)
        })
      }
    },
    leseDatei(Datei) {
      var reader = neuer FileReader()
      reader.readAsDataURL(Datei)
      reader.onload = () => {
        dies.imageCut.init(reader.result)
      }
    },
    beenden() {
      dies.$refs.cropper.getCropBlob(data => {
        dies.laden = wahr
        // Auf Alibaba Cloud-Server hochladen const formData = new FormData()
        formData.append('fileIdcard', Daten)
        Bild hochladen(formData).then(res => {
          dies.imageCut.close()
          dies.laden = falsch
          dies.$emit('uploadSuccess', res.ossUrl)
        })
      })
    }
  }
}
</Skript>

CSS

<style lang="less">
.avatar-uploader > .ant-upload {
  Breite: 100 %;
  Höhe: 100%;
}
.ant-upload-select-picture-card ich {
  Schriftgröße: 32px;
  Farbe: #999;
}

.ant-upload-Bildkarte auswählen .ant-upload-text {
  Rand oben: 8px;
  Farbe: #666;
}
.cropper-Inhalt {
  .cropper {
    Breite: automatisch;
    Höhe: 400px;
  }
}
</Stil>

Komponentenverwendung und Anweisungen

<Bild-Upload
        :imageUrl="form.diagramUrl"
        @uploadSuccess="UploadErfolgreich"
        Breite="160px"
        Höhe="90px"
        :kann-bearbeiten="kannSchneiden"
        :feste Zahl="[16,9]"
      />

Beim Aufrufen der Komponente müssen Sie das Attribut canEdit übergeben, um anzugeben, ob die Komponente die Zuschneidefunktion startet, nachdem das Bild ausgewählt wurde. Der Standardwert ist, das Zuschneiden zu deaktivieren. Wenn das Zuschneiden erforderlich ist, können Sie das Attribut fixedNumber übergeben, um das Seitenverhältnis des Zuschneidefelds zu definieren.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Vue implementiert Throttle oder Debounce als Komponente oder Plug-In
  • Vue verwendet das zTree-Plugin, um ein Beispiel für die Operation einer Baumkomponente zu kapseln
  • Beispiel einer benutzerdefinierten Paging-Plugin-Komponente in Vue
  • Implementierung der responsiven, adaptiven Karussell-Komponenten-Plug-In-Funktion VueSliderShow basierend auf Vue2x
  • Verwendung benutzerdefinierter globaler Vue-Komponenten (benutzerdefinierte Plug-Ins)
  • Das Bootstrap-Select-Plugin ist als Vue2.0-Komponente gekapselt
  • Zusammenfassung der Unterschiede und Verwendung von Plugins und Komponenten in Vue

<<:  Lösung für das Problem, dass Docker-Container nicht gestoppt oder beendet werden können

>>:  Einige etwas komplexere Verwendungsbeispielcodes in MySQL

Artikel empfehlen

Detaillierte Erklärung, wie eine SQL-Anweisung in MySQL ausgeführt wird

Überblick Ich habe vor Kurzem begonnen, mir Wisse...

Prinzip und Anwendungsbeispiele des URL-Umschreibmechanismus von Nginx

Durch das Umschreiben der URL lässt sich die bevo...

Zehn beliebte Regeln für das Interface-Design

<br />Dies ist ein Artikel, den ich vor lang...

Warum kann mein Tomcat nicht starten?

Inhaltsverzeichnis Phänomen: Portnutzung: Rechtsc...

So erstellen Sie einen Redis-Cluster mit Docker

Inhaltsverzeichnis 1. Erstellen Sie ein Redis-Doc...

js realisiert das Verpacken mehrerer Bilder in Zip

Inhaltsverzeichnis 1. Dateien importieren 2. HTML...

Uniapps Erfahrung in der Entwicklung kleiner Programme

1. Erstellen Sie ein neues UI-Projekt Zunächst ei...

Eine kurze Diskussion zu this.$store.state.xx.xx in Vue

Inhaltsverzeichnis Sehen Sie sich dies an.$store....

So verwenden Sie LibreOffice zum Konvertieren von Dokumentformaten unter CentOS

Die Projektanforderungen erfordern eine gewisse V...

Implementierungscode für die nahtlose Verbindung des Div-Bildlaufbands

Code kopieren Der Code lautet wie folgt: <html...