Вход Регистрация
Файл: concrete5.7.5.6/concrete/js/image-editor/filters/vignette.js
Строк: 119
<?php
var buildBezier = function (start, ctrl1, ctrl2, end, lowBound, highBound) {
    var 
Ax, Ay, Bx, By, Cx, Cy, bezier, curveX, curveY, i, j, leftCoord, rightCoord, t, x0, x1, x2, x3, y0, y1, y2, y3, _i, _j, _k, _ref, _ref1;
    
x0 = start[0];
    
y0 = start[1];
    
x1 = ctrl1[0];
    
y1 = ctrl1[1];
    
x2 = ctrl2[0];
    
y2 = ctrl2[1];
    
x3 = end[0];
    
y3 = end[1];
    
bezier = {};
    
Cx = parseInt(3 * (x1 - x0), 10);
    
Bx = 3 * (x2 - x1) - Cx;
    
Ax = x3 - x0 - Cx - Bx;
    
Cy = 3 * (y1 - y0);
    
By = 3 * (y2 - y1) - Cy;
    
Ay = y3 - y0 - Cy - By;
    for (
i = _i = 0; _i < 1000; i = ++_i) {
        
t = i / 1000;
        
curveX = Math.round((Ax * Math.pow(t, 3)) + (Bx * Math.pow(t, 2)) + (Cx * t) + x0);
        
curveY = Math.round((Ay * Math.pow(t, 3)) + (By * Math.pow(t, 2)) + (Cy * t) + y0);
        if (
lowBound && curveY < lowBound) {
            
curveY = lowBound;
        } else if (
highBound && curveY > highBound) {
            
curveY = highBound;
        }
        
bezier[curveX] = curveY;
    }
    if (
bezier.length < end[0] + 1) {
        for (
i = _j = 0, _ref = end[0]; 0 <= _ref ? _j <= _ref : _j >= _ref; i = 0 <= _ref ? ++_j : --_j) {
            if (!(
bezier[i] != null)) {
                
leftCoord = [i - 1, bezier[i - 1]];
                for (
j = _k = i, _ref1 = end[0]; i <= _ref1 ? _k <= _ref1 : _k >= _ref1; j = i <= _ref1 ? ++_k : --_k) {
                    if (
bezier[j] != null) {
                        
rightCoord = [j, bezier[j]];
                        break;
                    }
                }
                
bezier[i] = leftCoord[1] + ((rightCoord[1] - leftCoord[1]) / (rightCoord[0] - leftCoord[0])) * (i - leftCoord[0]);
            }
        }
    }
    if (!(
bezier[end[0]] != null)) {
        
bezier[end[0]] = bezier[end[0] - 1];
    }
    return 
bezier;
};

var 
vignette = function (data, stuff, size, strength) {
    var 
width = data.width,
        
height = data.height,
        
bezier, center, end, start;
    if (
strength == null) {
        
strength = 60;
    }

    if (
typeof size === 'string' && size.substr(-1) === "%") {
        
size = Math.min(width, height) * Number(size.substr(0, size.length - 1)) / 100;
    }
    
strength /= 100;
    
center = [width / 2, height / 2];
    
start = Math.sqrt(Math.pow(center[0], 2) + Math.pow(center[1], 2));
    
end = start - size;
    
bezier = buildBezier([0, 1], [30, 30], [70, 60], [100, 80]);
    for (var 
i = 0, l = data.data.length; i < l; i += 4) {
        var 
dist, div, loc;
        
loc = {x: (i / 4) % width, y: Math.floor((i / 4) / width)};
        
dist = Math.sqrt(Math.pow(center[0] - loc.x, 2) + Math.pow(center[1] - loc.y, 2));
        if (
dist > end) {
            
div = Math.max(1, (bezier[Math.round(((dist - end) / size) * 100)] / 10) * strength);
            
data.data[i] = Math.pow(data.data[i] / 255, div) * 255;
            
data.data[i + 1] = Math.pow(data.data[i + 1] / 255, div) * 255;
            
data.data[i + 2] = Math.pow(data.data[i + 2] / 255, div) * 255;
        }
    }
};

var 
me = this;
im.bind('filterFullyLoaded', function (e, data) {
    if (
data.im.namespace === me.im.namespace) {
        
//This is me, start initialization.
    
}
});
im.bind('filterChange', function (e, data) {
    if (
data.im.namespace === me.im.namespace) {
        
im.showLoader('Applying Vignette');

        
_.defer(function () {
            
// Just apply, there is no variation.

            
updateVignette();
            
// Apply Filter
        
}); // Allow loader to show
    
}
});
im.bind('filterApplyExample', function (e, data) {
    if (
data.namespace === me.im.namespace) {
        
data.image.setFilter(_.partial(vignette, _, _, '50%', '50'));
        
im.fire('filterBuiltExample', me, data.elem);
    }
});

var 
updateVignette = _.debounce(function() {
    $.
fn.dialog.showLoader();
    
im.activeElement.setFilter(_.partial(vignette, _, _, size_slider.slider('value') + '%', strength_slider.slider('value')));
    
im.activeElement.applyFilter();
    $.
fn.dialog.hideLoader();

    
im.fire('VignetteFilterDidFinish');
    
im.fire('filterApplied', me);
}, 
250);

var 
elem = im.controlContext.find('.filter.filter-vignette');
var 
strength_percent = elem.find('.strength-percent');
var 
strength_slider = elem.find('.strength-slider').slider({
    
value: 60,
    
step: 1,
    
max: 100,
    
min: 1,
    
slide: function(event, data) {
        
updateVignette();
        
strength_percent.text(data.value + '%');
    }
});
var 
size_percent = elem.find('.size-percent');
var 
size_slider = elem.find('.size-slider').slider({
    
value: 50,
    
step: 1,
    
max: 100,
    
min: 1,
    
slide: function(event, data) {
        
updateVignette();
        
size_percent.text(data.value + '%');
    }
});
?>
Онлайн: 2
Реклама