You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义Tui Image Editor切换矩形/圆形绘图模式异常求助

自定义TUI Image Editor切换绘图形状失效问题求助

自定义TUI Image Editor时,仅需提供矩形和圆形两种绘图形状。目前单个形状绘图功能正常,但切换形状时,始终只会绘制首次选择的形状——比如先选圆形绘图,之后再选矩形,画出来的还是圆形。

试过编写onAddCircle与onAddRectangle函数及对应触发按钮,尝试过用不存在的clearDrawingShape方法,也试过会清除已绘图形的clearObjects方法,都没解决问题。查官方文档没找到清除形状缓存的方法,特此求助。

相关代码

圆形绘图函数

const onAddCircle = () => {
  imageEditorRef.current.startDrawingMode('SHAPE');
  if (imageEditorRef.current.getDrawingMode() !== 'SHAPE') {
    const { height } = imageEditorRef.current.getCanvasSize();
    imageEditorRef.current.startDrawingMode('SHAPE');
    imageEditorRef.current.setDrawingShape('circle', {
      fill: 'transparent',
      stroke: COLOR_STATUS_ORANGE,
      strokeWidth: height / 100,
      isRegular: true,
    });
  }
};

矩形绘图函数

const onAddRectangle = () => {
  if (imageEditorRef.current.getDrawingMode() !== 'SHAPE') {
    const { height } = imageEditorRef.current.getCanvasSize();
    imageEditorRef.current.startDrawingMode('SHAPE');
    imageEditorRef.current.clearObjects();
    imageEditorRef.current.setDrawingShape('rect', {
      fill: 'transparent',
      stroke: COLOR_STATUS_ORANGE,
      strokeWidth: height / 100,
      isRegular: true,
    });
  }
};

触发按钮

<button onClick={onAddCircle} color="green" />
<button onClick={onAddRectangle} color="red" />

解决方案

问题出在函数的判断逻辑上:当已处于SHAPE绘图模式时,原代码不会执行setDrawingShape更新形状类型,导致切换失效;同时onAddCircle存在冗余的startDrawingMode调用,onAddRectangle的clearObjects会误删已绘图形。

修改后的函数如下:

const onAddCircle = () => {
  const { height } = imageEditorRef.current.getCanvasSize();
  // 启动绘图模式(已启动时调用无副作用)
  imageEditorRef.current.startDrawingMode('SHAPE');
  // 直接设置圆形参数,覆盖原有形状配置
  imageEditorRef.current.setDrawingShape('circle', {
    fill: 'transparent',
    stroke: COLOR_STATUS_ORANGE,
    strokeWidth: height / 100,
    isRegular: true,
  });
};

const onAddRectangle = () => {
  const { height } = imageEditorRef.current.getCanvasSize();
  imageEditorRef.current.startDrawingMode('SHAPE');
  // 移除clearObjects,保留已绘图形
  imageEditorRef.current.setDrawingShape('rect', {
    fill: 'transparent',
    stroke: COLOR_STATUS_ORANGE,
    strokeWidth: height / 100,
    isRegular: true,
  });
};

核心逻辑:TUI Image Editor的setDrawingShape支持直接覆盖当前形状配置,无需先退出绘图模式。删除多余的判断条件后,每次点击按钮都会强制更新形状参数,解决切换失效问题。

内容的提问来源于stack exchange,提问作者Faziki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:55:28