程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了svg 斑点图像在编码后被破坏大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决svg 斑点图像在编码后被破坏?

开发过程中遇到svg 斑点图像在编码后被破坏的问题如何解决?下面主要结合日常开发的经验,给出你关于svg 斑点图像在编码后被破坏的解决方法建议,希望对你解决svg 斑点图像在编码后被破坏有所启发或帮助;

我尝试将图像解析为 blob 并在 svg 的 image 标记中引用它:

`<image xlink:href="${imgRef}" height="${h}" wIDth="${w}" @R_502_5283@="red" x="50%" y="50%" transform="translate(${-(w / 2)},${-(h / 2) - 4})"/>`

并将其嵌入到 svg 中:

const w = 100; // wIDth
const h = 65; // height

const svgString = `<svg xmlns="http://www.w3.org/2000/svg" wIDth="100" height="100" xmlns:xlink="http://www.w3.org/1999/xlink">` +
`<image xlink:href="${imgRef}" height="${h}" wIDth="${w}" @R_502_5283@="red" x="50%" y="50%" transform="translate(${-(w / 2)},${-(h / 2) - 4})"/>` +
`</svg>`;

然后我尝试通过 'data:image/svg+xml;,' + encodeURIComponent(svgString) 对其进行编码,结果显示损坏的图像。在通过 document.body.INNERHTML = svgString 对其进行编码之前,我测试了上面的 svg 字符串,并且 svg 图像显示良好。所以我怀疑编码部分,但根据许多参资料似乎没有错。

我错过了什么?任何见解将不胜感激。

演示链接:https://codepen.io/Dongbin/pen/poRmbmg?editors=0010

解决方法

外部图像(即 <img> 或 CSS BACkground-image必须是自包含的。它们不能引用图像本身之外的资源。基本上,这意味着如果您需要引用任何文件(位图图像​​、字体等)作为 SVG 图像的一部分,它们必须是数据 URL。

解决方法是不使用 canvas.toBlob()。改用 canvas.toDataURL()

const imgRef = canvas.toDataURL();
const svgString = `<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" ` +
                    `xmlns:xlink="http://www.w3.org/1999/xlink">` +
                    `<image xlink:href="${imgRef}" height="125" width="200"/>` +
                  `</svg>`;

更新

如果您对 SVG 进行 URI 编码,它应该可以工作。

见:https://jsfiddle.net/dxkeqfnr/

const img = new Image();
img.src = 'https://live.staticflickr.com/7272/7633179468_3e19e45a0c_b.jpg';
img.crossOrigin="anonymous"
img.onload = () => {
  const canvas = document.createElement('canvas');
  canvas.width = 200;
  canvas.height = 125;
  canvas.getContext('2d').drawImage(img,200,125);
  
  canvas.toBlob((blob) => {
    const imgRef = URl.createObjectURL(blob);
    const svgString = `<svg xmlns="http://www.w3.org/2000/svg" width="200" height="125" xmlns:xlink="http://www.w3.org/1999/xlink"><image xlink:href="${imgRef}" height="125" width="200"/></svg>`;
    
    //div.innerHTML = svgString;
    const newImg = new Image();
    newImg.src = `data:image/svg+xml,${encodeURIComponent(svgString)}`;
    document.body.appendChild(newImg);
  });
};

它适用于 Firefox,但不适用于 Chrome。这似乎是一个错误。 I have reported the bug to Chrome

大佬总结

以上是大佬教程为你收集整理的svg 斑点图像在编码后被破坏全部内容,希望文章能够帮你解决svg 斑点图像在编码后被破坏所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。