Loading repository data…
Loading repository data…
zhanziyang / repository
A simple straightforward customizable mobile-friendly image cropper for Vue 2.0.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
A simple straightforward customizable mobile-friendly image cropper for Vue 2.0.
<croppa v-model="myCroppa"
:width="400"
:height="400"
:canvas-color="'default'"
:placeholder="'Choose an image'"
:placeholder-font-size="0"
:placeholder-color="'default'"
:accept="'image/*'"
:file-size-limit="0"
:quality="2"
:zoom-speed="3"
:disabled="false"
:disable-drag-and-drop="false"
:disable-click-to-choose="false"
:disable-drag-to-move="false"
:disable-scroll-to-zoom="false"
:disable-rotation="false"
:prevent-white-space="false"
:reverse-scroll-to-zoom="false"
:show-remove-button="true"
:remove-button-color="'red'"
:remove-button-size="0"
:initial-image="'path/to/initial-image.png'"
@init="handleCroppaInit"
@file-choose="handleCroppaFileChoose"
@file-size-exceed="handleCroppaFileSizeExceed"
@file-type-mismatch="handleCroppaFileTypeMismatch"
@new-image-drawn="handleNewImage"
@image-remove="handleImageRemove"
@move="handleCroppaMove"
@zoom="handleCroppaZoom"></croppa>
NOTE: This is an almost-full-use example. Usually you don't need to specify so many props, because they all have default values. Most simply, you can even do:
<croppa v-model="myCroppa"></croppa>
this.myCroppa.remove();
this.myCroppa.zoomIn();
alert(this.myCroppa.generateDataUrl());
Using build tools:
npm install --save vue-croppa
import Vue from 'vue';
import Croppa from 'vue-croppa';
Vue.use(Croppa);
// If your build tool supports css module
import 'vue-croppa/dist/vue-croppa.css';
Not using build tools:
<link href="https://unpkg.com/vue-croppa/dist/vue-croppa.min.css" rel="stylesheet" type="text/css">
<script src="https://unpkg.com/vue-croppa/dist/vue-croppa.min.js"></script>
Vue.use(Croppa);
<croppa v-model="myCroppa"></croppa>
new Vue({
// ... other vm options omitted
data: {
myCroppa: {}
},
methods: {
uploadCroppedImage() {
this.myCroppa.generateBlob(
blob => {
// write code to upload the cropped image file (a file is a blob)
},
'image/jpeg',
0.8
); // 80% compressed jpeg file
}
}
});
Live example: https://jsfiddle.net/jdcvpvty/2/
import Vue from 'vue';
import Croppa from 'vue-croppa';
Vue.use(Croppa, { componentName: 'my-image-cropper' });
<my-image-cropper v-model="myCroppa"></my-image-cropper>
Croppa.component. This is useful when you want to register the component by yourself manually.Vue.component('croppa', Croppa.component);
// Register async component (Webpack 2 + ES2015 Example). More about async component: https://vuejs.org/v2/guide/components.html#Async-Components
Vue.component('croppa', () => import(Croppa.component));
ref both point to the same thing - the component itself. So you don't need to set v-model anymore if you have a ref on the component.<croppa ref="myCroppa"></croppa>
this.$refs.myCroppa.chooseFile();
this.$refs.myCroppa.generateDataUrl();
// ...
A two-way binding prop. It syncs an object from within the croppa component with a data in parent. We can use this object to call useful methods (Check out "Methods" section). Since v1.0.0, you don't need this anymore, the ref on component can also be used to call methods.
objectDisplay width of the preview container.
number200val > 0Display height of the preview container.
number200val > 0Placeholder text of the preview container. It shows up when there is no image.
string'Choose an image'Placeholder text color.
CanvasRenderingContext2D.fillStyle accepts.'#606060'Placeholder text font size in pixel. When set to 0, the font size will be ajust automatically so that the whole placehoder only takes up 2/3 of the container's width.
number0Initial background color and white space color if there is an image.
CanvasRenderingContext2D.fillStyle accepts.'#e6e6e6'; after v0.2.0 - 'transparent'Specifies how many times larger the actual image is than the container's display size.
number2val > 0Specifies how fast the zoom is reacting to scroll gestures. Default to level 3.
number3val > 0Limits the types of files that users can choose.
accept attribute of HTML input element takes.Limits the byte size of file that users can choose. If set to 0, then no limit.
number0Disables user interaction.
booleanfalseDisables the default "drag and drop a file" user interaction. You can instead trigger the file chooser window programmatically by "click to choose" functionality or invoking chooseFile() method.
booleanfalseDisables the default "click to choose a file" ("tab" on mobile) user interaction. You can instead trigger the file chooser window programmatically by "drag and drop" functionality or invoking chooseFile() method.
booleanfalseDisables the default "drag to move" user interaction. You can instead move the image programmatically by invoking moveUpwards() / moveDownwards() / moveLeftwards() / moveRightwards() methods.
booleanfalseDisables the default "scroll to zoom" user interaction. You can instead zoom the image programmatically by invoking zoomIn() / zoomOut() methods.
booleanfalseDisables the default "pinch with two fingers to zoom" user interaction on mobile. You can instead zoom the image programmatically by invoking zoomIn() / zoomOut() methods.
booleanfalse(v0.2.0+) Rotation methods won't work if this is set to true
booleanfalseDeprecated Please use reverse-scroll-to-zoom instead.
Reverses the zoom-in/zoom-out direction when scrolling.
booleanfalseReverses the zoom-in/zoom-out direction when scrolling.
booleanfalsePrevents revealing background white space when moving or zooming the image.
booleanfalseSpecifies whether to show the built-in remove-button. You can change the button's color and size using the following two props. If you still find it ugly, hide it and use the remove() method to implement your own trigger.
booleantrueChanges the default color of the remove-button. Accepts any css color format.
string'red'Specifies the remove-button's width and height (they are equal). If set to 0, then it use the default size.
number(v0.1.0+) Set initial image. You can pass a string as the url or an Image object (HTMLImageElement instance). This is an alternative way to set initial image besides using slot. Useful when you want to set cross origin image as initial image.
string or object (HTMLImageElement instance)undefined(v0.2.0+) works similar to css's background-size. It specifies the image's size when it is first loaded on croppa. contain and natural won't work if prevent-white-space is set to true.
string'cover''cover', 'contain', 'natural'(v0.2.0+) works similar to css's background-position. It specifies the image's position relative to croppa container when it is first loaded.
string'center''center' (default value)'top''bottom''left''right''top left', 'right top' etc.)'30% 40%' (similar to background-position in css)(v1.0.0+) to pass attributes to the hidden input[type=file] element.
<croppa :input-attrs="{capture: true, class: 'file-input'}"></croppa>
(v1.1.0+) show default loading spinner at the bottom right corner of the container when image is loading (will but not yet be drawn on canvas).
booleanfalse(v1.1.0+) loading spinner's size in px.
number20(v1.1.0+) loading spinner's color in css color value formats.
string'#606060'(v1.1.4+) Replace current image on drag and drop.
booleanfalse (By default you need to remove the current image to drop a new one)(1.2.0) Switch to passive mode. Croppa in passive mode will sync state with another croppa if they v-model the same object. Also it will not have self-control - user can't manipulate image on passive croppa. This is useful as a preview component.
These states will be synced:
[
'imgData',
'img',
'imgSet',
'originalImage',
'naturalHeight',
'naturalWidth',
'orientation',
'scaleRatio'
];
booleanfalse(1.2.0) Set rounded corders to image. Note that this has effect on the output image. Note that it only works when prevent-white-space is true. (Demo)
number or string0\(1.3.0) If it is set to true, width and height will not work. Instead, croppa will adjust itself to it's container(.croppa-container)'s size. It's useful to make croppa's dimension responsive.
booleanfalse(1.3.1) If it is set to true, you can choose a video file. If the video is support