Vueはプラグインを使用して画像を比例してカットします

Vueはプラグインを使用して画像を比例してカットします

この記事では、プラグインを使用して画像の比例カットを実現するVueの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

1. プラグインを使用する - vueCropper

プラグインをインストールします: npm install vue-cropper
el-elementアップロードコンポーネントと組み合わせる

2. 例:

メインページ

データ(){
 戻る {
     フォームデータ:{
        現在のバナー画像:""
     },
     isShowCropper :false、
 }
}
<el-アップロード
      クラス="アバターアップローダー"
      リストタイプ="絵カード"
      アクション=""
      accept=".jpg、.jpeg、.png"
      :資格情報あり="true"
      :on-change="ファイル変更バナー"
      :自動アップロード="false"
      :ファイルリストを表示="false"
    >
    <div class="imgBoX">
        <img class="bannerImg" v-if="formData.currentBannerImg" title="クリックして変更" :src="formData.currentBannerImg" alt="" />
        <i class="el-icon-delete delImg" v-if="formData.currentBannerImg" title="削除"></i>
        <i v-if="!formData.currentBannerImg" slot="default" class="el-icon-plus"></i>
      </div>
      <div slot="tip" class="el-upload__tip">アップロードできるのは jpg、jpeg、png のみで、1 つのファイルのサイズは 10 MB を超えることはできません</div>
</el-アップロード>

// 画像をアップロードし、成功したらトリミングします async fileChangeBanner(file, fileList) {
      定数 fileType = file.name.substring(file.name.lastIndexOf(".") + 1);
      const fileTypeArr = ["jpg", "jpeg", "png", "JPG", "JPEG", "PNG"];
      (fileTypeArr.indexOf(fileType) < 0) の場合 {
        this.$alert("jpg、jpeg、またはpng形式の画像をアップロードしてください!"、"システムプロンプト", {
          confirmButtonText: 「確認」
        });
        ファイルリストを連結します(ファイルリストの長さ - 1);
        戻る;
      }
      // サイズ制限 const isLt2M = file.size / 1024 / 1024 < this.$FileSize;
      もし (!isLt2M) {
        this.$alert(`アップロードされたファイルのサイズは ${this.$FileSize}MB を超えることはできません!`, "システムプロンプト", {
          confirmButtonText: 「確認」
        });
        ファイルリストを連結します(ファイルリストの長さ - 1);
        戻る;
      }
      // 切り抜き部分を追加します this.isShowCropper = true;
      this.$nextTick(() => {
        this.$refs.vueCropperDialog.open(ファイル);
      });
    },

vueCropperDialogがコンポーネントとして導入されました

<vueCropperDialog @cutImgEnter="cutImgEnter" v-if="isShowCropper" ref="vueCropperDialog"></vueCropperDialog>

vueクロッパーダイアログ.vue

<!-- -->
<テンプレート>
  <!-- vueCropper による画像の切り取りの実装 -->
  <el-dialog title="画像の切り抜き" :visible.sync="dialogVisible" append-to-body>
    <div class="cropper-content">
      <div class="cropper" style="text-align:center">
        <vueクロッパー
          ref="クロッパー"
          :img="オプション.img"
          :outputSize="オプションのサイズ"
          :outputType="オプション.outputType"
          :info="true"
          :full="オプション.full"
          :canMove="オプション.canMove"
          :canMoveBox="オプション.canMoveBox"
          :original="オプション.original"
          :autoCrop="オプション.autoCrop"
          :fixed="オプション.fixed"
          :fixedNumber="オプション.fixedNumber"
          :centerBox="オプション.centerBox"
          :infoTrue="オプション.infoTrue"
          :fixedBox="オプション.fixedBox"
        </vueクロッパー>
      </div>
    </div>
    <div スロット="フッター" クラス="ダイアログ フッター btnBox">
      <div>
        <el-button icon="el-icon-refresh-left" @click="turnLeftOrRight('left')">左に回転</el-button>
        <el-button icon="el-icon-refresh-right" @click="turnLeftOrRight('right')">右に回転</el-button>
      </div>
      <div>
        <el-button @click="dialogVisible = false">キャンセル</el-button>
        <el-button type="primary" @click="finish" :loading="loading">確認</el-button>
      </div>
    </div>
  </el-ダイアログ>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  データ() {
    戻る {
      ファイル情報:"",
      ダイアログ表示: false、
      // クロッピングコンポーネントの基本設定オプション
      オプション: {
        : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
      picsList: [], // ページに表示される配列 // 重複した送信を防ぐ loading: false
    };
  },
  メソッド: {
    開く(ファイル) {
      this.fileinfo = ファイル;
      this.option.img = ファイル.url;
      this.dialogVisible = true;
    },
    blobToFile(Blob、ファイル) {
      const files = new window.File([theBlob], file.name, { type: theBlob.type });
      ファイルを返します。
    },
    //左回転 turnLeftOrRight(type) {
      if (type == "左") {
        this.$refs.cropper.rotateLeft();
      } それ以外 {
        this.$refs.cropper.rotateRight();
      }
    },
    // クリックして切り取ります。このステップは処理されたアドレスを取得することです。finish() {
      this.$refs.cropper.getCropBlob((データ) => {
        this.loading = true;
        const changeFile = this.blobToFile(data, this.fileinfo);
        const fileUrl = window.URL.createObjectURL(データ);
        // 切り取りが成功した後のコールバック。$emit("cutImgEnter", changeFile, fielUrl);
        this.loading = false;
        this.dialogVisible = false;
      });
    }
  }
};
</スクリプト>
<style lang="scss" スコープ>
// スクリーンショット.cropper-content {
  .クロッパー{
    幅: 自動;
    高さ: 300px;
  }
}
.btnボックス{
  ディスプレイ: フレックス;
  アイテムの位置を中央揃えにします。
  コンテンツの両端揃え: スペースの間;
}
</スタイル>

3. 効果

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • vue-cropper コンポーネントは画像の切り取りとアップロードを実現します
  • Vue+elementは画像のアップロードと切り抜き機能を実現します
  • Vue はモバイル画像の切り取りとアップロード機能を実装しました
  • Vueプロジェクトで画像切り抜き機能を実装する詳細な説明
  • Vueベースのモバイル画像切り抜きコンポーネント機能
  • Vue ベースの画像切り抜きとアップロード機能の Cropper js 実装コード
  • Vueは写真を切り取ってアップロードすることを実現
  • Vue のキャンバスで画像をトリミングする例
  • Vue 画像の切り取りとアップロードコンポーネントの実装
  • Vue 画像切り抜きコンポーネントのサンプルコード

<<:  IDEA の Docker プラグインを介して Springboot プロジェクトを公開する方法の詳細なチュートリアル

>>:  MySQLデッドロックの原因と解決策

推薦する

docker-compose でデプロイしたときに MySQL にアクセスできなくなる問題の簡単な分析

Docker-ComposeとはCompose プロジェクトは、以前の fig プロジェクトから派生...

メンテナンスしやすい CSS コードを書くための 5 つのガイドライン

1. スタイルシートの先頭にコメント ブロックを追加して、スタイルシートの作成日、作成者、タグ、その...

ApplicationHost.config (IIS ストレージ構成領域ファイル) の概要

新しく作成された Web サイトの場合は、ASP.NET MVC5 を例に挙げます。セッションを処理...

Ant Design Pro ログイン機能にグラフィック検証コード コンポーネントを統合する方法

序文:この記事では、Ant Design Proログイン機能にグラフィック検証コードコンポーネントを...

Linux の crontab タスク スケジューリングの簡単な分析

1. スケジュールタスクを作成する命令crontab -eは現在のユーザーの編集インターフェースに入...

Nginx での SSL 証明書のインストールと展開手順の概要

目次問題の説明:インストール手順1. 準備2. サーバーにリモート接続する3. 証明書と秘密鍵ファイ...

Javascript で SessionStorage と LocalStorage を使用する方法

目次序文SessionStorage と LocalStorage の紹介SessionStorag...

MySQLがファントムリードを解決する方法の詳細な説明

1. ファントムリーディングとは何ですか?トランザクションにおいて、複数のクエリの後に結果セットの数...

Linux ファイル管理コマンド例の分析 [権限、作成、削除、コピー、移動、検索など]

この記事では、Linux ファイル管理コマンドについて例を挙げて説明します。ご参考までに、詳細は以下...

MySQLデータベースインデックスの詳細な説明

目次1. MySQLインデックスの紹介2. MySQLの5種類のインデックスの詳しい説明1. 総合索...

MySQL でデータベースを作成した後、ユーザー 'root'@'%' によるデータベース 'xxx' へのアクセスが拒否される問題を解決する

序文最近、仕事で問題が発生しました。データベースを作成した後、データベースに接続するときにエラーが発...

Web プロジェクト開発における 2 つのトークン理由とサンプル コードの分析

目次質問:プロジェクトには 2 つのトークンがあり、1 つは有効期間が 2 時間 (ショート トーク...

スケルトンスクリーン効果を実現する CSS

ネットワーク データを読み込むときは、ユーザー エクスペリエンスを向上させるために、通常は円形の読み...

Centos7.4 環境に lamp-php7.0 をインストールするチュートリアル

この記事では、Centos7.4 環境に lamp-php7.0 をインストールする方法について説明...

CSS 不透明度子要素が親要素の透明度を継承するためのソリューションの詳細な説明

プロジェクト ページの作成中に、子要素が親要素の透明度を継承するという問題に遭遇しました。多くのドキ...