Skip to content

PhotoCropTool

qxs-photo-crop-tool@qxs-bns/components 里的图片裁剪组件,适合上传前封面裁剪、头像裁剪、活动海报截取这类需要先拿到 File 再提交接口的场景。

基础用法

loading
ts
import '@qxs-bns/components/photo-crop-tool'

如果你已经全量引入:

ts
import '@qxs-bns/components'

使用说明

loading
  • qxs-photo-crop-tool 的图片输入不是字符串 URL,而是宿主直接传入的 File
  • zoom-type="fixed" 会锁定 aspect-ratiozoom-type="free" 允许自由拖拽宽高。
  • 实例方法 crop() 返回 Promise<File | null>resize() 会重置裁剪框。

常见场景

loading

宿主接入示例

loading

API

属性

NameDescriptionTypeDefault
imgFile待裁剪图片文件。只支持通过 DOM property 传入 FileFile | nullnull
aspect-ratio裁剪框宽高比,格式如 16 / 91 / 1string'16 / 9'
default-width裁剪框默认宽度number320
default-height裁剪框默认高度number180
zoom-type裁剪框缩放模式'fixed' | 'free''fixed'

方法

NameDescriptionReturn
crop()生成裁剪后的 PNG 文件Promise<File | null>
resize()重置裁剪框到默认尺寸和居中位置void

事件

NameDescription
-qxs-photo-crop-tool 不额外抛出业务事件

CSS Parts

PartDescription
container外层裁剪容器
image图片预览层
crop-box裁剪框本体
handle四角拖拽控制点

常见问题

为什么 imgFile 不是字符串 URL?

因为这个组件的目标是“上传前裁剪”,最终要返回一个新的 File 再交给宿主上传。
如果你的数据源一开始只有 URL,先把它转成 Blob / File 再传给组件会更稳定。

Vue 模板里为什么推荐写 :img-file.prop

imgFile 是对象属性,不是 HTML attribute。
在 Vue 里用 .prop 可以明确告诉编译器这是往 Custom Element 实例上写 File

相关文档

PhotoCropTool has loaded