vue头像裁剪插件
A beautiful vue component for image crop and upload. (vue图片剪裁上传组件)
Click me.
ScreenshotIE10+
Envvue@1/vue@2 + webpack + es6
Install npm$ npm install vue-image-crop-upload Usage Props
名称 | 类型 | 默认 | 说明 |
---|---|---|---|
field | String | 'upload' | Upload input filename, used for server side get the file stream. |
value | Boolean | twoWay | show or not |
url | String | '' | Server api path,like "/avatar/upload" |
params | Object | null | POST Params,like "{k:v}" |
headers | Object | null | POST request header,like "{k:v}" |
langType | String | 'zh' | language type |
langExt | Object | language extend | |
width | Number | 200 | width of receive image |
height | Number | 200 | height of receive image |
imgFormat | string | 'jpg' | jpg/png, Server api receive file type. |
名称 | 说明 |
---|---|
cropSuccess | image crop success, params( imageDataUrl, field ) |
cropUploadSuccess | upload success, params( jsonData, field ) |
cropUploadFail | upload fail, params( status, field ) |
{ zh: { hint: '点击,或拖动图片至此处', loading: '正在上传……', noSupported: '浏览器不支持该功能,请使用IE10以上或其他现在浏览器!', success: '上传成功', fail: '图片上传失败', preview: '头像预览', btn: { off: '取消', close: '关闭', back: '上一步', save: '保存' }, error: { onlyImg: '仅限图片格式', outOfSize: '单文件大小不能超过 ', lowestPx: '图片最低像素为(宽*高):' } }, en: { hint: 'Click, or drag the file here', loading: 'Uploading……', noSupported: 'Browser does not support, please use IE10+ or other browsers', success: 'Upload success', fail: 'Upload failed', preview: 'Preview', btn: { off: 'Cancel', close: 'Close', back: 'Back', save: 'Save' }, error: { onlyImg: 'Image only', outOfSize: 'Image exceeds size limit: ', lowestPx: 'The lowest pixel in the image: ' } }, ru: { hint: 'Нажмите, или перетащите файл в это окно', loading: 'Загружаю……', noSupported: 'Ваш браузер не поддерживается, пожалуйста, используйте IE10 + или другие браузеры', success: 'Загрузка выполнена успешно', fail: 'Ошибка загрузки', preview: 'Предпросмотр', btn: { off: 'Отменить', close: 'Закрыть', back: 'Назад', save: 'Сохранить' }, error: { onlyImg: 'Только изображения', outOfSize: 'Изображение превышает предельный размер: ', lowestPx: 'Минимальный размер изображения: ' } } } Example vue@1
<div id="app"> <a class="btn" @click="toggleShow">set avatar</a> <my-upload field="img" :width="300" :height="300" url="/upload" :params="params" :headers="headers" lang-type="en" :value.sync="show" img-format="png"></my-upload> <img :src="imgDataUrl"> </div> <script> import 'babel-polyfill'; // es6 shim import Vue from 'vue'; import myUpload from 'vue-image-crop-upload'; new Vue({ el: '#app', data: { show: true, params: { token: '123456798', name: 'avatar' }, headers: { smail: '*_~' }, imgDataUrl: '' // the datebase64 url of created image }, components: { 'my-upload': myUpload }, methods: { toggleShow() { this.show = !this.show; } }, events: { /** * crop success * * [param] imgDataUrl * [param] field */ cropSuccess(imgDataUrl, field){ console.log('-------- crop success --------'); this.imgDataUrl = imgDataUrl; }, /** * upload success * * [param] jsonData server api return data, already json encode * [param] field */ cropUploadSuccess(jsonData, field){ console.log('-------- upload success --------'); console.log(jsonData); console.log('field: ' + field); }, /** * upload fail * * [param] status server api return error status, like 500 * [param] field */ cropUploadFail(status, field){ console.log('-------- upload fail --------'); console.log(status); console.log('field: ' + field); } } }); </script> Example vue@2
<div id="app"> <a class="btn" @click="toggleShow">set avatar</a> <my-upload field="img" @crop-success="cropSuccess" @crop-upload-success="cropUploadSuccess" @crop-upload-fail="cropUploadFail" v-model="show" :width="300" :height="300" url="/upload" :params="params" :headers="headers" img-format="png"></my-upload> <img :src="imgDataUrl"> </div> <script> import 'babel-polyfill'; // es6 shim import Vue from 'vue'; import myUpload from 'vue-image-crop-upload/upload-2.vue'; new Vue({ el: '#app', data: { show: true, params: { token: '123456798', name: 'avatar' }, headers: { smail: '*_~' }, imgDataUrl: '' // the datebase64 url of created image }, components: { 'my-upload': myUpload }, methods: { toggleShow() { this.show = !this.show; }, /** * crop success * * [param] imgDataUrl * [param] field */ cropSuccess(imgDataUrl, field){ console.log('-------- crop success --------'); this.imgDataUrl = imgDataUrl; }, /** * upload success * * [param] jsonData server api return data, already json encode * [param] field */ cropUploadSuccess(jsonData, field){ console.log('-------- upload success --------'); console.log(jsonData); console.log('field: ' + field); }, /** * upload fail * * [param] status server api return error status, like 500 * [param] field */ cropUploadFail(status, field){ console.log('-------- upload fail --------'); console.log(status); console.log('field: ' + field); } } }); </script> 中文文档 更新日志 @1.3.0 添加了俄罗斯语言包 (thanks @bigperson) 添加了新属性: "headers" (用于设置请求头部:setRequestHeader) @1.2.0 兼容vue@2版本 @1.1.0 调整了Props命名: "otherParams"=>"params", "langConf"=>"langExt" 示例
点我.
截图IE10+
配置环境vue@1/vue@2 + webpack + es6
安装 npm$ npm install vue-image-crop-upload 使用 Props
名称 | 类型 | 默认 | 说明 |
---|---|---|---|
field | String | 'upload' | 向服务器上传的文件名 |
value | Boolean | twoWay | 是否显示控件,双向绑定 |
url | String | '' | 上传接口地址 |
params | Object | null | 上传附带其他数据,格式"{k:v}" |
headers | Object | null | 上传header设置,格式"{k:v}" |
langType | String | 'zh' | 语言类型,默认中文 |
langExt | Object | 语言包自行扩展 | |
width | Number | 200 | 最终得到的图片宽度 |
height | Number | 200 | 最终得到的图片高度 |
imgFormat | string | 'jpg' | jpg/png, 最终得到的图片格式 |
名称 | 说明 |
---|---|
cropSuccess | 图片截取完成事件(上传前), 参数( imageDataUrl, field ) |
cropUploadSuccess | 上传成功, 参数( jsonData, field ) |
cropUploadFail | 上传失败, 参数( status, field ) |
{ zh: { hint: '点击,或拖动图片至此处', loading: '正在上传……', noSupported: '浏览器不支持该功能,请使用IE10以上或其他现在浏览器!', success: '上传成功', fail: '图片上传失败', preview: '头像预览', btn: { off: '取消', close: '关闭', back: '上一步', save: '保存' }, error: { onlyImg: '仅限图片格式', outOfSize: '单文件大小不能超过 ', lowestPx: '图片最低像素为(宽*高):' } }, en: { hint: 'Click, or drag the file here', loading: 'Uploading……', noSupported: 'Browser does not support, please use IE10+ or other browsers', success: 'Upload success', fail: 'Upload failed', preview: 'Preview', btn: { off: 'Cancel', close: 'Close', back: 'Back', save: 'Save' }, error: { onlyImg: 'Image only', outOfSize: 'Image exceeds size limit: ', lowestPx: 'The lowest pixel in the image: ' } }, ru: { hint: 'Нажмите, или перетащите файл в это окно', loading: 'Загружаю……', noSupported: 'Ваш браузер не поддерживается, пожалуйста, используйте IE10 + или другие браузеры', success: 'Загрузка выполнена успешно', fail: 'Ошибка загрузки', preview: 'Предпросмотр', btn: { off: 'Отменить', close: 'Закрыть', back: 'Назад', save: 'Сохранить' }, error: { onlyImg: 'Только изображения', outOfSize: 'Изображение превышает предельный размер: ', lowestPx: 'Минимальный размер изображения: ' } } } 使用示例 vue@1
<div id="app"> <a class="btn" @click="toggleShow">设置头像</a> <my-upload field="img" :width="300" :height="300" url="/upload" :params="params" :headers="headers" :value.sync="show" img-format="png"></my-upload> <img :src="imgDataUrl"> </div> <script> import 'babel-polyfill'; // es6 shim import Vue from 'vue'; import myUpload from 'vue-image-crop-upload'; new Vue({ el: '#app', data: { show: true, params: { token: '123456798', name: 'avatar' }, headers: { smail: '*_~' }, imgDataUrl: '' // the datebase64 url of created image }, components: { 'my-upload': myUpload }, methods: { toggleShow() { this.show = !this.show; } }, events: { /** * crop success * * [param] imgDataUrl * [param] field */ cropSuccess(imgDataUrl, field){ console.log('-------- crop success --------'); this.imgDataUrl = imgDataUrl; }, /** * upload success * * [param] jsonData 服务器返回数据,已进行json转码 * [param] field */ cropUploadSuccess(jsonData, field){ console.log('-------- upload success --------'); console.log(jsonData); console.log('field: ' + field); }, /** * upload fail * * [param] status server api return error status, like 500 * [param] field */ cropUploadFail(status, field){ console.log('-------- upload fail --------'); console.log(status); console.log('field: ' + field); } } }); </script> 使用示例 vue@2
<div id="app"> <a class="btn" @click="toggleShow">设置头像</a> <my-upload field="img" @crop-success="cropSuccess" @crop-upload-success="cropUploadSuccess" @crop-upload-fail="cropUploadFail" v-model="show" :width="300" :height="300" url="/upload" :params="params" :headers="headers" img-format="png"></my-upload> <img :src="imgDataUrl"> </div> <script> import 'babel-polyfill'; // es6 shim import Vue from 'vue'; import myUpload from 'vue-image-crop-upload/upload-2.vue'; new Vue({ el: '#app', data: { show: true, params: { token: '123456798', name: 'avatar' }, headers: { smail: '*_~' }, imgDataUrl: '' // the datebase64 url of created image }, components: { 'my-upload': myUpload }, methods: { toggleShow() { this.show = !this.show; }, /** * crop success * * [param] imgDataUrl * [param] field */ cropSuccess(imgDataUrl, field){ console.log('-------- crop success --------'); this.imgDataUrl = imgDataUrl; }, /** * upload success * * [param] jsonData 服务器返回数据,已进行json转码 * [param] field */ cropUploadSuccess(jsonData, field){ console.log('-------- upload success --------'); console.log(jsonData); console.log('field: ' + field); }, /** * upload fail * * [param] status server api return error status, like 500 * [param] field */ cropUploadFail(status, field){ console.log('-------- upload fail --------'); console.log(status); console.log('field: ' + field); } } }); </script>
版权声明:
1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。2、网站不提供资料下载,如需下载请到原作者页面进行下载。