d3.js - 将带有背景图像的svg rect转换为黑白
问题描述
我正在使用 d3 / svg 创建运动队徽标的散点图,并且有兴趣将某些徽标制作成黑白。在这里(不要担心不遵循所有变量)是我绘制徽标的几行代码。
logoMarkers
.enter()
.append('rect')
.attr('transform', d => `translate(${(xScale(+d[xOption.value][xOption.objKey]) - 0.5 * logoRadius)}, ${(yScale(+d[yOption.value][yOption.objKey]) - 0.5 * logoRadius)})`)
.attr('x', 0).attr('y', 0)
.attr('height', logoRadius)
.attr('width', logoRadius)
.attr('fill', d => `url(#teamlogo-${d.teamId})`)
.attr('cursor', 'pointer')
.attr('opacity', d => this.props.focusTeam === 'none' ? 1 : (d.teamId === this.props.focusTeam ? 1 : 0.20));
...此代码使除 Duke 徽标之外的所有徽标都具有 0.20 的不透明度,但是我也想将非 Duke 徽标设置为黑色和白色。这可能吗?我宁愿不必在我从中提取图像的 s3 存储桶中实际保存黑白版本的徽标,而是更愿意在我的代码中以某种方式简单地将图像转换为黑白版本。
这可能吗?提前致谢!!
解决方案
在您的页面某处添加以下过滤器定义。
<filter id="saturate">
<feColorMatrix type="saturate" values="0"/>
</filter>
然后将以下内容添加到非 Duke 元素中。
.attr('filter', 'url(#saturate)')
例子:
<svg>
<defs>
<filter id="saturate">
<feColorMatrix type="saturate" values="0"/>
</filter>
</defs>
<circle cx="75" cy="75" r="75" fill="red" filter="url(#saturate)"/>
<circle cx="150" cy="75" r="75" fill="green" filter="url(#saturate)"/>
<circle cx="225" cy="75" r="75" fill="blue" filter="url(#saturate)"/>
</svg>
推荐阅读
- spring - 升级:spring 框架 5.2.X
- swift - 如何在 React Native swift 模块中呈现本机 UIViewController
- sql - 计算给定ID的char出现次数
- color-scheme - 如何添加偏好颜色方案媒体查询
- mysql - MySQL 大量磁盘活动,即使没有运行查询
- reactjs - react-admin中有两个字段的自动完成输入?
- ggplot2 - 将带有描述性注释的框添加到 ggplot2 中的 y 轴
- python - Python beautifulsoup 加载更多数据
- c++ - C++ 已用时间 = 0
- angular - Angular Universal无法读取未定义的属性“某些”