如何更改 base64 格式的 svg img 的颜色?

2024-01-08

我有一个 Svg img ,其中包含base64格式并尝试更改其颜色。有人知道如何执行此操作吗?我发现了一些关于<path>元素,但要注意以下事实:svgimg 位于base64字符串我不知道如何使用它。谁能帮助我或指出我正确的方向?

<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iNS4wIC0xMC4wIDEwMC4wIDEzNS4wIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIiBoZWlnaHQ9IjEwMHB4IiB3aWR0aD0iMTAwcHgiPgo8cGF0aCBpZD0icGF0aDE5ODNfM18iIGQ9Ik01MC4xLDQuOXY3LjRjMCwwLDAsMC0wLjIsMGMtMC4xLDAtMC40LDAuMi0wLjQsMC40YzAsMC4yLDAsNS4xLDAsNS4zYzAsMC4yLTAuMiwwLjItMC4yLDAuNCAgYzAsMC4yLDAsNC42LDAsNC44cy0wLjIsMC4yLTAuMiwwLjRjMCwwLjIsMCwxLjcsMCwxLjdsLTEuMywzLjZjMCwwLTAuNSwwLTAuNywwYy0wLjIsMC0wLjQsMC4yLTAuNCwwLjRjMCwwLjIsMCwwLjksMCwwLjkgIHMtMC40LDAtMC41LDBzLTAuNCwwLjItMC40LDAuNGMwLDAuMiwwLDUuMSwwLDUuMXMtMC40LDAtMC41LDBjLTAuMiwwLTAuNCwwLjItMC40LDAuNGMwLDAuMiwwLDYsMCw2LjJjMCwwLjMtMC42LDAuNC0wLjYsMC42ICBjMCwwLjIsMCwzMCwwLDMwcy0wLjcsMC0wLjksMGMtMC4yLDAtMC40LDAuMi0wLjQsMC40YzAsMC4yLDAsNi42LDAsNi42cy0xLjgsMC0yLDBjLTAuMiwwLTAuNCwwLjItMC40LDAuNGMwLDAuMiwwLDkuOSwwLDkuOSAgcy0yLjYsMC0yLjgsMHMtMC40LDAuMi0wLjQsMC40YzAsMC4yLDAsNC41LDAsNC41aDI1LjljMCwwLDAtNC4zLDAtNC41YzAtMC4yLTAuMi0wLjQtMC40LTAuNGMtMC4yLDAtMi44LDAtMi44LDBzMC05LjcsMC05LjkgIGMwLTAuMi0wLjItMC40LTAuNC0wLjRjLTAuMiwwLTIsMC0yLDBzMC02LjQsMC02LjZjMC0wLjItMC4yLTAuNC0wLjQtMC40Yy0wLjIsMC0wLjksMC0wLjksMHMwLTI5LjgsMC0zMGMwLTAuMi0wLjYtMC4zLTAuNi0wLjYgIGMwLTAuMywwLTYuMSwwLTYuMmMwLTAuMi0wLjItMC40LTAuNC0wLjRjLTAuMiwwLTAuNSwwLTAuNSwwczAtNSwwLTUuMWMwLTAuMi0wLjItMC40LTAuNC0wLjRjLTAuMiwwLTAuNiwwLTAuNiwwczAtMC43LDAtMC45ICBjMC0wLjItMC4yLTAuNC0wLjQtMC40Yy0wLjIsMC0wLjcsMC0wLjcsMGwtMS4zLTMuNmMwLDAsMC0xLjUsMC0xLjdjMC0wLjItMC4yLTAuMi0wLjItMC40czAtNC42LDAtNC44YzAtMC4yLTAuMi0wLjItMC4yLTAuNCAgYzAtMC4yLDAtNS4xLDAtNS4zYzAtMC4yLTAuMi0wLjQtMC40LTAuNHMtMC4yLDAtMC4yLDBWNC45aC0wLjRoLTAuMUg1MC4xeiIvPgo8dGV4dCB4PSIwLjAiIHk9IjExNy41IiBmb250LXNpemU9IjUuMCIgZm9udC13ZWlnaHQ9ImJvbGQiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EgTmV1ZSwgSGVsdmV0aWNhLCBBcmlhbC1Vbmljb2RlLCBBcmlhbCwgU2Fucy1zZXJpZiIgZmlsbD0iIzAwMDAwMCI+Q3JlYXRlZCBieSBMYXphciBOaWtvbGljPC90ZXh0Pjx0ZXh0IHg9IjAuMCIgeT0iMTIyLjUiIGZvbnQtc2l6ZT0iNS4wIiBmb250LXdlaWdodD0iYm9sZCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2EsIEFyaWFsLVVuaWNvZGUsIEFyaWFsLCBTYW5zLXNlcmlmIiBmaWxsPSIjMDAwMDAwIj5mcm9tIHRoZSBOb3VuIFByb2plY3Q8L3RleHQ+PC9zdmc+">

由于您没有澄清是否无法修改原始文件或者是否必须在客户端进行修改,我建议

以编程方式方法:

  1. 查找<img>
  2. From img.src strip "data:image...",提取 Base64 编码的 SVG。
  3. 使用解码它atob https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64.atob
  4. 创建一个元素,只是为了查找<path>
  5. 设置路径填充。
  6. 追加新图像或替换当前图像。

Example:

// Lookup the <img> by Id
var img = document.getElementById("target");

// Strip "data:image/svg+xml;base64," to get encoded SVG
var encoded = img.src.substring(26);

// Decode base64
var decoded = atob(encoded);

// Create an HTML element from decoded SVG
var wrapper = document.createElement('div');
wrapper.innerHTML = decoded;
var newSvg = wrapper.firstChild;

// Lookup the <path> and get a ref
var innerPath = newSvg.getElementsByTagName('path')[0];

// Set up new color
innerPath.setAttribute("fill", "#FF0000");

// Show modified image
document.body.appendChild(newSvg);
<img id="target" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iNS4wIC0xMC4wIDEwMC4wIDEzNS4wIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIiBoZWlnaHQ9IjEwMHB4IiB3aWR0aD0iMTAwcHgiPgo8cGF0aCBpZD0icGF0aDE5ODNfM18iIGQ9Ik01MC4xLDQuOXY3LjRjMCwwLDAsMC0wLjIsMGMtMC4xLDAtMC40LDAuMi0wLjQsMC40YzAsMC4yLDAsNS4xLDAsNS4zYzAsMC4yLTAuMiwwLjItMC4yLDAuNCAgYzAsMC4yLDAsNC42LDAsNC44cy0wLjIsMC4yLTAuMiwwLjRjMCwwLjIsMCwxLjcsMCwxLjdsLTEuMywzLjZjMCwwLTAuNSwwLTAuNywwYy0wLjIsMC0wLjQsMC4yLTAuNCwwLjRjMCwwLjIsMCwwLjksMCwwLjkgIHMtMC40LDAtMC41LDBzLTAuNCwwLjItMC40LDAuNGMwLDAuMiwwLDUuMSwwLDUuMXMtMC40LDAtMC41LDBjLTAuMiwwLTAuNCwwLjItMC40LDAuNGMwLDAuMiwwLDYsMCw2LjJjMCwwLjMtMC42LDAuNC0wLjYsMC42ICBjMCwwLjIsMCwzMCwwLDMwcy0wLjcsMC0wLjksMGMtMC4yLDAtMC40LDAuMi0wLjQsMC40YzAsMC4yLDAsNi42LDAsNi42cy0xLjgsMC0yLDBjLTAuMiwwLTAuNCwwLjItMC40LDAuNGMwLDAuMiwwLDkuOSwwLDkuOSAgcy0yLjYsMC0yLjgsMHMtMC40LDAuMi0wLjQsMC40YzAsMC4yLDAsNC41LDAsNC41aDI1LjljMCwwLDAtNC4zLDAtNC41YzAtMC4yLTAuMi0wLjQtMC40LTAuNGMtMC4yLDAtMi44LDAtMi44LDBzMC05LjcsMC05LjkgIGMwLTAuMi0wLjItMC40LTAuNC0wLjRjLTAuMiwwLTIsMC0yLDBzMC02LjQsMC02LjZjMC0wLjItMC4yLTAuNC0wLjQtMC40Yy0wLjIsMC0wLjksMC0wLjksMHMwLTI5LjgsMC0zMGMwLTAuMi0wLjYtMC4zLTAuNi0wLjYgIGMwLTAuMywwLTYuMSwwLTYuMmMwLTAuMi0wLjItMC40LTAuNC0wLjRjLTAuMiwwLTAuNSwwLTAuNSwwczAtNSwwLTUuMWMwLTAuMi0wLjItMC40LTAuNC0wLjRjLTAuMiwwLTAuNiwwLTAuNiwwczAtMC43LDAtMC45ICBjMC0wLjItMC4yLTAuNC0wLjQtMC40Yy0wLjIsMC0wLjcsMC0wLjcsMGwtMS4zLTMuNmMwLDAsMC0xLjUsMC0xLjdjMC0wLjItMC4yLTAuMi0wLjItMC40czAtNC42LDAtNC44YzAtMC4yLTAuMi0wLjItMC4yLTAuNCAgYzAtMC4yLDAtNS4xLDAtNS4zYzAtMC4yLTAuMi0wLjQtMC40LTAuNHMtMC4yLDAtMC4yLDBWNC45aC0wLjRoLTAuMUg1MC4xeiIvPgo8dGV4dCB4PSIwLjAiIHk9IjExNy41IiBmb250LXNpemU9IjUuMCIgZm9udC13ZWlnaHQ9ImJvbGQiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EgTmV1ZSwgSGVsdmV0aWNhLCBBcmlhbC1Vbmljb2RlLCBBcmlhbCwgU2Fucy1zZXJpZiIgZmlsbD0iIzAwMDAwMCI+Q3JlYXRlZCBieSBMYXphciBOaWtvbGljPC90ZXh0Pjx0ZXh0IHg9IjAuMCIgeT0iMTIyLjUiIGZvbnQtc2l6ZT0iNS4wIiBmb250LXdlaWdodD0iYm9sZCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2EsIEFyaWFsLVVuaWNvZGUsIEFyaWFsLCBTYW5zLXNlcmlmIiBmaWxsPSIjMDAwMDAwIj5mcm9tIHRoZSBOb3VuIFByb2plY3Q8L3RleHQ+PC9zdmc+">

Note:

IE

我可以使用atob吗? http://caniuse.com/#feat=atob-btoa

编辑:多重路径方法

var paths = newSvg.getElementsByTagName('path');
[].forEach.call(paths, function(path) {
    path.setAttribute("fill", "#FF0000");
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更改 base64 格式的 svg img 的颜色? 的相关文章

随机推荐

  • 像 iTunes 11 一样绘制 NSTableView 交替行

    我知道还有其他关于更改交替行颜色的问题 这很容易 但这不是我想做的 我想在基于视图的 NSTableView 中绘制自定义的交替颜色行 这些行看起来像 iTunes 11 中的行 行的顶部和底部有轻微的边框 如此屏幕截图所示 NOTE 我知
  • 在海报博客上,“液体错误:私有方法‘gsub’调用 nil:NilClass” 是什么意思?

    我在博客右侧遇到了此消息的问题 你能帮我一下吗 我刚刚也遇到了这个错误 您运行的液体过滤器的值可能为零 我的 jekyll 网站上有这样的内容 在我的根页面上 未设置标题 您可以通过确保设置该值来修复它 或者您可以使用类似这样的方法来强制将
  • 在 System.Windows.Form 派生类中的何处处置资源?

    我有一个表单 它在其构造函数中创建了一些我需要处理的一次性资源 但是 C 表单设计器已在 Designer cs 文件中生成 Dispose 方法 该方法中似乎没有任何类型的用户挂钩 所以我不知道应该如何实现典型的IDisposable图案
  • 获取丰富编辑库的版本

    ALL 是否可以获得程序使用的 RichEdit 控件的版本 Version Class name Library Shipped with New features 1 0 RICHEDIT Riched32 dll Windows 95
  • 鲁比:析构函数?

    我偶尔需要在缓存目录中使用 rmagick 创建图像 为了快速删除它们 而又不会在视图中丢失它们 我想在图像类的 Ruby 实例被破坏或进入垃圾收集时删除图像文件 我必须重写什么 ClassMethod 才能为析构函数提供代码 edgeru
  • 根据pandas数据框中的关键列减去列

    我有两个数据框看起来像 df1 ID A B C D 0 ID1 0 5 2 1 3 5 6 6 1 ID2 1 2 5 5 4 3 2 2 2 ID1 0 7 1 2 5 6 6 0 3 ID3 1 1 7 2 10 3 2 df2 ID
  • 获取 JSON 数组中的最大值

    我正在尝试创建一个 JavaScript 函数 该函数从外部 JSON 中的数组获取信息 然后获取其中一个 JSON 变量的最大值 或前 5 个值 对于此示例 假设我想要获取值 ppg 的最大值 这是该数组的一个小样本 player And
  • 我可以将 Activex 与 silverlight4 一起使用吗?

    我需要在我的 silverlight 应用程序中使用 ActiveX 控件 经过一些研究 我发现了 silverlight 应用程序可以使用 ActiveX 控件的几种方法 在网页中使用 ActiveX 控件以及 silverlight 插
  • 使用 ScheduledExecutorService 启动和停止计时器

    从我的阅读来看 ScheduledExecutorService 似乎是在 Java 中启动和停止计时器的正确方法 我需要移植一些启动和停止计时器的代码 这不是一个周期性定时器 此代码在启动计时器之前停止计时器 因此 实际上每次启动都是一次
  • 如何使用swift在iOS嵌入式动态框架中使用第三方库

    现在我有一个项目 比如 testApp 使用一些第三方库 比如 alamofire 和 Objective C 中的其他一些库 现在我想添加一个今天的小部件 根据一些教程 我创建了一个新的目标 testAppKit 作为共享动态框架 并将目
  • Java:System.out.println() 这么慢的原因是什么?

    对于可以在文本编辑器中完成的小型逻辑程序 为了跟踪 我使用经典的System out println 我想你们都知道在大量迭代的块中使用它是多么令人沮丧 为什么这么慢 其背后的原因是什么 这与 JVM 没有任何关系 将文本打印到屏幕上只涉及
  • FileProvider - 使用默认内部存储文件夹,文件路径不明确

    它在文档中说 FileProvider 只能为以下位置的文件生成内容 URI 您事先指定的目录 要指定目录 使用 XML 的子元素指定其存储区域和路径 元素 例如 以下 paths 元素告诉 您打算请求图像 的内容 URI 的 FilePr
  • 如何在AngularJS中获取图像尺寸?

    我想在用户选择要上传的文件时检查图像的尺寸
  • 反转角度 2 *ngFor

    li user name is user age years old li 是否可以反转 ngFor 使项目自下而上添加 你可以简单地使用 JavaScript reverse 在阵列上 不需要特定角度的解决方案 li user name
  • 首先在 EF 代码中将文字或常量作为复合键的一部分

    我对实体框架的代码优先方法相对较新 我已经使用数据库优先方法有一段时间了 但是代码优先似乎更适合我当前正在开发的应用程序 我正在使用现有的 MS SQL 数据库 并且不允许我对数据库进行任何更改 我使用 Code First 的原因是 Fl
  • 在 Windows 8 中使用 C# 的 WinRT 中的磁盘空间

    我有两个解决方案 但都对我没有用 解决方案1 kernel32 dll 其工作代码 注意 但我不想在我的应用程序中导入任何 dll b c 其市场提交问题 DllImport kernel32 dll SetLastError true s
  • django 本地时间模板过滤器不起作用

    我使用 django 1 10 来显示日期时间 日期时间存储在 mongodb 中 并且始终是没有时区信息的 UTC 因此我需要根据运行 django 的机器的时区显示日期时间 首先 在settings py中添加它们 TIME ZONE
  • 编译错误:“版本高于引用的程序集”

    我的视图页面出现错误 因此我将 Visual Studio 更新为 mvc4 尽管我正在使用 mvc3 我第一次使用 NuGet 更新 但它不起作用 所以我通过独立 MVC4 更新 所以它起作用了 但是当我尝试运行 MVC3 项目时 出现以
  • 使用 Metal 的旧设备上的内存使用量持续上升

    I use Metal and CADisplayLink活过滤CIImage并将其渲染成MTKView Starting display link displayLink CADisplayLink target self selecto
  • 如何更改 base64 格式的 svg img 的颜色?

    我有一个 Svg img 其中包含base64格式并尝试更改其颜色 有人知道如何执行此操作吗 我发现了一些关于