Сегодня мы увидим, как легко применять контраст к изображениям. Мы также увидим, как можно добиться эффекта поворота оттенка в FabricJS. Итак, давайте приступим!

Как сделать изображение высококонтрастным в FabricJS

Контраст изображений определяет разницу в тонах или яркости между светлыми и темными областями.

Когда мы берем ярко-желтый цвет и помещаем его рядом с синим цветом, мы говорим, что он имеет высокий контраст. Это связано с тем, что разница в тонах чрезвычайно драматична и может быть легко различима человеческим глазом, когда они расположены рядом друг с другом.

Давайте посмотрим исходное изображение, с которым мы будем работать сегодня:

Мы используем класс Contrast в FabricJS, чтобы применить контраст к изображениям, загруженным на холст.

  • Первым шагом является добавление нужного изображения с помощью метода fromURL().
  • Нам также нужно установить crossOrigin как "анонимный", чтобы избежать каких-либо исключений.
  • Наконец, мы создаем экземпляр fabric.Image.filters.Contrast и добавляем его в массив фильтров с помощью метода push().
  • Вы можете видеть, что я выполнил описанные выше шаги в приведенном ниже примере кода.

Предыдущая статья: Измените яркость или добавьте шум к изображениям на холсте

     var canvas = new fabric.Canvas("canvas", {
        backgroundColor: "black",
        isDrawingMode: false,
      });

      fabric.Image.fromURL(
        "https://images.unsplash.com/photo-1471922694854-ff1b63b20054?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=872&q=80",
        function (img) {
          img.scale(0.45);
          img.set("top", 15);
          img.set("left", 200);
          img.set("originX", "center");
          img.set("originY", "top");

          // Adding contrast to our image
          img.filters.push(
            new fabric.Image.filters.Contrast({
              contrast: 0.3,
            })
          );

          img.applyFilters();
          canvas.add(img);
        },
        { crossOrigin: "anonymous" }
      );

Вы можете увидеть выходное изображение ниже:

Вы можете видеть на изображении выше, что разница в тоне и яркости между светлыми и темными областями значительно велика.

Следует также отметить, что:

  • Я передал свойству контрастности значение 0,3 в необязательных параметрах объекта.
  • Свойство контрастности принимает значение Число в диапазоне от -1 до 1, которое управляет контрастностью изображения.
  • Значение свойства по умолчанию contrast равно 0.

Добавление эффекта поворота оттенка с помощью FabricJS

Оттенок используется для обозначения чистого спектра цветов. Это не означает яркость цвета, а вместо этого одно значение, обозначающее чистый цвет чего-либо.

Чистый спектр цветов можно увидеть в цветовом круге или, чаще, в радуге.

Вы можете прочитать эту действительно крутую статью, чтобы лучше понять Hue, Value и Color!

Для достижения эффекта чередования оттенков мы используем класс чередования оттенков FabricJS.

Точно так же, как мы создали экземпляр класса Contrast в предыдущем примере, нам нужно создать экземпляр класса fabric.Image.filters.HueRotation. и добавьте его в список фильтров Array.

Нам также нужно передать свойству rotate числовое значение, лежащее где-то между -1 и 1. Это значение поворота оттенка, которое нам нужно в радианах.

      var canvas = new fabric.Canvas("canvas", {
        backgroundColor: "black",
        isDrawingMode: false,
      });

      fabric.Image.fromURL(
        "https://images.unsplash.com/photo-1471922694854-ff1b63b20054?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=872&q=80",
        function (img) {
          img.scale(0.45);
          img.set("top", 15);
          img.set("left", 200);
          img.set("originX", "center");
          img.set("originY", "top");

          // Applying the hue rotation effect
          img.filters.push(
            new fabric.Image.filters.HueRotation({
              rotation: 0.5,
            })
          );

          img.applyFilters();
          canvas.add(img);
        },
        { crossOrigin: "anonymous" }
      );

Вы можете увидеть выходное изображение ниже: