# ImgCropper
Image cropping component, used for image cropping, supporting drag, zoom, rotation, and other operations.
## Basic Usage
The image cropping component needs to bind `v-model` to control the component's display and hide, and control the displayed image resource through the `img-src` property. After entering the component, you can perform operations such as dragging, two-finger zooming, rotating, etc., and listen to the `confirm` event to get the cropping result.
> *Note: It is recommended to use the image cropping component in a new page, keep `show` as true, and return to the previous page after cropping is completed.*
```html
Click to upload avatar
```
```typescript
const src = ref('')
const imgSrc = ref('')
const show = ref(false)
function upload() {
uni.chooseImage({
count: 1,
success: (res) => {
const tempFilePaths = res.tempFilePaths[0]
src.value = tempFilePaths
show.value = true
}
})
}
function handleConfirm(event) {
const { tempFilePath } = event
imgSrc.value = tempFilePath
}
function imgLoaderror(res) {
console.log('Loading failed', res)
}
function imgLoaded(res) {
console.log('Loading successful', res)
}
function handleCancel(event) {
console.log('Cancel', event)
}
```
## Custom Cropping Ratio
You can set the aspect ratio of the cropping box through the `aspect-ratio` property, in the format of `width:height`.
### 3:2 Suitable for Photography
```html
```
### 16:9 Cinema Ratio
```html
```
### 16:10 Wide and Stylish
The 16:10 display ratio is very suitable for displaying landscape photos or movie posters and other widescreen content.
```html
```
## Upload After Cropping
Combined with `useUpload`, you can implement automatic image upload after cropping is completed.
```html
```
```typescript
import { ref } from 'vue'
import { useUpload, useToast } from '@/uni_modules/wot-design-uni'
import { type UploadFileItem } from '@/uni_modules/wot-design-uni/components/wd-upload/types'
const { startUpload, UPLOAD_STATUS } = useUpload()
const { show: showToast } = useToast()
const show = ref(false)
const src = ref('')
const imgSrc = ref('')
async function handleConfirmUpload(event) {
const { tempFilePath } = event
// Build upload file object
const file: UploadFileItem = {
url: tempFilePath,
status: UPLOAD_STATUS.PENDING,
percent: 0,
uid: new Date().getTime()
}
try {
// Start upload
await startUpload(file, {
action: 'https://your-upload-url',
onSuccess() {
imgSrc.value = tempFilePath
showToast({
msg: 'Upload successful'
})
},
onError() {
showToast({
msg: 'Upload failed'
})
},
onProgress(res) {
console.log('Upload progress:', res.progress)
}
})
} catch (error) {
console.error('Upload failed:', error)
}
}
```
## Attributes
| Parameter | Description | Type | Options | Default | Version |
|-----------|-------------|------|----------|---------|----------|
| v-model | Open image cropping component | boolean | - | false | - |
| img-src | Image resource link | string | - | - | - |
| img-width | Initial width of screenshot preview image; `1. Set width without height for proportional scaling; 2. If neither is set, preview image size will scale proportionally based on crop box size and lock edges;`; string type only supports % unit, number type unit is px | number / string | - | - | - |
| img-height | Initial height of screenshot preview image; `1. Set height without width for proportional scaling; 2. If neither is set, preview image size will scale proportionally based on crop box size and lock edges;`; string type only supports % unit, number type unit is px | number / string | - | - | - |
| disabled-rotate | Disable image rotation | boolean | - | false | - |
| export-scale | Set exported image size | number | - | 2 | - |
| max-scale | Maximum zoom scale | number | - | 3 | - |
| cancel-button-text | Cancel button text | string | - | Cancel | - |
| confirm-button-text | Confirm button text | string | - | Complete | - |
| quality | Generated image quality [wx.canvasToTempFilePath property introduction](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasToTempFilePath.html#%E5%8F%82%E6%95%B0) | number | 0/1 | 1 | - |
| file-type | Target file type, [wx.canvasToTempFilePath property introduction](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasToTempFilePath.html#%E5%8F%82%E6%95%B0) | string | - | png | - |
| aspect-ratio | Crop box aspect ratio, format is width:height | string | - | 1:1 | 1.9.0 |
## Events
| Event Name | Description | Parameters | Version |
|------------|-------------|------------|----------|
| confirm | Triggered when screenshot is completed | `{tempFilePath, width, height}` are the temporary path (local path), generated image width, and generated image height respectively | - |
| cancel | Triggered when screenshot is cancelled | - | - |
| imgloaderror | Triggered when image loading fails | `{err}` | - |
| imgloaded | Triggered when image loading completes | `{res}` | - |
## Methods
Externally exposed functions
| Method Name | Description | Parameters | Version |
|------------|-------------|------------|----------|
| setRoate | Set image rotation angle | deg (set rotation angle) | - |
| resetImg | Reset image angle, zoom, and position | - | - |
## External Classes
| Class Name | Description | Version |
|------------|-------------|----------|
| custom-class | Custom style class | - |