Фильтр Fabricjs

я сделал код, но всегда получаю эту ошибку «TypeError: (промежуточное значение) (промежуточное значение) .filter не является функцией в i.applyFilters»

var canvas = new fabric.Canvas('c');

fabric.Image.fromURL('https://upload.wikimedia.org/wikipedia/en/a/a9/Example.jpg', function(img) {
  var oImg = img.set({
    left: 50,
    top: 50
  });
  canvas.add(oImg).renderAll();
  canvas.setActiveObject(oImg);
}, {
  crossOrigin: 'anonymous'
});

function applyFilter(index, filter) {
  var obj = canvas.getActiveObject();
  obj.filters[index] = filter;
  obj.applyFilters(canvas.renderAll.bind(canvas));
}

var f = fabric.Image.filters;

document.getElementById("input").onchange = function() {
  applyFilter(0, new f.Contrast({
    contrast: parseInt(document.getElementById("input").value, 10)
  }));
};
<canvas width=600 height=400 id="c"></canvas>
<input id="input" type="range" min="-255" max="255" value="0" />

# fabricjs
Источник
Codelisting
за 0 против

Измените эту строку:

obj.applyFilters(canvas.renderAll.bind(canvas));

К

obj.applyFilters();
canvas.renderAll();

Кроме того, фильтр контрастности принимает значения только от -1 до 1 (см. Http://fabricjs.com/docs/fabric.Image.filters.Contrast.html ), поэтому измените эту строку:

<input id="input" type="range" min="-255" max="255" value="0" />

К этому:

<input id="input" type="range" min="-100" max="100" value="0" />

А затем разделите полученное значение на 100.

parseInt(document.getElementById("input").value, 10) / 100

var canvas = new fabric.Canvas('c');

fabric.Image.fromURL('https://upload.wikimedia.org/wikipedia/en/a/a9/Example.jpg', function(img) {
  var oImg = img.set({
    left: 50,
    top: 50
  });
  canvas.add(oImg).renderAll();
  canvas.setActiveObject(oImg);
}, {
  crossOrigin: 'anonymous'
});

function applyFilter(index, filter) {
  var obj = canvas.getActiveObject();
  obj.filters[index] = filter;
  obj.applyFilters();
  canvas.renderAll();
}

var f = fabric.Image.filters;

document.getElementById("input").onchange = function() {
  applyFilter(0, new f.Contrast({
    contrast: parseInt(document.getElementById("input").value, 10) / 100
  }));
};
<script src="https://unpkg.com/[email protected]/dist/fabric.js"></script>
<canvas width=600 height=400 id="c"></canvas>
<input id="input" type="range" min="-100" max="100" value="0" />

за 0 против

спасибо за ответ, но это не работает. изображение меняется только на один цвет

  • 0
    Я отредактировал свой ответ, поскольку применяемые значения фильтра также выходили за пределы допустимого диапазона. Также для подобных комментариев используйте функцию комментариев, а не размещайте ее в качестве ответа.
Codelisting
Популярные категории
На заметку программисту