CamanJS - 替换实例

9
如果我有一张图片并对其应用滤镜,例如Lomo滤镜,是否有方法将其作为当前的Caman实例?
意思是,如果我想在应用了过滤器的图像上玩弄亮度,并使用this.revert();重置亮度,我希望它恢复到刚刚应用滤镜的画布上。
这可能吗?
我试图应用许多效果,每次只能应用一个(除了预设滤镜),并保持状态...

这可能值得去Github上问一下Caman.js的创建者们:https://github.com/meltingice/CamanJS/issues - Mike 'Pomax' Kamermans
@Mike'Pomax'Kamermans - 谢谢,我已经这样做了,但还没有收到回复。 - StudioTime
你有找到可行的解决方案吗?因为我也在思考这个问题。 - zealoushacker
2个回答

1
如果我理解正确,您想像示例页面上展示的那样应用“Lomo”滤镜,然后调整一些属性(如亮度),然后将更改恢复回“Lomo”滤镜?为什么不只是再次点击“Lomo”滤镜呢?编辑:您应该看看指南并实现自己的方法,带有默认值,就像滤镜一样。
u.Filter.register("lomo", function (D) {
        if (D == null) {
            D = true
        }
        this.brightness(15);
        this.exposure(15);
        this.curves("rgb", [0, 0], [200, 0], [155, 255], [255, 255]);
        this.saturation(-20);
        this.gamma(1.8);
        if (D) {
            this.vignette("50%", 60)
        }
        return this.brightness(5)
    });

我认为您的需求并不是“开箱即用”的。

1
不,我想要应用“Lomo”滤镜,然后可能在滤镜上添加一些亮度和对比度。每次更改(例如亮度),我可能会选择添加亮度值10,但这不够好,所以决定15会更好,为了避免指数级地添加它,它会恢复到原始实例(在这个例子中,避免将15添加到已经有10的图像中,而且,添加10然后再添加-10并不等同于根本不添加)。这会破坏任何更改,例如“Lomo”滤镜设置。 - StudioTime
1
目前我每次应用可能会添加到的内容时都要交换临时图像,但这很麻烦且效率低下。希望这样说得清楚。 - StudioTime
最好的做法可能是实现自己的方法并在其中调整属性。 - terafor
谢谢,但这样做根本行不通,因为我正在使用所有过滤器,几乎所有过滤器(可能是错误的词)例如亮度、对比度等,这就是我的请求的全部意义。跟踪状态很棘手。虽然不是不可能,但比我想象的要复杂得多。 - StudioTime
你不能只调用一个缓存每个设置的函数,然后将这些设置和你的新调整重新应用(注册?)到同一张图片上吗? - PHearst

0

如果我理解正确,您想要应用一些过滤器并使用其他效果,例如亮度和对比度等。
我编写了一些代码,可以根据您的需求工作。

 Caman('#canvas-camanImage',"./../media/caman.png", function () {
        this.revert(false);
        for(var i = 0 ;i<selectedPresets.length;i++){
            this[selectedPresets[i]]();
        }
        for(var key in effect){
            this[key](effect[key].value);
        }
        this.render(function () {
        });

在上面的代码中,我将所有效果(如亮度、对比度)存储在effect变量中,例如:effect = { brightness : { min : -100, max: 100, value : 0 }, contrast : { min : -100, max: 100, value : 0 }, saturation : { min : -100, max: 100, value : 0 } };

并将预设存储在一个数组中。

presets = [
    {filter:'vintage',name : 'Vintage'},
    {filter:'lomo',name:'Lomo'},
    {filter: 'clarity', name:'Clarity'},
    {filter:'sinCity', name:'Sin City'}
    ];

所以每次您添加任何预设或更改任何效果值时,我都会更改变量中的值并重新渲染画布。
对我来说它运作得非常好。
如果您有其他问题,请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接