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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: MySQL の null と not null、null と空の値の違いの詳細な説明 ''''
必要ページング バーを追加します。これにより、ページにジャンプしたり、ページ番号に従って特定のページ...
ドクター紹介: Docker はコンテナ関連の技術です。簡単に言うと、さまざまなソフトウェアを実行で...
サーバーマッチングロジックNginx は、リクエストを実行するサーバー ブロックを決定するときに、サ...
目次JavaScript で配列を作成する配列の使用配列を分割文字列に変換する配列に要素を追加する配...
MySQL ROLE はどのような問題を解決しますか?プロフェッショナルな資質を持ち、権限管理に細心...
Windows Server 2008R2を忘れた場合の対処方法サーバーの数が多すぎる、サーバーが多...
序文Ahhang が Springboot プロジェクトを開発していたとき、フロントエンドから検証コ...
背景:サイトはフロントエンドとバックエンドから分離されています: vue+springbootフロン...
目次序文RMの後には希望はあるのでしょうか?最前線を使ってファイルを取得するextundeleteを...
一般的に、MySQL はデフォルトでさまざまなストレージ エンジンを提供しており、次のように表示され...
1. はじめにイメージマップを使用すると、画像の領域をホットスポットとして指定できます。この領域にマ...
目次序文1. 文字列の長さを取得する2. 文字列の指定された位置の値を取得する(1) charAt(...
この記事の例では、参考のために画像をサーバーにアップロードするためのjsの具体的なコードを共有してい...
目次1. はじめに2. vue-cli の紹介2.1 コマンドライン2.2 CLI サービス2.3 ...
この記事の例では、参考までに簡単な虫眼鏡効果を実現するためのjsの具体的なコードを共有しています。具...