Можно ли анимировать фильтр изображений в Fabric.js? Например, «пиксельный» фильтр.
Можно ли анимировать фильтр в Fabric.js?
Ответы (2)
Я решил это так же, как демо. К сожалению, фильтры нельзя анимировать — для этого требуется слишком много времени на обработку.
Вот мой код:
image = ... //Image, where the filter should be applied
var filter = new fabric.Image.filters.RemoveWhite({
threshold: 0,
distance: 140
});
image.filters.push(filter);
image.applyFilters(canvas.renderAll.bind(canvas));
animate(image,1, 400); //Start the Animation
function animate(image,value, stop){
value += ((stop-value)*0.02); //Change the threshold-value
if (image.filters[0]) {
image.filters[0]['threshold'] = value;
console.log(value);
image.applyFilters(canvas.renderAll.bind(canvas)); //Start creating the new image
if(value<stop-100){
setTimeout(function(){act(image,value,stop);},1);
}
}
}
Я знаю, что код не самый эффективный, но он работает. И вы можете видеть, что анимация фильтров занимает слишком много времени.
(Я протестировал его с изображением 1920x1080px, возможно, вы сможете использовать его с изображениями меньшего размера)
person
maja
schedule
18.11.2013
Использование
fabric.util.requestAnimFrame
, вероятно, было бы более эффективным (вместо ручного рекурсивного setTimeout
)
- person kangax; 18.11.2013
Вот обновленная версия фильтра яркости
var brightnessValue = 0.9;
var brightnessFilter = new fabric.Image.filters.Brightness({
brightness: brightnessValue
});
fabricImage.filters.push(brightnessFilter);
fabric.util.requestAnimFrame(function brightnessFilterAnimation() {
brightnessValue = brightnessValue - 0.04;
brightnessFilter.brightness = brightnessValue;
fabricImage.applyFilters();
if (brightnessValue > 0) {
fabric.util.requestAnimFrame(brightnessFilterAnimation);
}
});
person
antpaw
schedule
12.10.2017
fabric.util.animate
fabricjs.com /docs/symbols/fabric.util.html#.animate) - person kangax   schedule 05.03.2013