php - fabric js 或 imagick 从图像中删除白色

标签 php javascript imagemagick transparency fabricjs

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

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

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

  2. 第二个选项是我们可以不使用打印他们的照片 白色的。而不是所有的“白色值”(<-我能想到的最好的 为了解释)正在打印我们让它透明。

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

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

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

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

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

之前:

之后:

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

最佳答案

我让它工作了。通过使用来自 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 过滤器的工作原理。

关于php - fabric js 或 imagick 从图像中删除白色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15380547/

相关文章:

php - 如何在 HTML 中禁用嵌入式媒体播放器中的暂停和搜索栏

javascript - Web 组件 : Accessing the shadow DOM within the Custom Component class

javascript - 回调在 NodeJs 中不起作用

ruby-on-rails - 将 Rmagick 与上传的文件一起使用

php - 为什么没有从我的 MYSQL 数据库中提取 "message"字段?

php - 使用 CP437 在 PHP 中打印扩展的 ASCII 字符

php - 使用 ajax 获取文件 — CORS 问题和设置缓存?

javascript - 如何在 Angular JS 中将输入字段值转换为 Base64 编码或解码

imagemagick - 调整大小以适合盒子并将背景设置为黑色在 "empty"部分

php - 如何使 IMagick Canvas 适合 PHP 中的字体大小?