Vueのウェブページスクリーンショット機能の詳しい説明

Vueのウェブページスクリーンショット機能の詳しい説明

最近、プロジェクトで写真をアップロードする要件があるのですが、顧客がアップロードする写真のサイズがまちまちなので、顧客の写真の比率を規定する必要があり、顧客が求めているものにする必要があるため、スクリーンショットを撮ることを思いつきました。

成果を達成する

私たちのアーキテクチャはvueなので、vueスクリーンショットプラグインを使用します

プラグインをインストールします: npm install vue-cropper --save-dev

コンポーネントのインポート

 'vue' から Vue をインポートします。
 「vue-cropper」から VueCropper をインポートします。

 Vue.use(VueCropper)

コアコード

 <div>
            <span class="spanStyle">製品画像:</span>
            <!--画像プレビュー div 全体-->
            <div style="display:flex;padding-left: 300px;">
              <div class="info-item" style="flex:1;margin-left:-160px;margin-top: -25px">
                <label class="btn btn-orange theme-bg-gray theme-white w90" for="uploads" style="display:inline-block;width: 70px;padding: 0;text-align: center;line-height: 28px;" >画像を選択</label>
                <input type="file" id="uploads" :value="imgFile" style="position:absolute; clip:rect(0 0 0 0);" accept="image/png, image/jpeg, image/gif, image/jpg" @change="uploadImg($event, 1)">
                <div class="line" style="margin-left: -280px;margin-top: 85px;">
                  <div class="cropper-content" style="margin-top:-60px;margin-left:160px;">
                    <div class="cropper">
                      <vueクロッパー
                        ref="クロッパー"
                        :img="オプション.img"
                        :outputSize="オプションのサイズ"
                        :outputType="オプション.outputType"
                        :info="true"
                        :full="オプション.full"
                        :canMove="オプション.canMove"
                        :canMoveBox="オプション.canMoveBox"
                        :original="オプション.original"
                        :autoCrop="オプション.autoCrop"
                        :autoCropWidth="option.autoCropWidth"
                        :autoCropHeight="option.autoCropHeight"
                        :fixedBox="オプション.fixedBox"
                        @realTime="実時間"
                      </vueクロッパー>
                    </div>
                    <!-- キャプチャした画像は div 内に表示されます -->
                    <div style="margin-left:700px;">
                      <div class="show-preview" :style="{'width': '300px', 'height':'150px', 'overflow': 'hidden', 'margin-left': '-650px'}">
                        <div :style="previews.div" >
                          <img :src="previews.url" :style="previews.img">
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>

プレビュー方法

データ (){
	戻る {
		 ヘッドイメージ:''、
                //画像を切り取ってアップロードする: false,
                プレビュー: {},
                オプション: {
                    画像: ''、
                    outputSize:1, //カット後の画質(0.1-1)
                    full: false, // 元の画像スケールのスクリーンショットを出力 props name full
                    出力タイプ: 'png',
                    移動可能: true、
                    オリジナル: 偽、
                    canMoveBox: true、
                    自動トリミング: true、
                    自動クロップ幅: 300,
                    自動クロップ高さ: 150,
                    固定ボックス: true
                },
                fileName:'', //ローカルファイルアドレス downImg: '#',
                画像ファイル:'',
                uploadImgRelaPath:'', //アップロードされた画像のアドレス(サーバードメイン名なし)
	}
},
方法:{
	// リアルタイムプレビュー関数 realTime(data) {
       コンソールログ('リアルタイム')
       this.previews = データ
   },
   //ローカル画像を選択 uploadImg(e, num) {
       コンソールにログを出力します。
       var _this = これ;
       // 画像をアップロード var file = e.target.files[0]
       _this.fileName = ファイル名;
       if (!/\.(gif|jpg|jpeg|png|bmp|GIF|JPG|PNG)$/.test(e.target.value)) {
           alert('画像タイプは .gif、jpeg、jpg、png、bmp のいずれかである必要があります')
           偽を返す
       }
       var リーダー = 新しい FileReader();
       リーダー.onload = (e) => {
           データを入力します。
           if (typeof e.target.result === 'object') {
               // 配列バッファを BLOB に変換します。base64 の場合は必要ありません。data = window.URL.createObjectURL(new Blob([e.target.result]))
           }
           それ以外 {
               データ = e.target.result
           }
           数値 === 1 の場合
               _this.option.img = データ
           } そうでなければ (num === 2) {
               _this.example2.img = データ
           }
       }
       // // blob に変換
       reader.readAsArrayBuffer(ファイル);
   }
}
 

次に、キャプチャ後の画像を取得する必要があり、その画像を取得するために Cropper のコールバック関数を使用します。ここでは、BLOB 形式に変換した画像を取得します (変換しないと表示できません)
これは、バックエンドがデータをファイル タイプとして受信するため、BLOB をファイルに変換し、formData を使用してファイルをアップロードする必要があるためです。

製品追加(){
this.$refs.cropper.getCropBlob((データ) => {
	  //このデータは、私たちが傍受した BLOB 画像です。let formData = new FormData();
	  //ファイル名を取得します。ファイル変換ではこれを使用できないため、変数を使用して割り当てる必要があります。var name=this.fileName
       var file = new File([data], name, {type: data.type, lastModified: Date.now()});
       formData.append("ファイル",ファイル)
       新しい Promise((resolve, 拒否) => {
           productAdd(formData).then(レスポンス => {
               (レスポンスコード == 20000)の場合{
                   ダイアログ.アラート({
                       タイトル: 「ヒント」
                       メッセージ: '正常に保存されました! '
                   }).then(() => {
                       this.back('/productInfo')
                   });

               }
           }).catch(エラー => {
               拒否(エラー)
           })
       })
   })
}

写真を編集してエコーしたり、複数のカット写真をアップロードしたりするなど、実際に自分のプロジェクトに適用するときにはまだ修正が必要です。

上記は、Vue の Web ページ スクリーンショット機能の実装の詳細説明の詳細な内容です。Vue Web ページ スクリーンショットの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Vue を使用して Web ページのスクリーンショットを撮る方法をご存知ですか?

<<:  要素に丸い境界線を追加する border-radius メソッド

>>:  MySQL ifnull のネスト使用手順

推薦する

TinyEditorはシンプルで使いやすいHTML WYSIWYGエディタです

数日前、国産の XHTML エディタを紹介しました。今日は、有名な海外の Web デザイン ブログl...

CentOS ベースの OpenStack 環境の展開に関する詳細なチュートリアル (OpenStack のインストール)

エフェクト表示: 環境準備コントローラーノード: 6GB 4時間60GB/30GB/30GB計算ノー...

Linuxのアラーム機能の例の説明

Linuxアラーム機能の紹介上記のコード: #include <stdio.h> #in...

Zabbixについて管理者ログインパスワードを忘れた場合、パスワードをリセットする

Zabbix 管理者ログイン パスワードのリセットに関する問題は次のとおりです。 1. 問題の説明:...

Docker の NFS-Ganesha イメージを使用して NFS サーバーを構築する詳細なプロセス

目次1. NFS-Ganeshaの紹介2. NFS-Ganeshaの設定3. NFS-Ganesha...

JavaScript 配列の Reduce() メソッドの構文と例の分析

序文Reduce() メソッドは関数を累積器として受け取り、配列内の各値 (左から右へ) が単一の値...

Vueシングルページアプリケーションの事前レンダリング方法の例

目次序文vue-cli 2.0 バージョンvue-cli 3.0 バージョン要約する序文vue-cl...

LNMP と phpMyAdmin を Docker にデプロイする方法

環境準備:複数のコンテナに基づいてホストに lnmp をデプロイします。 nginx サービス: 1...

JavaScript のデシェイクとスロットリングの例

目次安定スロットル: 手ぶれ防止: 一定時間内に最後のタスクのみを実行します。スロットル: 一定期間...

MySQL データベース接続例外の概要 (収集する価値あり)

Centos にプロジェクトをデプロイするときに奇妙な問題が見つかりました。データベース接続で例外...

jsonファイルの書き方の詳細説明

目次JSONとはなぜこの技術なのでしょうか? JSONの使い方- データ形式- メモ- JSには2つ...

HTMLのposition属性の使い方(4種類)の詳しい説明

位置の 4 つのプロパティ値は次のとおりです。 1.相対的な2.絶対3.修正4.静的これら 4 つの...

Vue が天気予報機能を実装

この記事では、天気予報機能を実現するためのVueの具体的なコードを参考までに共有します。具体的な内容...

支払いカウントダウンを実現し、ホームページに戻るためのjs

ホーム ページに戻るための支払いカウントダウン ケースの概要: シンプルな js 構文、getEle...