2013-03-11 138 views
1

我有一个本质上是星爆效应的图像。星爆的颜色是白色的,背景是透明的(PNG w/Alpha)。我随机在随机位置上的HTML5画布上生成这些星号,并同时生成随机色调,饱和度和光照(HSL)值。这些可能是RGB值,如果这简化了事情。HTML5 Canvas重新着色图像*之前*渲染

目标是根据随机生成的HLS值将其呈现在HTML5画布上以重新着色PNG,然后将其呈现到画布上。

我已经阅读了StackOverflow和其他站点上的一些其他帖子,但我看到的唯一解决方案涉及将其呈现在画布上,抓取图像显示位置的坐标,并修改像素上的颜色 - 逐像素基础。理论上这可以起作用,但是某些图像可能略有重叠。另外,如果背景已经存在,那么根据我的理解,背景的颜色也会被修改,这对我来说也不是什么解决方案。

如果这超出了Canvases能够实现的范畴,那么我想我可以通过使用GD2或Imagick通过PHP动态重新着色图像或通过Gimp命令行对图像进行重新着色, ImageMagick或其他一些图像库...

非常感谢!

- 观察 -

特别感谢@ jing3142闭屏画布渲染的初步建议,并@Jarrod提供重要的一块,我失踪:globalCompositeOperation = "source-in"

这里是一个工作的执行理念:http://jsfiddle.net/fwtW2/2/

作品中:

  • ç hrome
  • 火狐
  • IE 9(没有测试其它版本)

回答

1

我敢肯定,您可以使用source-inglobalCompositeOperation opertaion?没有必要得到所有的核心和疯狂的矢量图像。

此代码是在魔术发生:

var color = 'red'; 
ctx.fillStyle = color; 
ctx.globalCompositeOperation = "source-in"; 

但是你需要这种重新绘制到屏幕外的画布:你能做到这一点,像这样

createBuffer = function(sizeW, sizeH) 
{ 
    buffer = document.createElement('buffer'); 
    bufferCtx = buffer.getContext('2d'); 

    buffer.width = sizeW; 
    buffer.height = sizeH; 

}

然后,只需将图像绘制到屏幕外并应用全局组合。

+0

我喜欢那种声音!我一定会试一试,看看这是否符合需求:) – 2013-03-12 21:14:47

+0

这是我如何做我的位图字体 - 这意味着我可以提供一个标准的黑色字体,并以任何颜色显示:) – Jarrod 2013-03-12 21:20:50

+0

' globalCompositeOperation ='源文件';'绝对是最缺的作品!当我得到一个坚实的实施时,我会分享我的代码给其他人从中受益。非常感谢! :) – 2013-03-12 22:40:17

2

如何具有图像的尺寸,将图像上的画布,重新颜色所需的第二帆布,提取重新着色的图像并随机放置在主画布上,使用新的HSL值在第二个画布上重新着色图像,提取并随机放置在主画布上并重复?

这可能有助于以及https://developer.mozilla.org/en-US/docs/HTML/Canvas/Pixel_manipulation_with_canvas

+0

这个想法已经超越了我的想法,只是看起来很繁琐... – 2013-03-11 19:51:52

1

下面介绍如何轻松地只是呈现在画布上

将您starburst.png成矢量路径之前重新着色的星爆! (我知道,你将不得不一次拖出Gimp/Illustrator - 但它是值得的!)

Starburst路径可以有填充和填充可以是纯色或甚至渐变 - 如花哨,随机recoloring作为你需要!

Starburst路径可以缩放而不会像png那样的光栅图像的像素化。

星爆路径可以旋转以显示突发中的多样性 - 甚至可以倾斜以表示一点3D运动。

如果你想要看起来,你甚至可以通过使用阴影和模糊来创建“发光”爆发。

Starburst路径比.png图片渲染速度更快 - 尤其是如果您需要在绘制之前操作每个.png。

+0

所以你的想法是将PNG转换为矢量路径,并将该矢量路径传递给Canvas? – 2013-03-11 20:38:56

+0

是的,除非你的starburst非常复杂,你应该可以使用gimp/illustrator中的.svg路径创建一个画布路径(是的,需要一些轻微的手动转换)。实际上,即使它很复杂,绘制矢量而不是栅格的好处也很重要。关于GIMP的说明中的 – markE 2013-03-11 20:44:41

+0

,你有推荐使用矢量路径库吗?我遇到http://registry.gimp.org/node/26303 – 2013-03-11 20:51:47