【问题标题】:fabric js or imagick remove white from image织物 js 或 imagick 从图像中删除白色
【发布时间】:2013-03-01 02:33:18
【问题描述】:

我遇到了这种情况,我很难在 Google 上搜索并解释。

我们公司在铝材上打印照片,我们给客户两种选择。

  1. 第一选择是将他们的图片打印在铝上,就像 他们把照片给了我们,所以如果照片有白色 背景 图片以白色背景打印。简单 像这样。

  2. 第二个选项是我们可以打印他们的图片而不使用 白色的。而不是所有的“白色值”(

我知道fabric JS中有这个removeWhite过滤器,可以用透明区域替换白色区域。但这不是我需要的。我需要一个 Fabric JS 过滤器、ImageMagick 东西或任何其他可以将像素的“白色值”变为透明的 PHP 或 JS 解决方案。 我知道这些东西对你们来说可能听起来很模糊,但让我试着这样解释一下:

  • 如果遇到白色像素,我需要将其设为透明。

  • 如果遇到灰色像素,我需要将其从组合中转出 将白色和黑色混合成透明和黑色的组合。

  • 如果我遇到一个彩色像素,我还需要将“白色 值”,使它的光变成透明。

这是我尝试完成的过滤器/效果的前后示例:

之前:

之后:

如果您不明白我的要求,请随时问我。

【问题讨论】:

标签: php javascript imagemagick transparency fabricjs


【解决方案1】:

我让它工作了。通过使用来自YUV 颜色空间的因子,我可以创建一个 Fabric JS 图像过滤器。

为了得到我想要的结果,我进行了大量的反复试验。 因此,我没有(详细)描述它是如何工作的。 据我所知,我使用 YUV 因子来获得 (RGB) 颜色的亮度。

for (i = 0; i < iLen; i++) {
    for (j = 0; j < jLen; j++) {
      index = (i * 4) * jLen + (j * 4);
      var yuv = {};
      yuv.r = data[index] / 255 * 1 * 0.299;     
      yuv.g = data[index + 1] / 255 * 1 * 0.587; //we use the yuv formula constants
      yuv.b = data[index + 2] / 255 * 1 * 0.114; //to try to catch the Y (brightness)
      yuv.y = yuv.r + yuv.g + yuv.b;             //you can tweak this
      data[index + 3] = 350 - (yuv.y / 1 * 255); //by changing the first number after the "=" on this line!
    }
}

通过在最后一行弄乱 350,您可以改变透明度系数。

很抱歉无法详细说明此 Fabric 过滤器的工作原理。

【讨论】:

    【解决方案2】:

    所以在 Fabric.js 中有一个过滤器可以做到这一点。

    http://fabricjs.com/docs/fabric.Image.filters.RemoveWhite.html

    var filter = new fabric.Image.filters.RemoveWhite({
      threshold: 40,
      distance: 140
    });
    image.filters.push(filter);
    image.applyFilters(canvas.renderAll.bind(canvas));
    

    【讨论】:

    • 在新的 Fabric.js 版本中,此方法名称更改为 RemoveColor
    猜你喜欢
    • 2010-11-02
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 2013-01-18
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多