同步操作将从 光年以外/vue-picture-cut 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
基于vue
和typescript
开发的一款图片剪裁处理工具
优点:原生、轻量、使用简单、功能全面、扩展性强
目前功能:缩放、翻折、旋转、边缘校验、矩形剪裁、任意(椭)圆剪裁
关于缩放:鼠标(鼠标滚轮缩放)、触屏(双指缩放)
github主页
码云主页
demo演示(github)
demo演示(码云)
💩💩💩0.x版本点这里【此版本bug太多,不再维护】
npm i vue-picture-cut@2.0.0-beta.2
1、在main.js
中全局引用
import Vue from 'vue';
import 'vue-picture-cut/lib/vue-picture-cut.css';
import VuePictureCut from 'vue-picture-cut';
Vue.use(VuePictureCut);
2、或者在.vue
文件中单独引用
<template>
<div>
<input type="file" accept="image/*" @change="inputChange"/>
<vue-picture-cut :src="src" @on-change="cutChange"/>
</div>
</template>
<script>
import { VuePictureCut } from 'vue-picture-cut';
export default {
// ...
components: {
VuePictureCut
},
data () {
return {
src: null,
blob: null,
base64: null
}
},
methods: {
inputChange(e) {
const file = e.target.files[0];
this.src = URL.createObjectURL(file);
},
/**
* @param blob BLOB对象
* @param base64 base64字符串
*/
cutChange({ blob, base64 }) {
this.blob = blob;
this.base64 = base64;
}
}
// ...
}
</script>
<style>
@import "~vue-picture-cut/lib/vue-picture-cut.css";
</style>
3、注意
组件在使用时,宽高跟随父级标签,所以需要设置父级标签的宽高。
全局引入时
import VuePictureCut from 'vue-picture-cut';
Vue.use(VuePictureCut);
此时会注册:VuePictureCut
、VuePictureCutMask
、VuePictureCutMenu
三个组件。
独立引用
import {
VuePictureCut,
VuePictureCutMask,
VuePictureCutMenu,
Bezier,
createAnimation,
Tool
} from 'vue-picture-cut';
组件:VuePictureCut
、VuePictureCutMask
、VuePictureCutMenu
。
工具类:Bezier
、createAnimation
、Tool
。
slot插槽: default
、menu
使用:
<template>
<vue-picture-cut
ref="pictureCut"
:src="src"
:magnification="magnification"
:init-angle="initAngle"
:rotate-control="rotateControl"
:msk-option="mskOption"
:max-pixel="maxPixel"
:encoder-options="encoderOptions"
:format="format"
@on-change="onChange"
/>
</template>
属性:
src
:magnification
:initAngle
:rotateControl
:maxPixel
:encoderOptions
:format
:mskOption
:{ width: 1, height: 1, isRound: false, resize: true}
事件:
onChange ({ blob, base64 })
:监听图片最终裁剪导出的事件方法:
this.$refs['pictureCut'].scale(zoom)
:缩放图片VuePictureCutMask
是VuePictureCut
默认slot插槽组件,是控制遮罩裁剪框相关的组件,使用它与不使用它效果一样。
使用:
<template>
<vue-picture-cut
:src="src"
:magnification="magnification"
:init-angle="initAngle"
:rotate-control="rotateControl"
:max-pixel="maxPixel"
:encoder-options="encoderOptions"
:format="format"
@on-change="onChange"
>
<vue-picture-mask
:width="width"
:height="height"
:is-round="isRound"
:resize="resize"
/>
</vue-picture-cut>
</template>
属性:
width
:height
:isRound
:resize
:菜单栏组件,效果参见Demo。
使用:
<template>
<vue-picture-cut
:src="src"
:magnification="magnification"
:init-angle="initAngle"
:rotate-control="rotateControl"
:msk-option="mskOption"
@on-change="cutChange"
>
<vue-picture-menu
slot="menu"
:cancel="false"
:max-pixel="maxPixel"
:encoder-options="encoderOptions"
:format="format"
@on-change="onChange"
@on-cancel="onCancel"
/>
</vue-picture-cut>
</template>
属性:
cancel
:maxPixel
:encoderOptions
:format
:事件:
onChange ({ blob, base64 })
:监听图片最终裁剪导出的事件,即点击确认按钮
blob:导出图片的Blob对象,可用于图片上传
base64:导出图片的base64字符串,可用于图片上传
onCancel ()
:监听点击取消按钮
import { Bezier } from 'vue-picture-cut';
const bezier = Bezier();
bezier.setOpt(Bezier.BEZIER['ease-in-out']);
const y = bezier.getPoint(0.5);
console.log(y);
键 | 值 | 说明 |
---|---|---|
linear | [0.0, 0.0, 1.0, 1.0] | 线性过渡 |
ease | [0.25, 0.1, 0.25, 1.0] | 平滑过渡 |
ease-in | [0.42, 0, 1.0, 1.0] | 由慢到快 |
ease-out | [0, 0, 0.58, 1.0] | 由快到慢 |
ease-in-out | [0.42, 0, 0.58, 1.0] | 由慢到快再到慢 |
一个无参的构造函数,内部调用了setOptByString('ease')
方法
方法名 | 说明 | 参数 | 返回值 |
---|---|---|---|
setOpt | 设置贝塞尔曲线类型 | (arg: string , ParamsInterface = 'ease') | Bezier对象本身 |
setOptByString | 设置贝塞尔曲线类型 | BEZIER预设值(arg = 'ease') | Bezier对象本身 |
setOptByArr | 设置贝塞尔曲线类型 | (x1: number, y1: number, x2: number, y2: number) | Bezier对象本身 |
getPoint | 返回x坐标对应的y坐标值 | (x: number) 0~1之间 | 对应y坐标,0~1之间 |
ParamsInterface为包含4个number类型的数组。
import { createAnimation } from 'vue-picture-cut';
const animation = createAnimation(option);
createAnimation会返回一个Animation对象
参数 | 说明 | 类型 | 可选值 | 必需 | 默认值 |
---|---|---|---|---|---|
duration | 动画持续时间,单位毫秒 | number | —— | false | 1000 |
timing | 动画的过渡类型 | string、number[] | Bezier.BEZIER中的值,或者ParamsInterface类型 | false | ease |
delay | 动画的延迟时间,单位毫秒 | number | —— | false | 0 |
iteration | 动画循环次数,infinite为无限循环 | number、string | 'infinite'或正整数 | false | 0 |
direction | 动画在循环中是否反向运动 | string | normal(默认,正向运动);reverse(反向运行);alternate(先正向,后反向,并交替);alternate-reverse(先反向,后正向,并交替)。 | false | normal |
change | 回调函数,接收参数x,x在0~1之间,动画在这里处理 | Function | —— | false | —— |
end | 回调函数,动画结束时执行 | Function | —— | false | —— |
方法名 | 说明 | 参数 | 返回值 |
---|---|---|---|
start | 开始动画 | —— | Animation对象本身 |
abort | 中止动画 | —— | —— |
import { Tool } from 'vue-picture-cut';
Tool.loadImg('http://xxx.xxx.xxx/xxx.jpg')
.then(image => {
// 加载图片成功
// image为Image对象
}, image => {
// 加载图片失败
});
...待编辑
暂时可以参考src/App.vue
和src/lib/views/vue-picture-cut-menu.vue
...文档待编辑
...文档待编辑
VuePictureCut 💗 you!
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。