я сделал код, но всегда получаю эту ошибку «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" />
Измените эту строку:
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" />
спасибо за ответ, но это не работает. изображение меняется только на один цвет