如何将canvas的阶段保存为JSON格式?

How to save stage of canvas in JSON format?

在我当前的项目中,我想用 React 和 React-konva 构建类似 Image Editor 的东西。

首先,我渲染了一个带有一些道具和默认可拖动星星的 konva 舞台。

在下一步中,我们可以使用来自 react-konva 的 Image 为我们的舞台设置背景图像。

<Stage width={konvaWidth} height={height - 150} className={classes.canvas} onClick={test}>
        <Layer>
          {image && bg && <Image
            x={0}
            y={0}
            image={bg}
            scaleX={0.35}
            scaleY={0.35}
            ref={node => {
              imageRef = node;
            }}
          />}
          <Text text="Try to drag a star" />
          {[...Array(10)].map((_, i) => (
            <Star
              key={i}
              x={Math.random() * window.innerWidth}
              y={Math.random() * window.innerHeight}
              numPoints={5}
              innerRadius={20}
              outerRadius={40}
              fill="#89b717"
              opacity={0.8}
              draggable
              rotation={Math.random() * 180}
              shadowColor="black"
              shadowBlur={10}
              shadowOpacity={0.6}
              onDragStart={handleDragStart}
              onDragEnd={handleDragEnd}
            />
          ))}
        </Layer>
      </Stage>

下一步,也是最后一步。

我们可以将 konva 阶段保存为 json 格式吗?

Konva API 有 toJSON() 方法。您可以将任何节点(如舞台)转换为 json.

https://konvajs.org/docs/data_and_serialization/Serialize_a_Stage.html

对于更复杂的情况(比如你有图像、滤镜):https://konvajs.org/docs/data_and_serialization/Best_Practices.html

但是如果您使用的是 React,我不建议使用 Konva 方法来序列化 canvas 渲染。

在你的反应中,你必须有你的应用程序的状态。 In 可以是任何状态库(mobx、redux)或只是 React 的 setStateuseState 或其他任何东西。通常,该状态很容易序列化为 JSON.