svg 常用代码

svg图片换色

/**
 * @description: svg图片换色
 * @param {String} domId
 * @param {Array} fillColor [255, 255, 255]
 * @param {Array} strokeColor [0, 0, 0]
 * @return {*}
 */
svgChangeColor(domId = '', fillColor = null, strokeColor = null) {
  if (!domId) return;
  const dom = document.querySelector(`#${domId}`);
  const fillStyle = fillColor ? `fill:${fillColor};` : ''; // fill=填充色
  const strokeStyle = strokeColor ? `stroke:${strokeColor};` : ''; // stroke=描边色
  dom.setAttribute(
    'style',
    `${fillStyle}${strokeStyle}`
  );
}

svg转base64图片

/**
 * @description: svg图转base64图
 * @param {String} svgDom <Element>
 * @return {*}
 */
svgToBase64(svgDom) {
  if (!svgDom) return;
  const serial = new XMLSerializer().serializeToString(svgDom);
  return `data:image/svg+xml;base64,${window.btoa(serial)}`;
}

问题:svg 转 base64 时报错误信息 Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.

原因:在“Window”上执行“btoa”失败:要编码的字符串包含 Latin1 范围之外的字符。

解决:在执行 window.btoa(svgSerial) 方法前,先对 svg 字符串进行编码可解决。