激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - vue圖片裁剪插件vue-cropper使用方法詳解

vue圖片裁剪插件vue-cropper使用方法詳解

2021-12-14 16:05Dreamer_xr JavaScript

這篇文章主要為大家詳細介紹了vue圖片裁剪插件vue-cropper使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了vue圖片裁剪插件vue-cropper的使用方法,供大家參考,具體內容如下

我在網上找了很多關于vue裁剪圖片的文章,demo都太長了,實在是太長了。有些還都看不懂,最后還是用了個大佬的demo,但是項目實踐過程中還是有問題沒解決。先介紹吧。效果是下面這樣的,

vue圖片裁剪插件vue-cropper使用方法詳解

我這里采用了4:3的固定比例進行裁剪,裁剪后的效果

vue圖片裁剪插件vue-cropper使用方法詳解

但是裁剪后的圖片路徑是base64,超級長的路徑,最終還是需要處理地址傳給后端的,項目用oss處理圖片,最終獲得一個類似于aad68a8fd577464dbcdead2e9b20084d這個的后綴傳給后端,base64的路徑有幾萬幾十萬個字符,傳給后端會炸的吧。

后來我通過oss進行處理,把base64的路徑地址變成通過oss解析過的地址,但是!解析過的地址讓我下載,下載的文件不是圖片格式,記事本打開文件里面還是base64的路徑,復制粘貼,沒錯,是裁剪之后的圖片,這個問題暫時還沒有解決,解決之后進行再回來修改。先附上代碼吧。這里代碼是比較全的,圖片地址解析那一部分可以不用。

以上問題以解決,base64轉成blob格式就可以處理了,oss上傳需要使用new Blob格式(2019/6/22更新)

另外附上文檔

裁剪的vue文件:(已更新)

先下載npm install vue-cropper --save

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
<!-- 裁剪圖片 -->
<template>
 <div class="wrapper">
 <div class="model" v-show="model" @click="model = false">
  <div class="model-show">
  <img :src="modelSrc" alt="">
  </div>
 </div>
 <div class="content">
 
  <div class="show-info">
  <h2>自動生成截圖框 固定比例 w : h => 4 : 3</h2>
  <div class="test">
   <vueCropper ref="cropper2" :img="example2.img " :outputSize="example2.size" :outputType="example2.outputType"
   :info="example2.info" :canScale="example2.canScale" :autoCrop="example2.autoCrop"
   :autoCropWidth="example2.autoCropWidth" :autoCropHeight="example2.autoCropHeight" :fixed="example2.fixed"
   :fixedNumber="example2.fixedNumber" :enlarge="4"></vueCropper>
  </div>
  <label class="btn" for="upload2">上傳</label>
  <input type="file" id="upload2" style="position:absolute; clip:rect(0 0 0 0);"
   accept="image/png, image/jpeg, image/gif, image/jpg" @change="uploadImg($event,2)">
  <button @click="finish2()" class="btn">裁剪</button>
  </div>
 </div>
 
 </div>
</template>
 
<script>
 import { VueCropper } from 'vue-cropper'
 import * as OSS from 'ali-oss';
 export default {
 components: {
  VueCropper,
 },
 data() {
  return {
  model: false,
  modelSrc: '',
  crap: false,
  previews: {},
  form: {
   head: ''
  },
  example2: {
   //img的路徑自行修改
   img: '$oss.url + \'/\' + form.head ',
   info: true,
   size: 1,
   outputType: 'jpeg',
   canScale: true,
   autoCrop: true,
   // 只有自動截圖開啟 寬度高度才生效
   autoCropWidth: 300,
   autoCropHeight: 250,
   fixed: true,
   // 真實的輸出寬高
   infoTrue: true,
   fixedNumber: [4, 3]
  },
  downImg: '#'
  }
 },
 methods: {
  //點擊裁剪,這一步是可以拿到處理后的地址
  finish2() {
  this.$refs.cropper2.getCropData((data) => {
   this.modelSrc = data
   this.model = false;
   //裁剪后的圖片顯示
   this.example2.img = this.modelSrc;
   // this.toBlob(data)
   // console.log(data)
   // console.log(this.toBlob(data))
 
   //阿里云處理圖片,項目的接口,這里可以不用,上面的地址打印即為base64的地址
   this.$api.admin.url(data => {
   new OSS.Wrapper({
    region: "oss-cn-hangzhou",
    accessKeyId: data.accessKeyId,
    accessKeySecret: data.accessKeySecret,
    stsToken: data.securityToken,
    // bucket: 'mybg'c
    bucket: 'zhiyuan-hz'
   })
    .put(data.key, this.toBlob(this.example2.img))
    .then(data => {
    console.log(data.url)
    })
    .catch(function (err) {
    console.error("error: %j", err);
    });
   });
  })
 
  },
 
  uploadImg(e, num) {
  //上傳圖片
  this.example2.img = ''
  var file = e.target.files[0]
  if (!/\.(gif|jpg|jpeg|png|bmp|GIF|JPG|PNG)$/.test(e.target.value)) {
   alert('圖片類型必須是.gif,jpeg,jpg,png,bmp中的一種')
   return false
  }
  var reader = new FileReader()
  reader.onload = (e) => {
   let data
   data = e.target.result
   if (typeof e.target.result === 'object') {
   // 把Array Buffer轉化為blob 如果是base64不需要
   data = window.URL.createObjectURL(new Blob([e.target.result]))
   } else {
   data = e.target.result
   }
   if (num === 1) {
   this.option.img = data
   } else if (num === 2) {
   this.example2.img = data
   }
  }
  // 轉化為base64
  // reader.readAsDataURL(file)
  // 轉化為blobcs
  reader.readAsArrayBuffer(file)
  },
  // base64轉blob
  toBlob(ndata) {
  //ndata為base64格式地址
  console.log(ndata)
  let arr = ndata.split(','),
   mime = arr[0].match(/:(.*?);/)[1],
   bstr = atob(arr[1]),
   n = bstr.length,
   u8arr = new Uint8Array(n);
  while (n--) {
   u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], {
   type: mime
  })
  }
 },
 
 }
</script>
 
<style>
 * {
 margin: 0;
 padding: 0;
 }
 
 .content {
 margin: auto;
 max-width: 585px;
 margin-bottom: 100px;
 }
 
 .test-button {
 display: flex;
 flex-wrap: wrap;
 }
 
 .btn {
 display: inline-block;
 line-height: 1;
 white-space: nowrap;
 cursor: pointer;
 background: #fff;
 border: 1px solid #c0ccda;
 color: #1f2d3d;
 text-align: center;
 box-sizing: border-box;
 outline: none;
 margin: 20px 10px 0px 0px;
 padding: 9px 15px;
 font-size: 14px;
 border-radius: 4px;
 color: #fff;
 background-color: #50bfff;
 border-color: #50bfff;
 transition: all .2s ease;
 text-decoration: none;
 user-select: none;
 }
 
 .des {
 line-height: 30px;
 }
 
 code.language-html {
 padding: 10px 20px;
 margin: 10px 0px;
 display: block;
 background-color: #333;
 color: #fff;
 overflow-x: auto;
 font-family: Consolas, Monaco, Droid, Sans, Mono, Source, Code, Pro, Menlo, Lucida, Sans, Type, Writer, Ubuntu, Mono;
 border-radius: 5px;
 white-space: pre;
 }
 
 .show-info {
 margin-bottom: 50px;
 }
 
 .show-info h2 {
 line-height: 50px;
 }
 
 /*.title, .title:hover, .title-focus, .title:visited {
  color: black;
 }*/
 
 .title {
 display: block;
 text-decoration: none;
 text-align: center;
 line-height: 1.5;
 margin: 20px 0px;
 background-image: -webkit-linear-gradient(left, #3498db, #f47920 10%, #d71345 20%, #f7acbc 30%, #ffd400 40%, #3498db 50%, #f47920 60%, #d71345 70%, #f7acbc 80%, #ffd400 90%, #3498db);
 color: transparent;
 -webkit-background-clip: text;
 background-size: 200% 100%;
 animation: slide 5s infinite linear;
 font-size: 40px;
 }
 
 .test {
 height: 285px;
 }
 
 .model {
 position: fixed;
 z-index: 10;
 width: 100vw;
 height: 100vh;
 overflow: auto;
 top: 0;
 left: 0;
 background: rgba(0, 0, 0, 0.8);
 }
 
 .model-show {
 display: flex;
 justify-content: center;
 align-items: center;
 width: 100vw;
 height: 100vh;
 }
 
 .model img {
 display: block;
 margin: auto;
 max-width: 80%;
 user-select: none;
 background-position: 0px 0px, 10px 10px;
 background-size: 20px 20px;
 background-image: linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee 100%), linear-gradient(45deg, #eee 25%, white 25%, white 75%, #eee 75%, #eee 100%);
 }
 
 .c-item {
 display: block;
 padding: 10px 0;
 user-select: none;
 }
 
 @keyframes slide {
 0% {
  background-position: 0 0;
 }
 
 100% {
  background-position: -100% 0;
 }
 }
 
 @media screen and (max-width: 1000px) {
 .content {
  max-width: 90%;
  margin: auto;
 }
 
 .test {
  height: 400px;
 }
 }
</style>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/xr510002594/article/details/82876234

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产无遮挡一级毛片 | 91成人在线免费 | 中午字幕无线码一区2020 | 粉嫩粉嫩一区二区三区在线播放 | 红杏成人性视频免费看 | 国产亚洲欧美在线视频 | 九九热视频免费在线观看 | 黄色av网站在线观看 | 日韩精品中文字幕一区二区三区 | a一级黄色毛片 | 成人福利视频网站 | 国产美女爽到喷白浆的 | 激情夜色 | 日韩在线黄色片 | 99精品视频在线看 | 91 在线免费观看 | 欧美h版在线观看 | 牛牛热这里只有精品 | 精品国产高清一区二区三区 | 精品国产一区二区亚洲人成毛片 | 狠狠干天天操 | 欧美日韩视频第一页 | 婷婷中文字幕一区二区三区 | chinese xxxx hd pron8 tube | 国产精品三级a三级三级午夜 | 亚洲成人福利 | 午夜视频播放 | 国产91九色 | www.99re1.com| 一级毛片在线免费观看视频 | 羞羞视频在线免费 | 摸逼逼视频| 毛片av网 | 中文字幕在线一 | 亚洲午夜影院在线观看 | 一区二区三区欧美在线 | 中文字幕精品一二三四五六七八 | 天堂在线资源av | 天天骑夜夜操 | 欧美一级毛片一级毛片 | 午夜国产在线 |