使用画布单独倾斜图像
Skewing images individually using canvas
我使用HTML5画布来创建一系列树及其相应的阴影。我希望每个阴影都基于光源的位置。我可以画出每棵树和它的影子,也可以一次扭曲所有的影子,但我无法单独扭曲每个影子
var ctx = cvs[0].getContext('2d');
ctx.save();
//skew the canvas
ctx.transform(1,0,0.3,-1,0,0);
ctx.drawImage(tree1,74,-117,20,40);
ctx.drawImage(tree1,126,-125,20,40);
var imgd = ctx.getImageData(0, 0, 500, 300);
var pix = imgd.data;
//convert the drawn trees to shadows
for (var i = 0, n = pix.length; i < n; i += 4) {
pix[i ] = 0; // red
pix[i+1] = 0; // green
pix[i+2] = 0; // blue
// alpha
}
ctx.putImageData(imgd, 0, 0);
//remove the skewing
ctx.restore();
//draw full color trees
ctx.drawImage(tree1,50,40,20,40);
ctx.drawImage(tree1,100,50,20,40);
当我使用drawImage绘制图像时,有没有一种方法可以扭曲图像?提前感谢!
这里有两件事你必须理解。
将转换应用于上下文时,不会将其应用于已绘制的任何内容。您只将转换应用于要绘制的关于的内容。
换句话说,当您使用drawImage绘制图像时,总是倾斜图像的情况!这是唯一的办法。
这个规则有一个例外,您应该记住,因为您使用的是imageData:将imageData放到画布上是像素完美的,并且忽略任何变换矩阵。
因此,如果你想对每个阴影有不同的倾斜,你所要做的就是变换上下文,画出a,然后用其他方式恢复和变换上下文,然后画出B。
下面是一个使用代码的示例:
http://jsfiddle.net/QfrVB/
顺便说一句,您根本不需要在这里使用imageData。使用它是一个非常缓慢的操作(如果你正在制作一个像游戏一样的动画应用程序,这一点很重要),如果可以的话,你应该避免它。
而不是这样做:
var imgd = ctx.getImageData(0, 0, 500, 300);
var pix = imgd.data;
//convert the drawn trees to shadows
for (var i = 0, n = pix.length; i < n; i += 4) {
pix[i ] = 0; // red
pix[i+1] = 0; // green
pix[i+2] = 0; // blue
// alpha
}
ctx.putImageData(imgd, 0, 0);
你可以这样做:
ctx.globalCompositeOperation = 'source-atop';
ctx.fillStyle = 'black';
ctx.fillRect(0,0,500,300);
ctx.globalCompositeOperation = 'source-over'; // back to normal
该代码所做的是在画布上当前存在的所有像素上绘制黑色。既然你先画所有的阴影,你可以用这种方式一次调用fillRect就把所有的阴影都黑掉。
看到住在这里:http://jsfiddle.net/QfrVB/2/
相关文章:
- 如何使用url加载程序在webpack中导入多个图像
- nodejs-expressjs上传图像并显示它们
- 使用JSP从服务器检索和显示图像
- 角度:在ng重复上切换图像
- 画廊图像未显示
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- Javascript排序的图像弹出窗口..可以't单独弹出
- 画布数据到图像
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 使图像在单击时展开到不大于浏览器
- Html页面上的多个Base64图像和平滑加载
- UIAutomation放大图像
- 使用javascript在Flash中加载外部图像
- 像在 photoshop 中一样使用可拖动手柄倾斜图像
- 在画布上倾斜图像并为其添加动画效果
- 使用iPad倾斜将图像横向移动
- 不工作mousemove&mouseleave in(倾斜图像)
- 使用画布单独倾斜图像
- 如何倾斜/旋转画布内的图像
- 使用 JavaScript 或 jQuery 的 HTML 图像或按钮上的动态磁贴倾斜效果