移动端图片裁剪上传插件 Mavatar.js(原创)

所属分类:输入-上传

 43277  327  查看评论 (17)
分享到微信朋友圈
X
移动端图片裁剪上传插件 Mavatar.js(原创) ie兼容11

注:请在移动端用手势查看缩放效果,PC端无法缩放

Mavatar

移动端头像上传,支撑头像预览和放大缩小平移,内置上传至后端请求方法。

使用

安装

npm install mavatar

引入

import Mavatar from 'mavatar'

创建html的dom标签并定义id名,在dom加载完成的周期里,如 react的(componentDidMount), vue的(mounted)中进行实例化。也可以在纯js中使用,引入mavatar.js即可。

React中使用示例

 import Mavatar from 'mavatar'
 let avatar;

export default class App extends Component {
  componentDidMount() {
    avatar = new Mavatar({
      el: '#avatar',
      backgroundColor: '#ff6633'
    });
  }
  handleClip = (e) => {
    avatar.imageClipper((dataurl) => {
      console.log(dataurl);
    });
  }
  handleReset = (e) => {
    avatar.resetImage();
  }
  render() {
    return (
      <div>
        <div id="avatar" />
        <button onClick={this.handleClip}>裁剪</button>
        <button onClick={this.handleReset}>重置</button>
      </div>
    );
  }
}

Vue中使用示例

在vue中使用可以直接使用该vue组件vue-imageClip

普通js中使用示例

下载仓库中src/lib/mavatar.js保存到本地并引入

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Mavatar</title>
   <script src="lib/mavatar.js"></script>
</head>
<body>
<body>
<!-- dom -->
<div >
  <div id="avatar"></div>
  <button onclick="clip()">裁剪</button>
  <button onclick="reset()">重置</button>
</div>

<!-- script -->
<script>
  var avatar = new Mavatar({el: '#avatar',backgroundColor: '#fff'});
  function clip() {
    avatar.imageClipper(function (data) {
      alert('裁剪成功,生成的图片已覆盖在上传框内');
      console.log(data);
      //  将图片上传至后台
  avatar.upload({
url: 'http://localhost:3080/profile',
name: 'avatar',
data: {userName: 'hzy0913', info: 'someInfo'},
success: function (data) {
console.log(data)
},
error: function (error) {
console.log(error)
}
  });
    })
  }
  function reset() {
    avatar.resetImage();
  }
</script>
</body>
</html>

方法

裁剪: 图片裁剪方法,回调中可以获取裁剪完成base64

avatar.imageClipper(function(dataurl) {
    console.log(dataurl);
});

重置: 重置头像上传方法, 可以清空已上传的图片

avatar.resetImage()

获取头像上传前的信息(大小,尺寸等)。

const flieInfo = avatar.getfileInfo()

获取头像完成裁剪生成的base64(注意!使用时确保图片已完成裁剪,图片裁剪为异步方法)。

const dataUrl = avatar.getDataUrl()

图片上传至服务器的内置ajax方法(使用multipart/form-data类型模拟form格式进行上传)

avatar.upload({
    url: 'http://localhost:3080/profile',
    name: 'avatar',
    data: {userName: 'hzy0913', info: 'someInfo'},
    success: function (data) {
        console.log(data)
    },
    error: function (error) {
        console.log(error)
    }
});
参数类型描述
urlstring必传,上传的请求地址
namestring必传,图片上传的请求name
dataobject发送到服务器的其他数据,选填
successfunction上传成功的回调,选填
errorfunction上传失败的回调,选填

参数

实例化时传入的配置参数option对象 avatar = new Mavatar(option)

参数描述
elid(string),无默认值必传,dom的id
width(string)默认200px不传则默认为生成200px宽的头像上传域
height(string)默认200px不传则默认为生成200px高的头像上传域
backgroundColor(string)默认为空不传则裁剪时空的区域为透明
hd(boolean)默认为true默认为生成两倍大小图片,解决高清屏中图片生成不清晰
fileOnchange(function)图片本地上传到input后的回调方法
相关插件-上传

基于amazeui头像上传

基于amazeui框架,设计的头像上传插件
  上传
 70525  489

基于webuploader多图片上传插件diyUpload.js

多张图片上传 base64格式 移动端可支持,代码中有详细注释。
  上传
 87311  571

jQuery仿淘宝管理商品批量图片上传插件

jQuery淘宝上传商品图片代码,批量上传插件,(不兼容IE6,7,8)
  上传
 66464  375

多图片上传预览(纯前端)

多图片上传预览,已测试ie 360 火狐 谷歌浏览器
  上传
 255461  585

讨论这个项目(17)回答他人问题或分享插件使用方法奖励jQ币 评论用户自律公约

    似水流年,你懂不了的忧伤 0
    2020/1/3 13:01:30
    有碰到照片裁剪完右下角出现一块空白的吗? 回复
    失意的青春. 0
    2019/3/20 9:18:26
    你好 base64怎么存入数据库 太长了
        『深爱不及久伴』0
        2019/5/30 16:58:25
        你服务端是什么程序?上传后转成jpg就好了
    回复
    飞翔的荷兰人 0
    2019/2/21 16:26:54
    哇,很久没上来了。原来这么多问题呀???? 回复
    易佳-李炎 0
    2019/2/19 10:00:02
    你们有没有遇到苹果端拍照后裁剪不全? 求解!!! qq239455296
        咔咔0
        2019/7/26 14:05:37
        你解决了吗?
        houlquan0
        2020/4/7 11:44:06
        同问
        houlquan1
        2020/4/8 16:38:13
        苹果端似乎对width:auto不能自动识别,在Mavatar.js中有一个设置是当width>设置的剪裁宽度的时候,设置为auto,改为Math.ceil((image.width/image.height)*(设置的剪裁高度))+'px';就可以了,高度同理
    回复
    不会游泳的鱼& 0
    2019/1/27 11:21:56
    为啥没有设置默认图片的方法或者参数,传头像的业务不应该是有头像的默认头像回去,没头像的让他选择图片吗 回复
    53Technicalsupport 0
    2018/12/13 11:18:16
    压缩的有点狠了
    回复
    Smiling tiger 0
    2018/12/4 12:02:25
    剪裁完图片不见了
        arthur0
        2019/1/22 15:26:32
        我的也不见了
    回复
    好吧好吧。 0
    2018/11/20 16:58:48
    请问一下 我手机上传 怎么 只能裁切一次 后面几次都没调imageClipper方法 谢谢qq1037296710 回复
    ?Change? 0
    2018/11/12 13:33:46
    跨域中,怎么配置credentials:true呀,我的后台session失效了,谢谢啦 qq171250032 回复
    [!..!] 0
    2018/10/31 9:55:30
    楼主可以旋转图片么
        好吧好吧。0
        2018/11/20 16:59:21
        你做手机端 imageClipper方法可以 调用多次吗
    回复
😃
  • 😀
  • 😉
  • 😥
  • 😵
  • 😫
  • 😘
  • 😡
  • 👍
  • 🌹
  • 👏
  • 🍺
  • 🍉
  • 🌙
  • 💖
  • 💔
😃
  • 😀
  • 😉
  • 😥
  • 😵
  • 😫
  • 😘
  • 😡
  • 👍
  • 🌹
  • 👏
  • 🍺
  • 🍉
  • 🌙
  • 💖
  • 💔
取消回复