最近、プロジェクトで写真をアップロードする要件があるのですが、顧客がアップロードする写真のサイズがまちまちなので、顧客の写真の比率を規定する必要があり、顧客が求めているものにする必要があるため、スクリーンショットを撮ることを思いつきました。 成果を達成する 私たちのアーキテクチャは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 メソッド
1. はじめにGit は、規模の大小を問わずあらゆるプロジェクトを俊敏かつ効率的に処理するために使用...
プログラマーが日常的に TypeScript/JavaScript 開発を行う場合、複雑な Java...
1. インストール前の準備: 1.1 JDKをインストールするopenjdkをアンインストールする...
共通点: DIV タグと SPAN タグは、コンテンツ全体を非表示にしたり、コンテンツ全体を移動した...
この記事では、MySQL の単一テーブル クエリ操作について説明します。ご参考までに、詳細は以下の通...
目次1. 問題の説明2. 問題分析3. 問題解決1. Dockerのディスク使用量を確認する2. 再...
参考までに、ネイティブjsでカルーセル効果(シームレススクロール)を実現しています。具体的な内容は以...
vue-routerには2つのモードがありますハッシュモード履歴モード1. シングルページアプリケー...
1. 依存パッケージをインストールする [root@localhost ~]# yum insta...
<!doctypehtml> <html xmlns="http://...
質問: int(1) と tinyint(1) の違いは何ですか?このような設計では、いずれにしても...
目次アプレットのソースコードはどこにありますか? PC ミニプログラムはどのように暗号化されますか?...
データ型が datetime であるフィールド add_time を持つテーブル product が...
リモートアクセスを有効にする次のコマンドを実行して、root ユーザーのリモート アクセス権を有効に...
初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...