javascript - PNG 图像颜色在 Fabric.js 中不会改变

标签 javascript jquery html5-canvas fabricjs

我正在使用下面的代码动态更改 Canvas 上 PNG 图像的颜色,

var selectedObject = canvas.getActiveObject();

if ("text" == selectedObject.type) {
   selectedObject.setFill("#FF0000");
   canvas.renderAll();
}
else {    
  selectedObject.filters.push(
    new fabric.Image.filters.Tint({color:"#FF0000", opacity:0.6}));

  selectedObject.applyFilters(canvas.renderAll.bind(canvas));
}

其中 canvas = new fabric.Canvas('c');

*添加静态颜色用于测试目的,将由颜色选择器取代。

对于文本它工作正常但对于图像它不工作。

最佳答案

您不能在跨源图像上应用图像过滤器。如果您查看开发者控制台,您会看到以下安全错误:“未捕获的安全错误:无法在‘CanvasRenderingContext2D’上执行‘getImageData’: Canvas 已被跨源数据污染。”

请仅使用同源图像或使用最新的 Fabric.js 版本(开发版)并设置 crossOrigin = "Anonymous"。在这种情况下,图像必须使用 header “Access-Control-Allow-Origin: *”提供。

您使用 fabric.Image.filters.Tint 的新 API - 此 API 仅在 Fabric.js 版本 >= 1.3.2 中可用。

我已经更新了 jsfiddle 以使用数据 URL 图像(CORS 没问题)并将 Fabric.js 更新到 1.3.2:http://jsfiddle.net/Kienz/wDfhf/

您可以在 https://github.com/kangax/fabric.js/tree/master/dist 找到最新的开发版本(风险自负:))

关于javascript - PNG 图像颜色在 Fabric.js 中不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20019268/

相关文章:

javascript - 如何动态添加 "src"并开始/停止播放

javascript - 无法使用其选项动态创建选择

javascript - 使用 JS 或 jQuery 处理表单提交时的 500 错误?

javascript - 如何使用 JavaScript 重定向到当前页面?

javascript - 如何为一组对象制作动画?

javascript - Kineticjs - 修复了旋转形状的填充图案

javascript - 将 Jquery 函数转换为纯 Javascript

javascript - 在 WebKit WebViews 中禁用同源策略/跨域 XMLHttpRequests?

javascript - 获取动态创建的文本框的值时遇到错误

javascript - 第二次刷新浏览器后 svg 图像加载到 Canvas 上