Files
SnapOtter/apps/docs/tools/image/crop.md
T
SnapOtterandGitHub f858c4cea0 feat: clearer, disambiguated tool names across all surfaces (#520)
Renames 18 ambiguous or hard-to-search tool names so image tools self-qualify like the other modalities ("Compress" becomes "Compress Image"), and cleans up a few awkward names. Propagated across search (constants.ts), display (en.ts + 20 locales), the OpenAPI base spec + 20 locale specs, and the docs tool-page headings in 21 languages. Removes the duplicate "Normalize Audio" summary shared by the video and audio endpoints. Tool ids and routes are unchanged, so no API paths or bookmarks break.
2026-07-15 21:55:51 +08:00

60 lines
2.0 KiB
Markdown

---
description: Crop images by specifying a region with position and dimensions.
---
# Crop Image {#crop}
Crop images by defining a rectangular region using position and size. Supports both pixel and percentage units.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/image/crop`
Accepts multipart form data with an image file and a JSON `settings` field.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| left | number | Yes | - | X offset of the crop region (from left edge) |
| top | number | Yes | - | Y offset of the crop region (from top edge) |
| width | number | Yes | - | Width of the crop region |
| height | number | Yes | - | Height of the crop region |
| unit | string | No | `"px"` | Unit for the values: `px` or `percent` |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/crop \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@photo.jpg" \
-F 'settings={"left": 100, "top": 50, "width": 800, "height": 600}'
```
Crop using percentage values:
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/crop \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@photo.jpg" \
-F 'settings={"left": 10, "top": 10, "width": 80, "height": 80, "unit": "percent"}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 1200000
}
```
## Notes {#notes}
- The crop region must fit within the image boundaries. If the region extends beyond the image, the request will fail.
- When using `percent` unit, values represent percentages of the image dimensions (e.g. `left: 10` means 10% from the left edge).
- Output format matches the input format.
- EXIF orientation is auto-applied before cropping, so coordinates correspond to the visually correct orientation.