Cropper

图片裁切:容器 + 底图 + 遮罩 + 裁切框(含裁切视图 + 8 resize 角点)。几何逻辑委托 @chenzy-design/core 的 CropperFoundation(框架无关,纯原生 DOM/canvas,不引第三方)。支持 rect/round/roundRect 三形状、aspectRatio 比例约束、8 角点自由/约束 resize、裁切框拖拽、遮罩拖拽移动底图、滚轮以指针为中心缩放(min/max/step 钳制)、受控 rotate/zoom、容器 resize 重排、preview 实时预览、getCropperCanvas() ref 取裁切结果 canvas。受控 aspectRatio/rotate/zoom 只读不回写,onZoomChange 仅通知。

设计文档

如何引入

import { Cropper } from '@chenzy-design/svelte';

基础用法

传入 src;shape 切换 rect / round / roundRect;getCropperCanvas 取结果。

自定义裁切框比例

aspectRatio 固定裁切框比例(此处 3:4),拖动时以此比例变化。

受控旋转 / 缩放

rotate、zoom 受控旋转缩放,onZoomChange 回传最新缩放值。

旋转
缩放

裁切框设置

cropperBoxStyle 自定义裁切框样式,showResizeBox 控制调整块显隐。

展示调整块

实时预览裁切效果

preview 指定预览容器,裁切态变化时实时渲染预览。

旋转
缩放
实时预览

API 参考

Cropper

Props

属性说明类型默认值
src待裁切图片地址stringundefined
shape裁切框形状;round 仅渲染 4 个边中点角点并圆形裁切'rect'|'round'|'roundRect''rect'
aspectRatio受控裁切比例(w/h);设置后角点 resize 走比例约束(只读不回写)numberundefined
defaultAspectRatio图片加载时裁切框初始比例(仅 aspectRatio 未设时生效)number1
rotate受控旋转角度(deg),变化经 core 重算图片中心(只读不回写)number0
zoom受控缩放;图片加载后先做适配缩放,此值在其基础上再缩放(只读不回写)number1
minZoom滚轮缩放下限number0.1
maxZoom滚轮缩放上限number3
zoomStep每次滚轮缩放步长number0.1
showResizeBox是否显示裁切框 resize 角点booleantrue
cropperBoxStyle裁切框附加内联样式stringundefined
cropperBoxClassName裁切框附加类名stringundefined
fill裁切结果中非图片区域的填充色string'rgba(0, 0, 0, 0)'
preview返回预览容器元素;提供后实时渲染裁切预览() => HTMLElement | null | undefinedundefined
imgProps透传给底图 <img> 的属性Record<string, unknown>undefined
onZoomChange缩放变化回调(zoom: number) => voidundefined
ariaLabel容器 aria-label(未设走 locale Cropper.container)stringundefined
class容器附加类名stringundefined
style容器附加内联样式stringundefined

Events

事件载荷说明
onZoomChange滚轮缩放导致 zoom 变化时触发

Methods

属性类型说明
getCropperCanvas按当前裁切框/图片/rotate/zoom 生成裁切结果 canvas(HTMLCanvasElement);需真实 canvas 2D 上下文

Accessibility

  • 容器 role=group + aria-label(走 locale Cropper.container 或 ariaLabel);底图/裁切视图 img 为装饰(alt="");角点/遮罩/裁切框 role=presentation,交互经鼠标/滚轮(对齐 Semi 原生实现,无键盘 resize)。

设计变量

变量默认值用法
--cd-cropper-box-outline-color var(--cd-color-primary)裁切框 outline 颜色
--cd-cropper-corner-bg var(--cd-color-primary)裁切框 8 角点填充色(品牌色,对齐 Semi $color-cropper_box_corner-bg)
--cd-cropper-mask-bg var(--cd-color-overlay-bg)裁切框外遮罩层背景色(半透明暗色)