用fabric.js实现滤镜效果

2,021 阅读1分钟

首先看下fabric介绍:wnfcw.cn/3415.html 官网: fabricjs.com/fabric-intr… 效果图:

Iv4tKXRZLk.gif 直接上代码: html部分:

<div class="filter-list" @click="filterType">
    <div class="filter-item" data-type='0'>原图</div>
    <div class="filter-item" data-type='1'>灰度</div>
    <div class="filter-item" data-type='2'>底片</div>
    <div class="filter-item" data-type='3'>黑白</div>
    <div class="filter-item" data-type='4'>怀旧</div>
    <div class="filter-item" data-type='5'>模糊</div>
    <div class="filter-item" data-type='6'>老照片</div>
    <div class="filter-item" data-type='7'>混合</div>
    <div class="filter-item" data-type='8'>调和</div>
    <div class="filter-item" data-type='9'>棕仙</div>
    <div class="filter-item" data-type='10'>彩色胶片</div>
    <div class="filter-item" data-type='11'>马赛克</div>
    <div class="filter-item" data-type='12'>宝丽来</div>
    <div class="filter-item" data-type='13'>彩色</div>
</div>

js部分:

filterCan(type){          
    fabric.Image.fromURL('传入图片',(image)=> {
        this.canvas.setWidth(image.width)
        this.canvas.setHeight(image.height)
        // add filter
        switch (type) {
            case '0':
                break; //原图
            case '1': 
                image.filters.push(new fabric.Image.filters.Grayscale());//灰度
                break;
            case '2': 
                image.filters.push(new fabric.Image.filters.Invert()) //底片
                break;
            case '3': 
                image.filters.push(new fabric.Image.filters.BlackWhite()) // 纯黑白
                break;
            case '4': 
                image.filters.push(new fabric.Image.filters.Sepia()) // 復古 怀旧
                break;
            case '5': 
                image.filters.push(new fabric.Image.filters.Blur({
                    blur: 0.5
                })) // 模糊
                break;
            case '6': 
                image.filters.push(new fabric.Image.filters.Vintage()); //老照片
                break;
            case '7': 
                image.filters.push(new fabric.Image.filters.BlackWhite()) // 纯黑白
                image.filters.push(new fabric.Image.filters.Sepia()) // 復古   混合
                break;
            case '8':
                image.filters.push(new fabric.Image.filters.BlendColor()); //盲目的
                break;
            case '9':
                image.filters.push(new fabric.Image.filters.Brownie()); //棕仙
                break;
            case '10':
                image.filters.push(new fabric.Image.filters.Kodachrome()); //彩色胶片
                break;
            case '11':
                image.filters.push(new fabric.Image.filters.Pixelate()); //马赛克
                break;
            case '12':
                image.filters.push(new fabric.Image.filters.Polaroid()); //宝丽来
                break;
            case '13':
                image.filters.push(new fabric.Image.filters.Technicolor()); //彩色
                break;
        }


        // apply filters and re-render canvas when done
        image.applyFilters();
        // add image onto canvas (it also re-render the canvas)
        this.canvas.add(image);
        this.canvas.setActiveObject(image)
        const dataURL = this.canvas.toDataURL({
            format: 'png'
        })
        this.imgUrl = dataURL  //获取添加滤镜后的图片

    });
}