ткань js или imagick удаляет белый цвет с изображения
У меня возникла такая ситуация, которую мне трудно найти в Google и объяснить.
Наша компания печатает фотографии на алюминии, и мы предоставляем нашим клиентам два варианта.
Первый вариант - напечатать их фотографии на алюминии точно так же, как они передали нам фотографию, поэтому, если на картинке белый фон, картинка печатается на белом фоне. Вот так просто.
Второй вариант заключается в том, что мы можем напечатать их фотографию без использования белого цвета. вместо того, чтобы печатать все "белые значения" (<- лучшее, что я могу придумать , чтобы объяснить), мы оставляем их прозрачными.
Я знаю, что в fabric JS есть фильтр removeWhite, который может заменить белые области прозрачными. Но это не то, что мне нужно. Мне нужен тканевый JS-фильтр, ImageMagick или любое другое решение PHP или JS, которое может сделать "белое значение" пикселя прозрачным. Я знаю, что для вас, ребята, все это может показаться очень расплывчатым, но позвольте мне попытаться объяснить это способ:
Если я столкнусь с белым пикселем, мне нужно сделать его прозрачным.
Если я столкнусь с серым пикселем, мне нужно превратить его из комбинации белого и черного в комбинацию прозрачного и черного.
Если я пересекаю цветной пиксель, мне также нужно изменить " значение белого", которое делает его светлым, на прозрачный.
Вот пример до и после фильтра/эффекта, который я пытаюсь выполнить:
Перед:
После:
Пожалуйста, не стесняйтесь спрашивать меня о чем угодно, если вы не понимаете, о чем я прошу.
2 answers
Я заставил его работать. Используя факторы из цветового пространства 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.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));