Vue は PC カメラを呼び出してリアルタイムで写真を撮る機能を実装します

Vue は PC カメラを呼び出してリアルタイムで写真を撮る機能を実装します

VueはPCカメラを呼び出してリアルタイムで写真を撮影します。参考までに、具体的な内容は次のとおりです。

クリックボタンを使用してモーダルボックスを開き、写真を撮るので、次のようにボタンとモーダルボックスのコードをここに貼り付けます。

<!-- モーダル ボックスを開くボタン -->
        <el-form-item label="*写真:" prop="headImage">
          <el-input type="text" v-model="imgSrc" />
            <el-col :span="1.5">
              <el-ボタン
                @click="onTake"
                アイコン="el-icon-camera"
                サイズ="小">
                写真を撮ってアップロードする</el-button>
            </el-col>
        </el-form-item>
        <!--写真を撮った後に写真を表示する-->
        <el-form-item label="" prop="imgSrc">
          <img v-if="imgSrc" :src="imgSrc" スタイル="幅: 200px;高さ: 240px;" />
</el-form-item> 

<!--モーダルボックスの撮影-->
    <el-ダイアログ
      title="写真アップロード"
      :visible.sync="表示"
      @close="キャンセル時"
      幅="1065px">
      <div class="box">
        <ビデオ id="videoCamera" クラス="canvas" :width="videoWidth" :height="videoHeight" 自動再生></ビデオ>
        <canvas id="canvasCamera" class="canvas" :width="ビデオ幅" :height="ビデオ高さ"></canvas>
      </div>
      <div スロット="フッター">
        <el-ボタン
          @click="画像を描画"
          アイコン="el-icon-camera"
          サイズ="小">
          写真を撮る</el-button>
        <el-ボタン
          v-if="os"
          @click="能力を取得"
          icon="el-icon-ビデオカメラ"
          サイズ="小">
          カメラを開く</el-button>
        <el-ボタン
          v-else
          @click="stopNavigator"
          icon="el-icon-switch-button"
          サイズ="小">
          カメラを閉じる</el-button>
        <el-ボタン
          @click="キャンバスをリセット"
          アイコン="el-icon-refresh"
          サイズ="小">
          リセット</el-button>
        <el-ボタン
          @click="onCancel"
          アイコン="el-icon-circle-close"
          サイズ="小">
          完了</el-button>
   </div>
</el-ダイアログ>

次に、js コードを見てみましょう。ユニット プロジェクトの問題に関係するため、不要な部分は削除しました。本当に申し訳ありません。

<スクリプト>
エクスポートデフォルト{
  名前: "XXX",
  データ() {
    戻る {
      visible: false, //ポップアップの読み込み: false, //アップロードボタンの読み込み os: false, //カメラスイッチの制御 thisVideo: null,
      thisContext: null、
      thisCancas: null、
      ビデオ幅: 500,
      ビデオ高さ: 400,
      postオプション:[],
      証明書コントロール:''、
      // マスクレイヤーの読み込み: true、
      // 配列IDを選択: [],
      // 非シングルを無効にする single: true,
      // 複数ではない複数を無効にする: true、
      //エントリの総数: 0,
      // プロジェクト人員テーブルデータ akworkerList: [],
      //ワーカータイプデータディクショナリworkerTypeOptions:[],
      // ポップアップ レイヤーのタイトル: "",
      // ポップアップレイヤーを表示するかどうか open: false,
      // クエリパラメータ queryParams: {
        ページ番号: 1,
        ページサイズ: 10,
        画像ソース:未定義、
      },
      // フォームパラメータ form: {},
      // フォーム検証ルール: {
      }
    };
  },
  作成された() {
   
  },
  メソッド: {
    /*カメラを呼び出して写真を撮り始めます*/
    オンテイク() {
      this.visible = true;
      このメソッドは、Competence を取得します。
    },
    キャンセル() {
      this.visible = false;
     /* this.resetCanvas();*/
      this.stopNavigator();
    },
    //カメラの権限を呼び出す getCompetence() {
      //DOMノードはモデル内でレンダリングした後にのみ取得できます。モデル内でDOMノードを直接取得することはできません。this.$nextTick(() => {
        _this は定数です。
        this.os = false; //カメラを閉じるように切り替えます this.thisCancas = document.getElementById('canvasCamera');
        this.thisContext = this.thisCancas.getContext('2d');
        this.thisVideo = document.getElementById('videoCamera');
        // 古いブラウザは mediaDevices をまったくサポートしていない可能性があるため、最初に空のオブジェクトを設定します if (navigator.mediaDevices === undefined) {
          ナビゲーター.menavigatordiaDevices = {}
        }
        // 一部のブラウザは部分的な mediaDevices を実装しており、既存のプロパティを上書きしてしまうため、getUserMedia を使用してオブジェクトを割り当てることはできません。
        // ここで、getUserMedia プロパティが欠落している場合は追加します。
        navigator.mediaDevices.getUserMedia が未定義の場合 {
          navigator.mediaDevices.getUserMedia = 関数 (制約) {
            // まず既存の getUserMedia を取得します (存在する場合)
            getUserMedia を navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.getUserMedia とします。
            // 一部のブラウザではサポートされていないため、エラーメッセージが返されます // インターフェイスの一貫性を保つ if (!getUserMedia) {
              return Promise.reject(new Error('getUserMedia はこのブラウザでは実装されていません'))
            }
            // それ以外の場合は、古い navigator.getUserMedia の呼び出しを Promise でラップします。
            新しいPromise(function(resolve,reject))を返す{
              getUserMedia.call(ナビゲーター、制約、解決、拒否)
            })
          }
        }
        const制約 = {
          オーディオ: 偽、
          ビデオ: {幅: _this.videoWidth、高さ: _this.videoHeight、変換: 'scaleX(-1)'}
        };
        navigator.mediaDevices.getUserMedia(制約).then(関数(ストリーム) {
          // 古いブラウザにはsrcObjectがない可能性があります
          _this.thisVideo に 'srcObject' がある場合、
            _this.thisVideo.srcObject = ストリーム
          } それ以外 {
            // 新しいブラウザでは非推奨となっているため、使用しないでください。
            _this.thisVideo.src = window.URL.createObjectURL(ストリーム)
          }
          _this.thisVideo.onloadedmetadata = 関数 (e) {
            _this.thisVideo.play()
          }
        }).catch(エラー => {
          これを通知します。{
            タイトル: 「警告」
            メッセージ: 「カメラの権限が有効になっていないか、ブラウザのバージョンに互換性がありません。」
            タイプ: '警告'
          });
        });
      });
    },
    //画像を描画するdrawImage() {
      // クリック、キャンバス描画 this.thisContext.drawImage(this.thisVideo, 0, 0, this.videoWidth, this.videoHeight);
      // 画像の base64 リンクを取得します。 this.imgSrc = this.thisCancas.toDataURL('image/png');
      /*const imgSrc=this.imgSrc;*/
    },
    // キャンバスをクリアする clearCanvas(id) {
      c = document.getElementById(id); とします。
      cxt = c.getContext("2d"); とします。
      cxt.clearRect(0, 0, c.width, c.height);
    },
    //キャンバスをリセットする resetCanvas() {
      this.imgSrc = "";
      'canvasCamera' をクリアします。
    },
    //カメラを閉じる stopNavigator() {
      this.thisVideo が null の場合、
        this.thisVideo.srcObject.getTracks()[0].stop();
        this.os = true; //カメラを開くためのスイッチ}
    },
  /*カメラを呼び出して写真を撮る*/
  }
};
</スクリプト>

こちらにこの記事が共有されています。何か間違っている点がありましたら、さらにアドバイスをいただければ幸いです。類似点がある場合は、修正または削除するために私に連絡してください。ありがとうございます

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

以下もご興味があるかもしれません:
  • VueはPCカメラを呼び出して写真機能を実現します
  • Vueはコンピュータカメラを呼び出して写真機能を実現します
  • Vueはローカルカメラを呼び出して写真機能を実現します
  • Vue2.0はカメラを呼び出して写真を撮る機能を実装し、exif.jsは写真アップロード機能を実装します。
  • Vueはカメラを呼び出して写真を撮り、ローカルに保存します

<<:  Docker 自動ビルド 自動ビルド実装プロセス図

>>:  MySQL の null と not null、null と空の値の違いの詳細な説明 ''''

推薦する

MySQL データベースでよく使用される SQL ステートメントの詳細と概要

この記事では、MySQL データベースでよく使用される SQL ステートメントを例を使用して説明しま...

JS でオブジェクトが空オブジェクトかどうかを判断する 5 つの方法

1. jsonオブジェクトをjson文字列に変換し、文字列が「{}」であるかどうかを判断します。 v...

MySQL 8.0.18コマンドの詳細な説明

解凍したフォルダ C:\web\mysql-8.0.11 を開き、フォルダ内に my.ini 構成フ...

vue-element-admin プロジェクトのインポートとエクスポートの実装

vue-element-admin インポートコンポーネントのカプセル化テンプレートとスタイルまず、...

Web インタビュー Vue カスタム コンポーネントと呼び出しメソッド

輸入:プロジェクトの要件により、同じコードの一部をコンポーネントにカプセル化し、必要な場所にインポー...

Linux に MySQL 8.0.x をインストールするための完全な手順

マイグレーションMySQL 入門MySQL はもともとオープンソースのリレーショナル データベース管...

HTML5+CSS3 ヘッダー作成例と更新

前回、私たちは 2 つのヘッダー レイアウト (フレックスボックス 1 つとフロート 1 つ) を考...

MYSQL ローカルインストールと問題解決

序文この記事はかなり詳細で、少し面倒です。他のチュートリアル ドキュメントでは多くの手順が省略されて...

MySQL の簡単な分析 - MVCC

バージョンチェーンInnoDB エンジン テーブルでは、クラスター化インデックス レコードに 2 つ...

HTML割引価格計算の実装原理とスクリプトコード

コードをコピーコードは次のとおりです。 <!DOCTYPE HTML PUBLIC "...

CSS を使用して、画像に 3D の凸型と凹型のエフェクト (フレーム外に凸型、またはフレーム内に凹型) を実現します。

Ⅰ. 問題の説明: CSS を使用して画像の 3D 凸凹効果を実現します。 Ⅱ実施手順は以下のとお...

画像を表示したり非表示にしたりするための JavaScript

JavaScriptは画像を表示したり非表示にしたりしますが、参考までに具体的な内容は次のとおりで...

Docker で hyperf を開発する完全な使用例の詳細な説明

ハイパーフ公式サイトHyperf 公式ドキュメントのインストール1. Dockerの使用docker...

MySQLクエリが遅い原因と解決策

クエリ速度が遅くなる理由は多数ありますが、最も一般的な理由は次のとおりです。 1. インデックスがな...

Bツリーの削除プロセスの紹介

前回の記事 https://www.jb51.net/article/154157.htm では、B...