vue-cropperプラグインをベースにした画像キャプチャとアップロードコンポーネントをカプセル化するための具体的なコードが参考として提供されています。具体的な内容は次のとおりです。 需要シナリオ:バックエンド開発では、写真をアップロードし、対応する比率で切り取る必要があります。このコンポーネント開発では、カプセル化のためにvue-cropperプラグインを備えたAnt Design Vueコンポーネントライブラリを使用します。 実装は以下のとおりです html <テンプレート> <div> <アップロード 名前="アバター" リストタイプ="絵カード" クラス="アバターアップローダー" :アップロードリストを表示="false" :custom-request="カスタムリクエスト" :before-upload="アップロード前" :style="`幅: ${width}; 高さ: ${height};`" > <画像 v-if="imageUrl && !loading" :src="画像URL" alt="アバター" :style="`幅: ${width}; 高さ: ${height};`" /> <div v-else> <a-icon :type="読み込み中? '読み込み中' : 'プラス'" /> <div class="ant-upload-text">写真をアップロード</div> </div> </a-アップロード> <a-モーダル v-model="imageCut.isShowModal" title="画像キャプチャ" 幅="400px" @ok="終了" @cancel="imageCut.close" > <div class="cropper-content" v-if="imageCut.isShowModal"> <div class="cropper" style="text-align:center"> <vueクロッパー ref="クロッパー" :img="imageCut.imgファイル" :outputSize="出力サイズ" :outputType="出力タイプ" :info="情報" :full="フル" :canMove="移動可能" :canMoveBox="canMoveBox" :original="オリジナル" :autoCrop="自動クロップ" :fixed="固定" :fixedNumber="固定数" :centerBox="センターボックス" :infoTrue="情報True" :fixedBox="固定ボックス" </vueクロッパー> </div> </div> </a-modal> </div> </テンプレート> js <スクリプト> '@/api/common' から { uploadImage } をインポートします。 「vue-cropper」から VueCropper をインポートします。 エクスポートデフォルト{ 名前: 'ImageUpload', コンポーネント: { VueCropper }, データ() { 戻る { 読み込み中: false、 画像カット: { isShowModal: false、 画像ファイル: '', 初期化: imgFile => { this.imageCut.imgFile = 画像ファイル this.imageCut.isShowModal = true }, 閉じる: () => { this.imageCut.imgFile = '' this.imageCut.isShowModal = false } } } }, 小道具: { imageUrl: 文字列、 幅: { タイプ: 文字列、 デフォルト: '100px' }, 身長: タイプ: 文字列、 デフォルト: '100px' }, カット可能: { タイプ: ブール値、 デフォルト: false }, 情報: タイプ: ブール値、 デフォルト: false }, // クロップボックスのサイズ情報 outputSize: { タイプ: 数値、 デフォルト: 0.8 }, // 切り抜かれた画像の品質 outputType: { タイプ: 文字列、 デフォルト: 'jpeg' }, // 画像形式を生成するために切り取る canScale: { タイプ: ブール値、 デフォルト: true }, // 画像がスクロールホイールによるズームを許可するかどうか autoCrop: { タイプ: ブール値、 デフォルト: true }, // デフォルトでスクリーンショットフレームを生成するかどうか // autoCropWidth: 300, // スクリーンショットフレームのデフォルトの幅 // autoCropHeight: 200, // スクリーンショットフレームのデフォルトの高さ fixedBox: { タイプ: ブール値、 デフォルト: false }, // スクリーンショットのフレームサイズを変更できない問題を修正しました。 タイプ: ブール値、 デフォルト: true }, // スクリーンショットフレームの幅と高さの固定比率を有効にするかどうか fixedNumber: { タイプ: 配列、 デフォルト: () => [1, 1] }, // スクリーンショットフレーム全体のアスペクト比: { タイプ: ブール値、 デフォルト: true }, // スクリーンショットを元の比率で出力するかどうか canMove: { タイプ: ブール値、 デフォルト: false }, 移動できるボックス: { タイプ: ブール値、 デフォルト: true }, // スクリーンショットのフレームをドラッグできますか? オリジナル: { タイプ: ブール値、 デフォルト: false }, // アップロードされた画像を元の比率に従ってレンダリングします centerBox: { タイプ: ブール値、 デフォルト: true }, // スクリーンショットボックスは画像に限定されますか? infoTrue: { タイプ: ブール値、 デフォルト: true } // 実際の出力画像の幅と高さを表示するには true、スクリーンショットのフレームの幅と高さを表示するには false }, メソッド: { beforeUpload(ファイル) { const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png' もし (!isJpgOrPng) { this.$message.error('JPG または PNG ファイルをアップロードしてください!') } 定数isLt2M = ファイルサイズ / 1024 / 1024 < 2 もし (!isLt2M) { this.$message.error('2MB未満のファイルをアップロードしてください!') } isJpgOrPng && isLt2M を返す }, カスタムリクエスト(ファイル) { (これがカットできる場合){ this.readFile(ファイル.ファイル) } それ以外 { this.loading = true const フォームデータ = 新しいフォームデータ() formData.append('fileIdcard', ファイル.ファイル) 画像をアップロードします(formData).then(res => { this.loading = false this.$emit('uploadSuccess', res.ossUrl) }) } }, readFile(ファイル) { var リーダー = 新しい FileReader() reader.readAsDataURL(ファイル) リーダー.onload = () => { this.imageCut.init(リーダー.結果) } }, 仕上げる() { this.$refs.cropper.getCropBlob(データ => { this.loading = true // Alibaba Cloud サーバーにアップロード const formData = new FormData() formData.append('fileIdcard', データ) 画像をアップロードします(formData).then(res => { this.imageCut.close() this.loading = false this.$emit('uploadSuccess', res.ossUrl) }) }) } } } </スクリプト> CS <スタイル lang="less"> .avatar-uploader > .ant-upload { 幅: 100%; 高さ: 100%; } .ant-upload-select-picture-card i { フォントサイズ: 32px; 色: #999; } .ant-upload-select-picture-card .ant-upload-text { 上マージン: 8px; 色: #666; } .クロッパーコンテンツ{ .クロッパー{ 幅: 自動; 高さ: 400px; } } </スタイル> コンポーネントの使用方法と手順 <画像アップロード :imageUrl="form.diagramUrl" @uploadSuccess="アップロード成功" 幅="160px" 高さ="90px" :can-edit="canCut" :固定数="[16,9]" /> コンポーネントを呼び出すときは、canEdit 属性を渡して、画像の選択後にコンポーネントがクロッピング機能を開始するかどうかを指定する必要があります。デフォルト値はクロッピングを無効にします。クロッピングが必要な場合は、fixedNumber 属性を渡してクロッピング ボックスのアスペクト比を定義できます。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Dockerコンテナを停止または強制終了できない問題の解決策
Dockerfile の設定に問題はありませんが、ENTRYPOINT コマンドを実行するとエラー...
Apache.POI の HSSFWorkbook を使用して Excel にエクスポートします。具...
HTML における相対と絶対の違い: 正直に言うと、HTML は世界で最もシンプルな言語です。タグ言...
目次スケルトンスクリーンとはアプレットでスケルトン画面を生成する方法導入方法表示と非表示ユーザーエク...
序文この記事では、CSS3アニメーションを使用して、円が小さいものから大きく拡大し、外側に広がる効果...
目次1. ショッピングカートの例2. コードの実装3. まとめ1. ショッピングカートの例一連の学習...
目次外部キーテーブルの関係を決定する方法テーブル関係を作成する方法1対多の関係 - 従業員テーブルと...
環境: (docker、k8s クラスター)、前回 docker で起動した Java プログラムの...
まず依存関係をダウンロードします: cnpm i -S vue-uuid ali-oss画像フィール...
システム管理者は複数のサーバーを同時に管理する場合があり、これらのサーバーは異なる場所に配置されてい...
目次refとは何かrefの使い方DOM要素に配置するクラスコンポーネントに配置する関数コンポーネント...
HTMLテキスト書式タグ 標簽 描述 <b> 定義粗體文本 <em> 呈現...
ウェブフロントエンドのウェブサイトの気質は感情であり、言葉なしでユーザーを魅了できる感情です。では、...
nginx 設定ファイルのパスを表示する nginx -t 経由nginx -t コマンドの本来の機...
1. デフォルトでアクセスするには、curl コマンドを使用します。 # curl -I http:...