Mask for putImageData with HTML5 canvas?
Mask for putImageData with HTML5 canvas?
我想从现有图像中获取一个形状不规则的部分,并使用HTML5画布在Javascript中将其渲染为新图像。因此,将仅复制面边界内的数据。我想出的方法涉及:
- 在新画布中绘制多边形。
- 使用
clip
创建蒙版 - 使用
getImageData
(矩形)从原始画布复制数据 - 使用
putImageData
将数据应用于新画布
它不起作用,整个矩形(例如,来自边界外源的内容)仍然出现。这个问题解释了为什么:"规范说putImageData
不会受到剪切区域的影响。"当!
我还尝试绘制形状,设置context.globalCompositeOperation = "source-in"
,然后使用putImageData
。相同的结果:未应用遮罩。我怀疑出于类似的原因。
关于如何实现这一目标的任何建议?这是我正在进行的工作的基本代码,以防不清楚我正在尝试做什么。 (不要太努力地调试它,它是从使用许多函数的代码中清理/提取的,这些函数不在这里,只是试图显示逻辑)。
// coords is the polygon data for the area I want
context = $('canvas')[0].getContext("2d");
context.save();
context.beginPath();
context.moveTo(coords[0], coords[1]);
for (i = 2; i < coords.length; i += 2) {
context.lineTo(coords[i], coords[i + 1]);
}
//context.closePath();
context.clip();
$img = $('#main_image');
copy_canvas = new_canvas($img); // just creates a new canvas matching dimensions of image
copy_ctx = copy.getContext("2d");
tempImage = new Image();
tempImage.src = $img.attr("src");
copy_ctx.drawImage(tempImage,0,0,tempImage.width,tempImage.height);
// returns array x,y,x,y with t/l and b/r corners for a polygon
corners = get_corners(coords)
var data = copy_ctx.getImageData(corners[0],corners[1],corners[2],corners[3]);
//context.globalCompositeOperation = "source-in";
context.putImageData(data,0,0);
context.restore();
不使用putImageData
,
只需使用 document.createElement 在内存画布中制作一个额外的蒙版来创建掩码,并使用drawImage()
和globalCompositeOperation
函数应用它(取决于您需要选择正确模式的顺序;
我在这里做类似的事情,代码在这里(注意CasparKleijne.Canvas.GFX.Composite
函数)
相关文章:
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- IE9的HTML5 Canvas getImageData()函数存在问题
- 查找带有边框的HTML5 Canvas(点击)事件的坐标
- 在keydown(JS,Jquery)上更改HTML5 Canvas元素
- HTML5 Canvas访问控制允许原始错误
- HTML5 Canvas toDataURL(“image/png”)适用于一些绘画,而有些则不然,不确定原因
- 如何在MVC5中运行时在HTML5 Canvas中显示图像
- HTML5 Canvas无法加载Kinetic.js
- 构建HTML5 Canvas/JS游戏
- 在我的网页上定位 Canvas HTML5 游戏时遇到问题
- Adobe Canvas HTML5 AS3点击标记
- 使用Canvas/HTML5创建或显示N-QAM星座
- Javascript 中用于 Flash Canvas HTML5 的倒数时钟计时器
- Canvas Html5:多个画布,清除其中一个会同时清除另一个画布
- 在canvas HTML5中检测对象相对于另一个对象的位置
- 在canvas HTML5中循环使用"gap "广场之间
- Canvas HTML5数据点指向数组
- Canvas HTML5 inheritance
- Canvas HTML5 JavaScript代码不起作用,使用Canvas.toDataURL()
- Javascript内存泄漏-Canvas HTML5 jQuery