是否可以通过 css 或者 js 改变 svg 中引入 png 图片的颜色?

2016-12-18 15:12:40 +08:00
 lifesimple

PNG 格式小图标的 CSS 任意颜色赋色技术

我现在的问题在于我操作的元素是 svg ,即图片的引入是通过 svg image 元素 xlink:href 来引入图片的。 尝试 demo

在 MDN 上查了关于 svg 滤镜 filter 的相关 API ,和上述 drop-shadow 相似的 api 是 svg filter 中的feOffset但是这个属性只是提供偏移。 w3cschools 上关于这个“ Drop shadows ”的一些 demo,但我觉得 svg filter 中的 feOffset 和 css3 filter 滤镜中 drop-shadow 的功能还是差一点(吐槽一下 w3cschool 这样的描述)。 给的 demo 是几个 filter 效果的组合使用。

PNG 格式小图标的 CSS 任意颜色赋色技术中利用了 drop-shadow"真正投影"(相对于 box-shadow 仅仅是盒投影),通过定位方式隐去真是图片显示改变颜色的投影实现。 看了一遍 svg 中 filter 相关 api ,没有发现相关能改变投影颜色的。

我感觉按这种方式想去改变 svg 中引入 png 图片的颜色是行不通的。

不知道还有什么其他的方案。如果你有什么好的想法,有空的话,求指点一二,谢谢。

ps: 吐槽下需求,需求是想 用户上传 png 图片,一些交互操作改变图片的颜色。

4114 次点击
所在节点    程序员
3 条回复
learnshare
2016-12-18 16:51:00 +08:00
引入 canvas 相关的库,就可以做类似的事情了吧
比如 https://github.com/AlloyTeam/AlloyImage
lifesimple
2016-12-18 17:09:26 +08:00
@learnshare 谢谢 这是一个思路 但就现在的项目应该使用不了 AlloyImage 因为是 svg 的东西,再者引入一个专门的图像处理库太重了
learnshare
2016-12-18 17:19:32 +08:00
@lifesimple 不是因为 SVG 用不了 AlloyImage

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/328447

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX