我遇到了这种情况,我很难在 Google 上搜索并解释。
我们公司在铝上打印照片,我们给客户两种选择。
首选是将他们的照片打印在铝材上,就像 他们把照片给了我们,所以如果照片有白色 背景 图片以白色背景打印。简单的 就像那样。
第二个选项是我们可以不使用打印他们的照片 白色的。而不是所有的“白色值”(<-我能想到的最好的 为了解释)正在打印我们让它透明。
我知道 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/