最近、プロジェクトで写真をアップロードする要件があるのですが、顧客がアップロードする写真のサイズがまちまちなので、顧客の写真の比率を規定する必要があり、顧客が求めているものにする必要があるため、スクリーンショットを撮ることを思いつきました。 成果を達成する 私たちのアーキテクチャは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 形式に変換した画像を取得します (変換しないと表示できません) 製品追加(){ 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 の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: 要素に丸い境界線を追加する border-radius メソッド
数日前、国産の XHTML エディタを紹介しました。今日は、有名な海外の Web デザイン ブログl...
エフェクト表示: 環境準備コントローラーノード: 6GB 4時間60GB/30GB/30GB計算ノー...
Linuxアラーム機能の紹介上記のコード: #include <stdio.h> #in...
Zabbix 管理者ログイン パスワードのリセットに関する問題は次のとおりです。 1. 問題の説明:...
目次1. NFS-Ganeshaの紹介2. NFS-Ganeshaの設定3. NFS-Ganesha...
序文Reduce() メソッドは関数を累積器として受け取り、配列内の各値 (左から右へ) が単一の値...
目次序文vue-cli 2.0 バージョンvue-cli 3.0 バージョン要約する序文vue-cl...
環境準備:複数のコンテナに基づいてホストに lnmp をデプロイします。 nginx サービス: 1...
目次安定スロットル: 手ぶれ防止: 一定時間内に最後のタスクのみを実行します。スロットル: 一定期間...
Centos にプロジェクトをデプロイするときに奇妙な問題が見つかりました。データベース接続で例外...
目次JSONとはなぜこの技術なのでしょうか? JSONの使い方- データ形式- メモ- JSには2つ...
位置の 4 つのプロパティ値は次のとおりです。 1.相対的な2.絶対3.修正4.静的これら 4 つの...
1. Apacheをインストールする $ sudo apt update && su...
この記事では、天気予報機能を実現するためのVueの具体的なコードを参考までに共有します。具体的な内容...
ホーム ページに戻るための支払いカウントダウン ケースの概要: シンプルな js 構文、getEle...