我需要使用drawImage()
方法在画布上渲染Font Awesome图标。根据drawImage
方法的说明,它接受多种类型的图像源,特别是包括HTMLImageElement
、SVGImageElement
、HTMLVideoElement
、HTMLCanvasElement
、ImageBitmap
、OffscreenCanvas
或VideoFrame
等。我已经从Font Awesome仓库找到了一个SVG文件,例如这个日历图标:Font Awesome的日历SVG图标链接。
以下是我目前的代码实现:
const context = document.getElementById("myCanvas").getContext('2d');
const image = new Image();
image.src = `https://raw.githubusercontent.com/FortAwesome/Font-Awesome/master/svgs/solid/calendar.svg`;
image.onload = function(){
context.drawImage(image, 0, 0, 100, 100);
};
但是,这个SVG图标默认是黑色并带有白色背景。我希望在渲染之前能够改变图标的颜色和背景色。我应该如何操作?我尝试了下面的方法,但遇到了错误提示DOMException: The source image could not be decoded.
,而且我觉得当前的方法可能并不正确...
以下是尝试修改颜色和背景色的代码片段,但未达到预期效果:
// ...之前的代码同上...
async function modifyAndDraw(iconUrl, ctx) {
try {
const svgText = await fetchData(iconUrl);
const modifiedSvgText = modifySvgContent(svgText, '#ff0000', '#00ff00');
const imageBitmap = await createImageBitmap(
new Blob([modifiedSvgText], { type: 'image/svg+xml;charset=utf-8' })
);
ctx.drawImage(imageBitmap, 0, 0, 100, 100);
} catch (error) {
console.error('Error:', error);
}
};
// ...其他辅助函数代码同上...
如何正确地在渲染到画布之前修改SVG图标的颜色和背景色呢?