登录  /  注册
博主信息
博文 11
粉丝 0
评论 3
访问量 45842
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
介绍几个前端使用的滤镜库
刘佳俊的博客
原创
2770人浏览过

八月是一个神奇的月份,我应该安分写点服务端的事情,不料需要写个前端的页面,需要用到js对图片进行滤镜处理。不得不说js很强。我大致说一下怎么处理,将图片转换成canvas,并且同时得到图片的数据,滤镜就是对图片的数据进行处理,然后再将处理好的数据在装换成canvas,根据需要再将canvas转换成图片('.png','.jpg')格式之类的。

所以说图片压缩也就是这样来的,将图片的转为canvas,drawImage这个方法很灵活,可以裁剪之类的,所以也就能发图片缩放了,在转为base64,传到服务器上,得到图片。但是的说一下,应该传过去的图片带有 'data:image/jpeg;base64,'之类的信息,所以后台需要将str_replace('data:image/jpeg;base64,', '', $base64);处理一下,再将base64数据base64_decode处理一下写进文件就可以了

好像有点跑题,多说了几句。略略略............

------------------------------------------------------开始正题--------------------------------------------------------------

  •   glfx.js。给出官方的demo,自己慢慢欣赏  https://evanw.github.io/glfx.js/demo/。这个确实不错,我用的本来就是这个,但是后面遇到了一些问题,不得不改变策略。后面会说。抄袭一下他的代码

  1. window.onload = function() {
        // try to create a WebGL canvas (will fail if WebGL isn't supported)
        try {
            var canvas = fx.canvas();
        } catch (e) {
            alert(e);
            return;
        }
        // convert the image to a texture
        var image = document.getElementById('image');
        var texture = canvas.texture(image);
        // apply the ink filter
        canvas.draw(texture).ink(0.25).update();
        // replace the image with the canvas
        image.parentNode.insertBefore(canvas, image);
        image.parentNode.removeChild(image);
        // Note: instead of swapping the <canvas> tag with the <img> tag
        // as done above, we could have just transferred the contents of
        // the image directly:
        //
        //     image.src = canvas.toDataURL('image/png');
        //
        // This has two disadvantages. First, it is much slower, so it
        // would be a bad idea to do this repeatedly. If you are going
        // to be repeatedly updating a filter it's much better to use
        // the <canvas> tag directly. Second, this requires that the
        // image is hosted on the same domain as the script because
        // JavaScript has direct access to the image contents. When the
        // two tags were swapped using the previous method, JavaScript
        // actually doesn't have access to the image contents and this
        // does not violate the same origin policy.
    };
    </script>
    <img id="image" src="image.jpg">

    这是文档里的demo,很简单就可以实现墨水的效果,想要更多的效果就看看文档就会有不一样滤镜啦。

     是不是很强?但是你会遇到一个问题就是canvas 转换成 img的时候,你用demo里说的写image.src = canvas.toDataURL('image/png');这个时候会发现根本没有转换,要是看到这里的话,很幸运这个坑我帮你踩了。正确的写法是:image.src = canvas.update().toDataURL('image/png');

        另外说说用这个插件不好的地方吧。其实我之前做的是移动端,所以各种问题,这个也就说移动端的问题。我的安卓手机比较垃圾,所以拍照选取的图片就没法显示出来,黑不溜秋的,尝试用压缩之类的也没有解决。但是手机比较强大的自然也就没问题了。IOS的情况也不容乐观有的可以有的不行。所以很糟糕。另外需要提醒一点的,就是这种图片加载的很多都是异步的。什么意思的呢,就是加载图片还在进行中,你就对加载完成的图片进行处理,自然没有结果的。所以说手机拍照的图片又几M,是不是加载的问题导致没法显示呢。我觉得可能,但不完全是。具体原因还要真的去摸索一下是什么原因。图片太大,加载速度比执行速度慢?还是手机不支持?还是其他原因。要是真研究出来原因了可以告诉我。

  • lena.js。传送地址:https://fellipe.com/demos/lena-js/。这个我也没有研究,想要的试探一下就自己研究一下吧

  • 用原生js实现的六种滤镜。传送地址:https://www.jb51.net/article/39210.htm。用它的例子的话,你会发现他的滤镜效果是叠加的。不要叠加怎么办,也很简单,就是吧原始的数据记录下来,每次切换滤镜的时候先换成原始的图片就可以了

    以上就是我要介绍的

    本人水平有限,不足之处还望海涵

本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学