management/front/dkha-web-sz-main/node_modules/vue-cropper/README.md

600 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## 需要使用外层容器包裹并设置宽高
## 使用 注意: 需要关掉本地的mock服务 不然图片转化会报错
```
组件内使用
import { VueCropper } from 'vue-cropper'
components: {
VueCropper,
},
main.js里面使用
import VueCropper from 'vue-cropper'
Vue.use(VueCropper)
cdn方式使用
<script src="//cdn.jsdelivr.net/npm/vue-cropper@0.4.9/dist/index.js"></script>
Vue.use(window['vue-cropper'].default)
nuxt 使用方式
if(process.browser) {
vueCropper = require('vue-cropper')
Vue.use(vueCropper.default)
}
```
``` html
<vueCropper
ref="cropper"
:img="option.img"
:outputSize="option.size"
:outputType="option.outputType"
></vueCropper>
```
## vue-cropper
### 一个优雅的图片裁剪插件
[预览](http://xyxiao.cn/vue-cropper/example/)
[english](https://github.com/xyxiao001/vue-cropper/blob/master/english.md)
### vue-cropper 相关文章参考。
#### [shn_ui - vue-cropper ](https://shnhz.github.io/shn-ui/#/component/vue-cropper) 作者 野宁新之助
#### [vue全家桶开发管理后台—裁切图片](https://blog.csdn.net/qq_30632003/article/details/79639346) 作者: 麻球科技-菅双鹏
#### [Vue-cropper 图片裁剪的基本原理](https://www.cnblogs.com/tugenhua0707/p/8859291.html) 作者: 龙恩0707
#### [关于昵称和头像的总结(模仿微信)](https://zhuanlan.zhihu.com/p/45746753) 作者: 秋晨光
#### [vue-cropper-h5](https://github.com/2277419213/vue-cropper-h5) 作者:居里栈栈
### vue-cropper 交流。
##### 有什么意见,或者bug 或者想一起开发vue-cropper 或者想一起开发其他插件
![](https://qn-qn-kibey-static-cdn.app-echo.com/4C6FE9E2-3D06-402B-8F32-98B82BEBDD9F.png)
# vue-cropper
#### 安装
```
npm install vue-cropper
yarn add vue-cropper
```
### 如果你没有使用npm
[在线例子](https://codepen.io/xyxiao001/pen/wxwKGz)
### 服务器渲染 nuxt 解决方案 设置为ssr: false
```
module.exports = {
...
build: {
vendor: [
'vue-cropper
...
plugins: [
{ src: '~/plugins/vue-cropper', ssr: false }
]
}
}
```
### 目前还不知道什么原因项目里面开启mock 会导致file报错, 建议使用时 关掉mock
<table style="text-align: center">
<thead>
<tr>
<td>名称</td>
<td>功能</td>
<td>默认值</td>
<td>可选值</td>
</tr>
</thead>
<tbody>
<tr>
<td>img</td>
<td>裁剪图片的地址</td>
<td>空</td>
<td>url 地址 || base64 || blob</td>
</tr>
<tr>
<td>outputSize</td>
<td>裁剪生成图片的质量</td>
<td>1</td>
<td>0.1 - 1</td>
</tr>
<tr>
<td>outputType</td>
<td>裁剪生成图片的格式</td>
<td>jpg (jpg 需要传入jpeg)</td>
<td>jpeg || png || webp</td>
</tr>
<tr>
<td>info</td>
<td>裁剪框的大小信息</td>
<td>true</td>
<td>true || false</td>
</tr>
<tr>
<td>canScale</td>
<td>图片是否允许滚轮缩放</td>
<td>true</td>
<td>true || false</td>
</tr>
<tr>
<td>autoCrop</td>
<td>是否默认生成截图框</td>
<td>false</td>
<td>true || false</td>
</tr>
<tr>
<td>autoCropWidth</td>
<td>默认生成截图框宽度</td>
<td>容器的80%</td>
<td>0~max</td>
</tr>
<tr>
<td>autoCropHeight</td>
<td>默认生成截图框高度</td>
<td>容器的80%</td>
<td>0~max</td>
</tr>
<tr>
<td>fixed</td>
<td>是否开启截图框宽高固定比例</td>
<td>true</td>
<td>true | false</td>
</tr>
<tr>
<td>fixedNumber</td>
<td>截图框的宽高比例</td>
<td>[1, 1]</td>
<td>[宽度, 高度]</td>
</tr>
<tr>
<td>full</td>
<td>是否输出原图比例的截图</td>
<td>false</td>
<td>true | false</td>
</tr>
<tr>
<td>fixedBox</td>
<td>固定截图框大小 不允许改变</td>
<td>false</td>
<td>true | false</td>
</tr>
<tr>
<td>canMove</td>
<td>上传图片是否可以移动</td>
<td>true</td>
<td>true | false</td>
</tr>
<tr>
<td>canMoveBox</td>
<td>截图框能否拖动</td>
<td>true</td>
<td>true | false</td>
</tr>
<tr>
<td>original</td>
<td>上传图片按照原始比例渲染</td>
<td>false</td>
<td>true | false</td>
</tr>
<tr>
<td>centerBox</td>
<td>截图框是否被限制在图片里面</td>
<td>false</td>
<td>true | false</td>
</tr>
<tr>
<td>high</td>
<td>是否按照设备的dpr 输出等比例图片</td>
<td>true</td>
<td>true | false</td>
</tr>
<tr>
<td>infoTrue</td>
<td>true 为展示真实输出图片宽高 false 展示看到的截图框宽高</td>
<td>false</td>
<td>true | false</td>
</tr>
<tr>
<td>maxImgSize</td>
<td>限制图片最大宽度和高度</td>
<td>2000</td>
<td>0-max</td>
</tr>
<tr>
<td>enlarge</td>
<td>图片根据截图框输出比例倍数</td>
<td>1</td>
<td>0-max(建议不要太大不然会卡死的呢)</td>
</tr>
<tr>
<td>mode</td>
<td>图片默认渲染方式</td>
<td>contain</td>
<td>contain , cover, 100px, 100% auto</td>
</tr>
<!-- <tr>
<td>limitMinSize</td>
<td>截图框最小宽高</td>
<td>10</td>
<td>number, string, [number, number]</td>
</tr> -->
</tbody>
</table>
### 内置方法 通过this.$refs.cropper 调用
##### this.$refs.cropper.startCrop() 开始截图
##### this.$refs.cropper.stopCrop() 停止截图
##### this.$refs.cropper.clearCrop() 清除截图
##### this.$refs.cropper.changeScale() 修改图片大小 正数为变大 负数变小
##### this.$refs.cropper.getImgAxis() 获取图片基于容器的坐标点
##### this.$refs.cropper.getCropAxis() 获取截图框基于容器的坐标点
##### this.$refs.cropper.goAutoCrop 自动生成截图框函数
##### this.$refs.cropper.rotateRight() 向右边旋转90度
##### this.$refs.cropper.rotateLeft() 向左边旋转90度
#### 图片加载的回调 imgLoad 返回结果success, error
#### 获取截图信息
this.$refs.cropper.cropW 截图框宽度
this.$refs.cropper.cropH 截图框高度
``` js
// 获取截图的base64 数据
this.$refs.cropper.getCropData((data) => {
// do something
console.log(data)
})
// 获取截图的blob数据
this.$refs.cropper.getCropBlob((data) => {
// do something
console.log(data)
})
### Description of the default rendering mode of the image
Image layout mode mode achieves the same effect as css background
Contain Centered layout Default does not scale Ensure the image is inside the container mode: 'contain'
Cover stretch layout fill the entire container mode: 'cover'
If only one value is given, this value will be used as the width value and the height value will be set to auto. mode: '50px'
If two values are given, the first one will be the width value and the second will be the height value. mode: '50px 60px'
### 预览
``` html
@realTime="realTime"
// Real time preview function
realTime(data) {
var previews = data;
var h = 0.5;
var w = 0.2;
this.previewStyle1 = {
width: previews.w + "px",
height: previews.h + "px",
overflow: "hidden",
margin: "0",
zoom: h
};
this.previewStyle2 = {
width: previews.w + "px",
height: previews.h + "px",
overflow: "hidden",
margin: "0",
zoom: w
};
固定为100宽度
this.previewStyle3 = {
width: previews.w + "px",
height: previews.h + "px",
overflow: "hidden",
margin: "0",
zoom: 100 / preview.w
};
固定为100高度
this.previewStyle4 = {
width: previews.w + "px",
height: previews.h + "px",
overflow: "hidden",
margin: "0",
zoom: 100 / preview.h
};
this.previews = data;
},
<div class="show-preview" :style="{'width': previews.w + 'px', 'height': previews.h + 'px', 'overflow': 'hidden',
'margin': '5px'}">
<div :style="previews.div">
<img :src="option.img" :style="previews.img">
</div>
</div>
<p>中等大小</p>
<div :style="previewStyle1">
<div :style="previews.div">
<img :src="previews.url" :style="previews.img">
</div>
</div>
<p>迷你大小</p>
<div :style="previewStyle2">
<div :style="previews.div">
<img :src="previews.url" :style="previews.img">
</div>
</div>
=
```
#### 图片移动回调函数 @imgMoving
```
data type
{
moving: true, // moving 是否在移动
axis: {
x1: 1, // 左上角
x2: 1// 右上角
y1: 1// 左下角
y2: 1 // 右下角
}
}
```
#### 截图框移动回调函数 @cropMoving
```
data type
{
moving: true, // moving 是否在移动
axis: {
x1: 1, // 左上角
x2: 1// 右上角
y1: 1// 左下角
y2: 1 // 右下角
}
}
```
## 更新日志
### 0.55
```
修复 ios 版本小于 13.4没有处理图片旋转的 bug
```
### 0.54
```
去除 log 信息
修复 pc safari低版本问题
```
### 0.53
```
因为 chrome81 内核版本和 ios13.5 版本修复了图片旋转的 bug
插件在新版浏览器默认不处理旋转了,低版本浏览器自动处理
https://www.chromestatus.com/feature/6313474512650240
```
### 0.52
```
撤回最小弹框属性, 存在弹框拖拽坐标判断的 bug
```
### 0.51
```
更新裁剪框最小属性, 限制最小区域,可传1以上的数字和字符串限制长宽都是这么大 也可以传数组[90,90]
limitMinSize: [Number, Array, String]
```
### 0.50
支持图片清空
修复 ie11 ie10 不能使用问题
修复 URL.createObjectURL 创建后没有销毁的 bug
添加截图框修改触发事件
this.$emit('change-crop-size', {
width: this.cropW,
height: this.cropH
})
### 0.49
修复滚轮默认事件问题
修复html静态文件引入事件触发问题
### 0.48
修复mode 属性 contain 和cover的显示bug问题
修复ios 下面base64图片跨域显示问题
### 0.47
修复第一次不触发预览的问题
新增加图片渲染mode功能
### 0.46
修复图片旋转bug
修复显示的一些bug
### 0.45
添加倍数使用 enlarge
可以输出裁剪框等比例图片;
感谢来自于 [](https://github.com/hzsrc)的贡献
添加预览框各种比例, 和修复图片截图小数问题
### 0.44
修复引入方式的问题
```
组件内使用
import { VueCropper } from vue-cropper
components: {
VueCropper,
},
main.js里面使用
import VueCropper from vue-cropper
Vue.use(vueCropper)
cdn方式使用
<script src="vuecropper.js"></script>
Vue.use(window['vue-cropper'])
```
### v0.43
剥离exif的依赖库, 添加exfi-min.js减小代码体积 45.9k => 37k
build 升级webpack4 升级
```
添加vue install 方法 =》 npm: Vue.use(VueCropper) web: Vue.use(window['vue-cropper'])
```
### v0.42
修复截图框因为去除小数点的引起的问题
### v0.41
修复截图框边界问题
### v0.40
修复orientation的处理方式
感谢 [Felipe Mengatto](https://github.com/felipemengatto)的贡献
### v0.39
修复orientation值不同带来的问题
感谢 [Felipe Mengatto](https://github.com/felipemengatto)的贡献
### v0.38
```
修改坐标反馈问题
```
### v0.37
```
修复centerBox 的截图超出1px问题
添加截图 图片移动触发事件
```
### v0.36
```
修复旋转自动生成截图框的错误
修改autocrop 可以动态生成截图框
```
### v0.35
```
修复其他图片没有压缩的问题
```
### v0.34
```提供移动端崩溃的解决方案
修改maxImgSize为2000
```
### v0.33
```提供移动端崩溃的解决方案
maxImgSize 限制图片最大宽度和高度 默认为2000px
```
### v0.32
```
新增截图框信息展示
infoTrue true 为展示真实输出图片宽高 false 展示看到的截图框宽高
```
### v0.30
```
新增获取图片坐标函数 this.$refs.cropper.getImgAxis()
新增获取截图框坐标函数 this.$refs.cropper.getCropAxis()
新增对高清设备的兼容 high
新增截图框限制在图片以内的功能 centerbox
新增自动生成截图框函数 this.$refs.cropper.goAutoCrop
```
### v0.29
新增图片加载的回调 imgLoad 返回结果success, error
### v0.28
修复截图框固定 截图框会影响原图移动 缩放
### v0.27
鼠标缩放问题优化
img max-width 样式优化
新增属性
canMove 是否可以移动图片 默认为是
canMoveBox 是否可以移动截图框 默认为是
original 是否按图片原始比例渲染 默认为否
### v0.26
修复火狐浏览器 鼠标缩放问题
### v0.25
修复图片有可能不展示
### v0.24
修复ios拍照旋转 截图问题 添加自动修复图片 截图预览代码变更, 修改默认上传图片为blob预览
``` html
realTime (data) {
this.previews = data
}
<div class="show-preview" :style="{'width': previews.w + 'px', 'height': previews.h + 'px', 'overflow': 'hidden',
'margin': '5px'}">
<div :style="previews.div">
<img :src="previews.url" :style="previews.img">
</div>
</div>
```
### v0.23
小优化
### v0.22
新增修改图片大小函数 通过this.$refs.cropper.changeScale 调用
### v0.21
新增固定截图框大小fiexdBox(注: 最好搭配自动生成截图框使用)
### v0.20
新增输出原图比例截图 props名full, 修复缩放图片过大灵敏度问题
### v0.19
新增图片旋转 修复mac滚轮过度灵敏
``` js
this.$refs.cropper.rotateRight() // 向右边旋转90度
this.$refs.cropper.rotateLeft() // 向左边旋转90度
```
### v0.18
修复默认生成截图框超过容器错误
### v0.17
修复blob数据获取错误
### v0.15
添加手机端手势缩放
```
canScale: true
```
### v0.13
添加预览
``` html
@realTime="realTime"
// Real time preview function
realTime (data) {
this.previews = data
}
<div class="show-preview" :style="{'width': previews.w + 'px', 'height': previews.h + 'px', 'overflow': 'hidden',
'margin': '5px'}">
<div :style="previews.div">
<img :src="option.img" :style="previews.img">
</div>
</div>
```