• Stars
    star
    508
  • Rank 86,941 (Top 2 %)
  • Language
    JavaScript
  • Created over 7 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

👧 A simple and elegant avatar cropping and upload plugin.

Vue Avatar Cropper

👧 A simple and elegant component to crop and upload avatars.

image

Edit Demo

Sponsor me

Basic usage

<button @click="showCropper = true">Select an image</button>

<avatar-cropper
  v-model="showCropper"
  upload-url="/files/upload"
  @uploaded="handleUploaded"
/>

<script>
  export default {
    data() {
      return {
        showCropper: false,
      }
    },
    methods: {
      handleUploaded({ form, request, response }) {
        // update user avatar attribute
      },
    },
  }
</script>

Installing

Browsers

  1. Include the link to AvatarCropper in <head> alongside Vue.js, Cropper.js and Mime:

    <link
      rel="stylesheet"
      href="https://unpkg.com/[email protected]/dist/cropper.min.css"
    />
    <script src="https://unpkg.com/[email protected]/dist/cropper.js"></script>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    <script src="https://unpkg.com/vue-avatar-cropper/dist/avatar-cropper.umd.js"></script>
    <script src="https://wzrd.in/standalone/mime%2flite@latest"></script>
  2. Add a trigger button and <avatar-cropper> to mount the component:

<button @click="showCropper = true">Select an image</button>

<avatar-cropper
  v-model="showCropper"
  upload-url="/files/upload"
  @uploaded="handleUploaded"
/>
  1. Create Vue instance and register AvatarCropper component:
<script>
  Vue.createApp({
    el: '#app',

    data() {
      return {
        showCropper: false,
      }
    },

    methods: {
      handleUploaded(event) {
        console.log('avatar uploaded', event)
      },
    },
  })
    .use(AvatarCropper)
    .mount('#app')
</script>

Node environment

  1. Install the AvatarCropper package:

    npm install vue-avatar-cropper
    
    # or
    yarn add vue-avatar-cropper
  2. Register it as you usually would:

    import AvatarCropper from 'vue-avatar-cropper'
    
    // or
    const AvatarCropper = require('vue-avatar-cropper')
    
    Vue.component('AvatarCropper', AvatarCropper)
    
    // or
    Vue.use(AvatarCropper)
    
    // or
    new Vue({
      components: { AvatarCropper },
      // ...
    })

Props

Property Name Type Description
modelValue Boolean Set to true to show the avatar cropper, this prop is used for v-model. Default: false
file File File to use instead of prompting the user to upload one
upload-url String URL to upload the file to
upload-file-field String FormData field to use for the file. Default: 'file'
upload-file-name String/Function File name to use for the FormData field. Can be String or Function({ filename, mime, extension }) => String. Default: Automatically determined from the uploaded File's name property and the extension of the output MIME.
upload-form-data FormData Additional FormData. Default: new FormData()
upload-handler Function Handler to replace default upload handler, the argument is cropperJS instance.
request-options Object Options passed to the init parameter of the Request() constructor. Use this to set the method, headers, etc. Default: { method: 'POST' }
cropper-options Object Options passed to the cropperJS instance.
Default: {
    aspectRatio: 1,
    autoCropArea: 1,
    viewMode: 1,
    movable: false,
    zoomable: false
}
output-options Object Options passed to the cropper.getCroppedCanvas() method.
Default: {}. Recommended use-case is specifying an output size, for instance: { width: 512, height: 512 }
output-mime String The resulting avatar image MIME type, if invalid image/png will be used. Default: null
output-quality Number The resulting avatar image quality [0 - 1]. Default: 0.9
(if the output-mime property is 'image/jpeg' or 'image/webp')
mimes String Allowed image formats. Default:
'image/png, image/gif, image/jpeg, image/bmp, image/x-icon'
capture String Capture attribute for the file input. Forces mobile users to take a new picture with the back(Use value 'environment') or front(Use value 'user') camera
labels Object Label for buttons. Default: { submit: 'Ok', cancel: 'Cancel' }
inline Boolean If true component will be displayed as inline elemenet. Default: false

Events

  • update:modelValue modelValue prop changed, used for v-model, parameter:

    • value boolean.
  • changed user picked a file, parameter is an object containing:

  • submit right after a click on the submit button

  • cancel when user decides to cancel the upload

  • uploading before submit upload request, parameter is an object containing:

  • uploaded after request is successful, parameter is an object containing:

  • completed after request has completed, parameter is an object containing:

  • error something went wrong, parameter is an object containing:

    • message error message.
    • type error type, example: 'load'/'upload'/'user'.
    • context context data.

You can listen for these events like this:

<avatar-cropper
  v-model="showCropper"
  upload-url="/files/upload"
  @uploading="handleUploading"
  @uploaded="handleUploaded"
  @completed="handleCompleted"
  @error="handleError"
/>
export default {
  //...
  methods: {
    ...
    handleUploading({ form, request, response }) {
      // show a loader
    },

    handleUploaded({ form, request, response }) {
      // update user avatar attribute
    },

    handleCompleted({ form, request, response }) {
      // close the loader
    },

    handleError({ message, type, context}) {
      if (type === 'upload') {
        const { request, response } = context
      }
    }
  },
}

🚀 There is an online demo:

Edit test-project

❤️ Sponsor me

Sponsor me

如果你喜欢我的项目并想支持它,点击这里 ❤️

Project supported by JetBrains

Many thanks to Jetbrains for kindly providing a license for me to work on this and other open-source projects.

License

MIT

More Repositories

1

pinyin

🇨🇳 基于词库的中文转拼音优质解决方案
PHP
4,296
star
2

share.js

一键分享到微博、QQ空间、QQ好友、微信、腾讯微博、豆瓣、Facebook、Twitter、Linkedin、Google+、点点等
JavaScript
3,691
star
3

easy-sms

📲 一款满足你的多种发送需求的短信发送组件
PHP
3,127
star
4

laravel-wechat

微信 SDK for Laravel, 基于 overtrue/wechat
PHP
2,865
star
5

socialite

Socialite is an OAuth2 Authentication tool. It is inspired by laravel/socialite, you can easily use it without Laravel.
PHP
1,294
star
6

laravel-lang

🌏 75 languages support for Laravel application.
PHP
1,271
star
7

laravel-follow

❤️ This package helps you to add user based follow system to your model.
PHP
1,183
star
8

api.yike.io

一刻社区后端 API 源码
PHP
1,021
star
9

phplint

🐛 A tool that can speed up linting of php files by running several lint processes at once.
PHP
981
star
10

yike.io

一刻社区前端源码
Vue
658
star
11

laravel-pinyin

🇨🇳 Chinese to Pinyin translator for Laravel 5 / Lumen
PHP
529
star
12

chinese-calendar

📅 中国农历(阴历)与阳历(公历)转换与查询工具
PHP
521
star
13

laravel-versionable

⏱️Make Laravel model versionable
PHP
510
star
14

laravel-filesystem-qiniu

A Qiniu Storage filesystem for Laravel
PHP
471
star
15

laravel-like

👍 User-like features for Laravel Application.
PHP
467
star
16

laravel-favorite

❤️ User favorite feature for Laravel Application.
PHP
422
star
17

laravel-query-logger

📝 A dev tool to log all queries for laravel application.
PHP
408
star
18

laravel-shopping-cart

🛒 Shopping cart for Laravel Application.
PHP
392
star
19

laravel-ueditor

UEditor integration for Laravel.
JavaScript
390
star
20

laravel-socialite

:octocat: Social OAuth Authentication for Laravel 5. drivers: facebook, github, google, linkedin, weibo, qq, wechat and douban
PHP
339
star
21

latest-laravel

【不再更新】这些东西本不应该存在。
Shell
282
star
22

weibo-dogs-killer

一段屏蔽 HWB(微博监督员) 的 js 小脚本
275
star
23

wisteria

Beautiful document tool for your project.
Blade
255
star
24

flysystem-qiniu

💾 Flysystem adapter for the Qiniu storage.
PHP
221
star
25

package-builder

📦 A composer package builder.
PHP
199
star
26

weather

🌈 基于高德开放平台接口的 PHP 天气信息组件。
PHP
173
star
27

laravel-subscribe

📧 User Subscribe/Unsubscribe features for Laravel Application.
PHP
170
star
28

yike

PHP
164
star
29

laravel-emoji

😄 This package assist you in getting started with emoji easily.
PHP
151
star
30

vscode-miniapp-helper

微信小程序开发助手 for VSCode
JavaScript
150
star
31

laravel-skeleton

Laravel Application skeleton for me.
PHP
142
star
32

yaf-skeleton

The Yaf testable skeleton and composer supported.
PHP
141
star
33

laravel-uploader

🌴 An upload component for Laravel.
PHP
135
star
34

http

🌵 A simple http client wrapper.
PHP
126
star
35

writor

基于 Laravel 4 开发的博客系统
JavaScript
125
star
36

pinyin-resources

汉字拼音相关参考资料
123
star
37

laravel-vote

⬆️ ⬇️ User vote system for Laravel Application.
PHP
108
star
38

validation

Laravel Validation 简化无依赖版
PHP
100
star
39

bootstrap-theme-slim

纤细风格的bootstrap主题
HTML
92
star
40

city.js

城市选择控件
92
star
41

laravel-payment

Omnipay ServiceProvider for Laravel.
PHP
91
star
42

laravel-passport-cache-token

Make laravel/passport token cacheable.
PHP
89
star
43

laravel-filesystem-cos

Tencent Cloud COS storage for Laravel based on overtrue/flysystem-cos.
PHP
89
star
44

php-opencc

中文简繁转换,支持词汇级别的转换、异体字转换和地区习惯用词转换(中国大陆、台湾、香港、日本新字体)。
PHP
75
star
45

blog

安正超博客
Less
74
star
46

flysystem-cos

💾 Flysystem adapter for the Qcloud COS storage.
PHP
74
star
47

rester

基于 Slim+Eloquent 的 RESTful API 框架
PHP
71
star
48

laravel-mail-aliyun

📧 Aliyun DrirectMail Transport for Laravel Application.
PHP
71
star
49

laravel-youzan

【停止维护】Youzan wrapper for Laravel
PHP
59
star
50

websocket

A PHP implementation of WebSocket.
PHP
56
star
51

laravel-options

Global options module for Laravel application.
PHP
51
star
52

laravel.xyz

Source code of https://laravel.xyz
Vue
50
star
53

json-viewer

A tool for make JSON view in browser.
JavaScript
49
star
54

building-with-tailwindcss

HTML
45
star
55

php-package

A PHP package template repository.
45
star
56

laravel-qcloud-content-audit

腾讯云内容安全(文字图片内容审核)服务
PHP
44
star
57

phpmd-rulesets

PHP_MD 规则
42
star
58

sketch-data-cn

为 Sketch 准备的模拟数据中文版,包含:中文姓名,手机号,省份,城市,地区,公司名,银行名,星期几,详情地址,邮编,邮箱,颜色,广告词等。
41
star
59

qcloud-cos-client

Tencent COS Client
PHP
40
star
60

validator.js

一个类似laravel的js验证模块.
JavaScript
39
star
61

translator

PHP多语言支持工具
PHP
38
star
62

laravel-payable

Payment system for Laravel.
PHP
36
star
63

laravel-package

Laravel package template
PHP
35
star
64

laravel-revaluation

Laravel 5 model revaluation helper.
PHP
31
star
65

laravel-easy-sms

overtrue/easy-sms service provider for Laravel.
PHP
26
star
66

laravel-saml

SAML toolkit for Laravel based on OneLogin's SAML PHP Toolkit.
PHP
21
star
67

sendcloud

SendCloud Mail SDK
PHP
20
star
68

laravel-sendcloud

SendCloud Mail SDK for Laravel.
PHP
20
star
69

latest-lumen

【不再更新】这些东西本不应该存在。
Shell
19
star
70

laravel-stateless-session

A lightweight middleware to make api routing session capable.
PHP
18
star
71

laravel-single-session

A plugin provide single session authentication for Laravel 5.
PHP
17
star
72

php-multi-process-runner

基于PHP拓展PCNTL的多进程执行工具
PHP
17
star
73

laravel-summernote

Summernote editor integration for Laravel 5.
JavaScript
16
star
74

laravel-passport-cache-client

Make laravel/passport client cacheable.
PHP
16
star
75

laravel-qcloud-federation-token

QCloud COS FederationToken generator for Laravel.
PHP
16
star
76

cuttle

📃 A multi-module log wrapper.
PHP
15
star
77

stuq-laravel-course

StuQ小班课|Laravel实战经验分享及PHP后端编程思想
PHP
13
star
78

laravel.so

Source Code of http://laravel.so (old)
PHP
13
star
79

double-array-trie

PHP
12
star
80

overtrue

https://overtrue.me
12
star
81

bash-color

Generate command line colorized text.
PHP
12
star
82

pinyin-dictionary-maker

📇 Dictionary make of overtrue/pinyin.
PHP
12
star
83

relocator.js

relocate images to fit image box
JavaScript
11
star
84

laravel-open-telemetry

This package provides a simple way to add OpenTelemetry to your Laravel application.
PHP
11
star
85

youzan

【不再维护】Youzan SDK.
PHP
10
star
86

wisteria-skeleton

The skeleton of Wisteria.
PHP
10
star
87

wp-cn-excerpt

wordpress中文摘要插件
PHP
10
star
88

laravel-custom-log

📃 Make Laravel Log great again.
PHP
9
star
89

laravel-qcloud-captcha

QCloud Captcha service validator for Laravel.
PHP
7
star
90

vue-avatar-cropper-demo

Created with CodeSandbox
Vue
7
star
91

string2pinyin.sinaapp.com

PHP
3
star
92

nuxt-dashboard

CSS
3
star
93

wp-auto-top

WordPress 返回顶部插件
PHP
2
star
94

redius.xyz

wip
2
star
95

overtrue.github.io

HTML
2
star
96

username-blacklist

PHP
2
star
97

pinyin.rs

2
star
98

easywechat-theme

Vue
2
star
99

dex-swap-test

JavaScript
1
star
100

phplint-test

PHP
1
star