最近、プロジェクトで写真をアップロードする要件があるのですが、顧客がアップロードする写真のサイズがまちまちなので、顧客の写真の比率を規定する必要があり、顧客が求めているものにする必要があるため、スクリーンショットを撮ることを思いつきました。 成果を達成する 私たちのアーキテクチャは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 メソッド
序文:パーティショニングはテーブル設計パターンです。一般的に、テーブル パーティショニングとは、条件...
この記事では、 Webデザインに関連するこれら4 つの原則について説明します。これら4 つの原則を念...
目次ドラッグアンドドロップの実装ドラッグイベントドラッグして開始リリースゾーンでの移動境界処理、角度...
かなり前に実装された機能ですが、クリックすると選択したメニュー項目の背景色が白くなることに気付きまし...
コードをコピーコードは次のとおりです。 <form action="/hehe&qu...
序文WeChat ミニプログラムは新しいオープン機能を提供します!ついにミニプログラムにHTMLペー...
序文:この記事では主にMySQLのロングトランザクションに関する内容を紹介します。例えば、トランザク...
序文まずここで説明させてください。インターネット上では、Alibaba では 500 万のデータを異...
目次1. DateTimePickerの日付選択範囲は現在時刻とそれ以前です2. DateTimeP...
ウェブサイトにとって、これは最も基本的な機能です。それでは、登録プロセスに含まれる手順を見てみましょ...
<tbody> タグは、テーブル本体のスタイルを定義するために使用されます。基本構文 &...
この記事では、例を使用して、MySQL 外部キーの 3 つの関係について説明します。ご参考までに、詳...
Traceroute を使用すると、情報がコンピュータからインターネットの反対側のホストまでたどるパ...
1. Windows システムでは、JDK のインストールなど、多くのソフトウェアのインストールで...
SVG (Scalable Vector Graphics)は、XML 構文に基づいた画像形式です。...