ткань js или imagick удаляет белый цвет с изображения


У меня возникла такая ситуация, которую мне трудно найти в Google и объяснить.

Наша компания печатает фотографии на алюминии, и мы предоставляем нашим клиентам два варианта.

  1. Первый вариант - напечатать их фотографии на алюминии точно так же, как они передали нам фотографию, поэтому, если на картинке белый фон, картинка печатается на белом фоне. Вот так просто.

  2. Второй вариант заключается в том, что мы можем напечатать их фотографию без использования белого цвета. вместо того, чтобы печатать все "белые значения" (<- лучшее, что я могу придумать , чтобы объяснить), мы оставляем их прозрачными.

Я знаю, что в fabric JS есть фильтр removeWhite, который может заменить белые области прозрачными. Но это не то, что мне нужно. Мне нужен тканевый JS-фильтр, ImageMagick или любое другое решение PHP или JS, которое может сделать "белое значение" пикселя прозрачным. Я знаю, что для вас, ребята, все это может показаться очень расплывчатым, но позвольте мне попытаться объяснить это способ:

  • Если я столкнусь с белым пикселем, мне нужно сделать его прозрачным.

  • Если я столкнусь с серым пикселем, мне нужно превратить его из комбинации белого и черного в комбинацию прозрачного и черного.

  • Если я пересекаю цветной пиксель, мне также нужно изменить " значение белого", которое делает его светлым, на прозрачный.

Вот пример до и после фильтра/эффекта, который я пытаюсь выполнить:

Перед:

После:

Пожалуйста, не стесняйтесь спрашивать меня о чем угодно, если вы не понимаете, о чем я прошу.

Author: Dageraad, 2013-03-13

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 в последней строке, вы можете изменить коэффициент прозрачности.

Извините, что не возможность объяснить больше о том, как работает этот тканевый фильтр.

 3
Author: Dageraad, 2013-05-21 09:34:25

Таким образом, в 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));
 0
Author: MarZab, 2016-08-11 22:12:38