gpt4 book ai didi

javascript - 在 React Konva 中使用 globalCompositeOperation 来屏蔽形状组

转载 作者:行者123 更新时间:2023-11-30 20:13:27 25 4
gpt4 key购买 nike

我的项目使用 React Konva ( https://github.com/konvajs/react-konva )

我正在尝试将多个形状绘制到一个 Group 中,并用它来遮盖“下面”的图像。

当我的组件使用 globalCompositeOperation 绘制单个形状时,它会产生预期的结果。这是代码:

render() {
return (

<Group >
<Group>
<Image
image={this.state.image}
ref={node => { this.image = node; }}
/>
<Group>
<Rect fill={"#555555"}
width={200} height={200}
x={100} y={100}
globalCompositeOperation={"destination-in"}
/>
</Group>
</Group>
</Group>
)

}

结果: enter image description here

请注意图像是如何被裁剪成矩形的,从而显示下面的文本层。

但是,只要形状在组内移动,并且我在那里应用 globalCompositeOperation,就不会发生 mask 。代码的相关部分:

<Group>
<Image
image={this.state.image}
ref={node => { this.image = node; }}
/>
<Group globalCompositeOperation={"destination-in"}>
<Rect fill={"#555555"}
width={200} height={200}
x={100} y={100}
/>
</Group>
</Group>

结果:

enter image description here

这很奇怪,因为 Konva 文档表明 Group 实际上有一个属性 globalCompositeOperation(参见 https://konvajs.github.io/api/Konva.Group.html#globalCompositeOperation__anchor)。

知道如何让 (React) Konva 在 Group 级别而不只是在 Shape 级别应用 globalCompositeOperation 吗?

最佳答案

啊,刚刚找到解决方案。

在应用globalCompositeOperation 之前,似乎需要缓存整个Group。我假设这意味着该组首先被展平/栅格化。

在我的 React 组件中,我实现了如下解决方案:

 import React from 'react';
import { Image, Group, Rect } from 'react-konva';

class CutoutImage extends React.Component {
state = {
image: null,
mask: null
}

componentDidMount() {
const image = new window.Image();
image.src = "/images/frisbee.jpg";
image.onload = () => {
this.setState({ image });
}
}

componentDidUpdate() {
if (this.image) {
this.image.cache();
}
if (this.mask) {
this.mask.cache();
}
}

render() {
return (

<Group>
<Image
image={this.state.image}
ref={node => { this.image = node; }}
/>
<Group
globalCompositeOperation={"destination-in"}
ref={node => {this.mask = node; }}
>
<Rect fill={"#555555"}
width={200} height={200}
x={100} y={100}
/>
<Rect fill={"#dddddd"}
width={200} height={200}
x={300} y={300}
/>
<Rect fill={"#dddddd"}
width={200} height={100}
x={150} y={350}
/>
</Group>
</Group>
)

}

}
export default CutoutImage;

结果:

enter image description here

关于javascript - 在 React Konva 中使用 globalCompositeOperation 来屏蔽形状组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52169662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com