Javascript 服装设计师。图层的颜色

Javascript 服装设计师。图层的颜色,javascript,html,image,css,Javascript,Html,Image,Css,我尝试在一个基于图层的结构中创建一个cloth designer应用程序,就像在Photoshop应用程序中一样。 我使用了一个带有alpha通道的图像,在它下面我放置了具有不同背景颜色的div。因此,我希望更改图像的颜色。 但我不知道如何用同样的颜色在图像上覆盖另一层。 当我尝试重复相同的技巧时,它将填充我想要透明的额外空间。换句话说,我只需要画一部分 图像,使另一部分保持透明 我尝试使用画布填充图像的rgb255,0255部分,但是画布太慢了 <div class="preview_u

我尝试在一个基于图层的结构中创建一个cloth designer应用程序,就像在Photoshop应用程序中一样。 我使用了一个带有alpha通道的图像,在它下面我放置了具有不同背景颜色的div。因此,我希望更改图像的颜色。 但我不知道如何用同样的颜色在图像上覆盖另一层。 当我尝试重复相同的技巧时,它将填充我想要透明的额外空间。换句话说,我只需要画一部分 图像,使另一部分保持透明

我尝试使用画布填充图像的rgb255,0255部分,但是画布太慢了

<div class="preview_under">
  <div style="background: transparent url(images/main_template.png);" class="preview_middle">
    <div class="preview_over">
      <!-- override layers -->
      <div class="layer" style="background: url(images/blue.jpg);" data-name="modern" data-section="pocket">
        <img src="images/pocket_modern.jpg">
      </div>
      <!-- /override layers -->
    </div>
  </div>
  <!-- color of the template -->
  <div class="fill" style="background: url(images/blue.jpg);"></div>
</div>
问题的图形表示:

UPD: 谢谢大家! 我用画布解决了我的问题。 我试过了,效果很好。
演示是。

画布应该很快,也许慢与使用的算法有关

但是,如果您尝试使用画布,这意味着您的目标是现代浏览器。因此,SVG可能会起作用:

使用SVG更改颜色非常容易看到:

您可以在图层中覆盖布料部分,并使用类似于绘制它们的工具,此外,您还可以使用可视化编辑器在SVG上设置背景图像,因此无需手动进行覆盖:

其他可能的解决办法包括:

有一组预定义的颜色,每个变化都有一个带有精灵的PNG,因此每次颜色变化时只更改背景偏移。好的:不需要任何特殊的东西,可以在所有浏览器上使用;坏:颜色变化是固定的,创建这些精灵很耗时

使用画布更改图片,查找慢速算法中的问题。然后可以使用toDataURL缓存画布生成的图像。这样,当用户更改颜色时,如果缓存图像已经存在,则使用它。好:你不需要手工编辑图片;坏:代码更复杂


画布应该是快的,也许慢与使用的算法有关

但是,如果您尝试使用画布,这意味着您的目标是现代浏览器。因此,SVG可能会起作用:

使用SVG更改颜色非常容易看到:

您可以在图层中覆盖布料部分,并使用类似于绘制它们的工具,此外,您还可以使用可视化编辑器在SVG上设置背景图像,因此无需手动进行覆盖:

其他可能的解决办法包括:

有一组预定义的颜色,每个变化都有一个带有精灵的PNG,因此每次颜色变化时只更改背景偏移。好的:不需要任何特殊的东西,可以在所有浏览器上使用;坏:颜色变化是固定的,创建这些精灵很耗时

使用画布更改图片,查找慢速算法中的问题。然后可以使用toDataURL缓存画布生成的图像。这样,当用户更改颜色时,如果缓存图像已经存在,则使用它。好:你不需要手工编辑图片;坏:代码更复杂


另一种解决方案是仅使用颜色设置图像,但可以使用饱和度和亮度更改,该解决方案的浏览器支持有限,但很容易实现

然后申请

-webkit-filter: hue-rotate(xdeg);
换成任何颜色

使用svg过滤器也可以获得更多支持


另一种解决方案是仅使用颜色设置图像,但可以使用饱和度和亮度更改,该解决方案的浏览器支持有限,但很容易实现

然后申请

-webkit-filter: hue-rotate(xdeg);
换成任何颜色

使用svg过滤器也可以获得更多支持

谢谢大家! 我通过画布解决了我的问题。 我刚用过房产

..
ctx.drawImage(original, 0, 0);
ctx.globalCompositeOperation = "source-in";
ctx.drawImage(fill, 0, 0);
ctx.globalCompositeOperation = "source-over";
ctx.drawImage(border, 0, 0);
...
演示是。

谢谢大家! 我通过画布解决了我的问题。 我刚用过房产

..
ctx.drawImage(original, 0, 0);
ctx.globalCompositeOperation = "source-in";
ctx.drawImage(fill, 0, 0);
ctx.globalCompositeOperation = "source-over";
ctx.drawImage(border, 0, 0);
...

演示是。

只有理论让我眼花缭乱,你能分享一些代码吗?或者你想在这里做什么的一些例子?只有理论让我眼花缭乱,你能分享一些代码吗?或者您在这里尝试做的一些示例?但是如何通过svg更改png图像部分的颜色?我需要将所有图像重新绘制为矢量吗?遗憾的是,您不能以这种方式更改光栅图像,您需要使用矢量SVG图像来执行此操作。如果颜色选项有限,使用PNG精灵是最简单的事情:您必须创建精灵,或者您可以为每种颜色使用PNG文件。但是如何通过svg更改PNG图像部分的颜色?我需要将所有图像重新绘制为矢量吗?遗憾的是,您不能以这种方式更改光栅图像,您需要使用矢量SVG图像来执行此操作。如果颜色选项有限,那么使用PNG精灵是最简单的事情:你必须创建精灵,或者你可以为每种颜色使用PNG文件。哇,这是一个非常好的过滤器,但它只能在最新的浏览器中使用。哇,这是一个非常好的过滤器,但它只能在最新的浏览器中使用。