mirror of
https://github.com/ksyasuda/dotfiles.git
synced 2026-03-21 18:11:27 -07:00
update skills
This commit is contained in:
96
.agents/skills/cloudflare-deploy/references/images/api.md
Normal file
96
.agents/skills/cloudflare-deploy/references/images/api.md
Normal file
@@ -0,0 +1,96 @@
|
||||
# API Reference
|
||||
|
||||
## Workers Binding API
|
||||
|
||||
```toml
|
||||
# wrangler.toml
|
||||
[images]
|
||||
binding = "IMAGES"
|
||||
```
|
||||
|
||||
### Transform Images
|
||||
|
||||
```typescript
|
||||
const imageResponse = await env.IMAGES
|
||||
.input(fileBuffer)
|
||||
.transform({ width: 800, height: 600, fit: "cover", quality: 85, format: "avif" })
|
||||
.output();
|
||||
return imageResponse.response();
|
||||
```
|
||||
|
||||
### Transform Options
|
||||
|
||||
```typescript
|
||||
interface TransformOptions {
|
||||
width?: number; height?: number;
|
||||
fit?: "scale-down" | "contain" | "cover" | "crop" | "pad";
|
||||
quality?: number; // 1-100
|
||||
format?: "avif" | "webp" | "jpeg" | "png";
|
||||
dpr?: number; // 1-3
|
||||
gravity?: "auto" | "left" | "right" | "top" | "bottom" | "face" | string;
|
||||
sharpen?: number; // 0-10
|
||||
blur?: number; // 1-250
|
||||
rotate?: 90 | 180 | 270;
|
||||
background?: string; // CSS color for pad
|
||||
metadata?: "none" | "copyright" | "keep";
|
||||
brightness?: number; contrast?: number; gamma?: number; // 0-2
|
||||
}
|
||||
```
|
||||
|
||||
### Draw/Watermark
|
||||
|
||||
```typescript
|
||||
await env.IMAGES.input(baseImage)
|
||||
.draw(env.IMAGES.input(watermark).transform({ width: 100 }), { top: 10, left: 10, opacity: 0.8 })
|
||||
.output();
|
||||
```
|
||||
|
||||
## REST API
|
||||
|
||||
### Upload Image
|
||||
|
||||
```bash
|
||||
curl -X POST https://api.cloudflare.com/client/v4/accounts/{account_id}/images/v1 \
|
||||
-H "Authorization: Bearer {token}" -F file=@image.jpg -F metadata='{"key":"value"}'
|
||||
```
|
||||
|
||||
### Other Operations
|
||||
|
||||
```bash
|
||||
GET /accounts/{account_id}/images/v1/{image_id} # Get details
|
||||
DELETE /accounts/{account_id}/images/v1/{image_id} # Delete
|
||||
GET /accounts/{account_id}/images/v1?page=1 # List
|
||||
```
|
||||
|
||||
## URL Transform API
|
||||
|
||||
```
|
||||
https://imagedelivery.net/{hash}/{id}/width=800,height=600,fit=cover,format=avif
|
||||
```
|
||||
|
||||
**Params:** `w=`, `h=`, `fit=`, `q=`, `f=`, `dpr=`, `gravity=`, `sharpen=`, `blur=`, `rotate=`, `background=`, `metadata=`
|
||||
|
||||
## Direct Creator Upload
|
||||
|
||||
```typescript
|
||||
// 1. Get upload URL (backend)
|
||||
const { result } = await fetch(
|
||||
`https://api.cloudflare.com/client/v4/accounts/${accountId}/images/v2/direct_upload`,
|
||||
{ method: 'POST', headers: { 'Authorization': `Bearer ${token}` },
|
||||
body: JSON.stringify({ requireSignedURLs: false }) }
|
||||
).then(r => r.json());
|
||||
|
||||
// 2. Client uploads to result.uploadURL
|
||||
const formData = new FormData();
|
||||
formData.append('file', file);
|
||||
await fetch(result.uploadURL, { method: 'POST', body: formData });
|
||||
```
|
||||
|
||||
## Error Codes
|
||||
|
||||
| Code | Message | Solution |
|
||||
|------|---------|----------|
|
||||
| 5400 | Invalid format | Use JPEG, PNG, GIF, WebP |
|
||||
| 5401 | Too large | Max 100MB |
|
||||
| 5403 | Invalid transform | Check params |
|
||||
| 9413 | Rate limit | Implement backoff |
|
||||
Reference in New Issue
Block a user