目錄
开始操作
首頁 web前端 js教程 JavaScript實現簡單的Ps濾鏡效果(附程式碼)

JavaScript實現簡單的Ps濾鏡效果(附程式碼)

Mar 16, 2019 am 10:30 AM
html javascript

本篇文章给大家带来的内容是关于JavaScript实现简单的Ps滤镜效果(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

效果预览

JavaScript實現簡單的Ps濾鏡效果(附程式碼)

思路

其实非常非常赶单~
CSS3多了一个filter的属性,非常强大(兼容性一般)!
我们只要根据输入的值/滑块滑动的值来动态更改css中filter属性的值即可

filter

  • none    默认值,没有效果。
  • blur(px)    给图像设置高斯模糊。"radius"一值设定高斯函数的标准差,或者是屏幕上以多少像素融在一起, 所以值越大越模糊;不接受百分比值。
  • brightness(%)    给图片应用一种线性乘法,使其看起来更亮或更暗。如果值是0%,图像会全黑。值是100%,则图像无变化。其他的值对应线性乘数效果。值超过100%也是可以的,图像会比原来更亮。如果没有设定值,默认是1。
  • contrast(%)    调整图像的对比度。值是0%的话,图像会全黑。值是100%,图像不变。值可以超过100%,意味着会运用更低的对比。若没有设置值,默认是1。
  • drop-shadow(h-shadow v-shadow blur spread color)    给图像设置一个阴影效果。阴影是合成在图像下面,可以有模糊度的,可以以特定颜色画出的遮罩图的偏移版本。 函数接受(在CSS3背景中定义)类型的值,除了"inset"关键字是不允许的。该函数与已有的box-shadow box-shadow属性很相似;不同之处在于,通过滤镜,一些浏览器为了更好的性能会提供硬件加速
  • grayscale(%)    将图像转换为灰度图像。值定义转换的比例。值为100%则完全转为灰度图像,值为0%图像无变化。值在0%到100%之间,则是效果的线性乘子。若未设置,值默认是0;
  • hue-rotate(deg)    图像应用色相旋转。"angle"一值设定图像会被调整的色环角度值。值为0deg,则图像无变化。若值未设置,默认值是0deg。该值虽然没有最大值,超过360deg的值相当于又绕一圈。
  • invert(%)    反转输入图像。值定义转换的比例。100%的价值是完全反转。值为0%则图像无变化。值在0%和100%之间,则是效果的线性乘子。 若值未设置,值默认是0。
  • opacity(%)    转化图像的透明程度。值定义转换的比例。值为0%则是完全透明,值为100%则图像无变化。值在0%和100%之间,则是效果的线性乘子,也相当于图像样本乘以数量。 若值未设置,值默认是1。该函数与已有的opacity属性很相似,不同之处在于通过filter,一些浏览器为了提升性能会提供硬件加速。
  • saturate(%)    转换图像饱和度。值定义转换的比例。值为0%则是完全不饱和,值为100%则图像无变化。其他值,则是效果的线性乘子。超过100%的值是允许的,则有更高的饱和度。 若值未设置,值默认是1。
  • sepia(%)     将图像转换为深褐色。值定义转换的比例。值为100%则完全是深褐色的,值为0%图像无变化。值在0%到100%之间,则是效果的线性乘子。若未设置,值默认是0;
  • url() URL函数接受一个XML文件,该文件设置了 一个SVG滤镜,且可以包含一个锚点来指定一个具体的滤镜元素。

使用直接就这样

img {
    -webkit-filter: contrast(200%); /* Chrome, Safari, Opera */
    filter: contrast(200%) opacity(0.5) //要多少属性加多少;
}

开始操作

  • 写一个过滤属性滑块和输入框,互相绑定值,如果用vue就简单了hhh
//html
     
  •                          
  • //js //注册过滤器 function filter(type) {   //获取滤镜类型关联的dom节点   //绑定change事件,还有回车按键事件      let ele = document.getElementById(type);   let ele_val = document.getElementById(type + '-val');   //输入框输入值按下回车,把值更新到滑块上   ele_val.addEventListener('keyup',function(e){     if(e.keyCode == 13){     ele.value = ele_val.value;     //同时更新滤镜效果     setCss(type, ele_val.value);     }   })      //滑块滑动的时候,把值更新在右边的输入框中   ele.addEventListener('change', function() {     ele_val.value = ele.value;     //同时更新滤镜效果     setCss(type, ele_val.value);   }); }
    • 写一个文件选择,预览图片
    //html
    <input>
    <!-- 图片预览框 -->
    <p>
        <img  src="/static/imghw/default1.png" data-src="" class="lazy" alt="JavaScript實現簡單的Ps濾鏡效果(附程式碼)" >
    </p>
    //选择文件
    function fileSelect() {
      let img = document.getElementById('img');
      document.getElementById('file').onchange = function() {
        var reader = new FileReader();
        reader.onload = function(e) {
          img.src = e.target.result;
        }
        reader.readAsDataURL(this.files[0]);
      }
    }
    • 写一个根据输入值更新CSS的方法
    //更新css属性
    function setCss(type, val) {
      let img = document.getElementById('img');
      //已经存在某个滤镜,更改滤镜数值
      if (img.style.filter.indexOf(type) > -1) {
        //利用正则则出滤镜名称更改其值
        let reg = new RegExp("(?<p style="white-space: normal;">注意</p><p>由于这个demo只是随便写写,只是前几天用到这个filter属性感觉有点厉害,就拿来玩玩,文中的代码写得很丑,也没什么规范,只适用于‘写来玩玩’的范畴,一些输入验证,节流,参数的规范都没有做,见谅。<br>本来还打算做一个导出使用滤镜后的照片的,用的html2canvas来截图导出,然后发现,它不支持!!!不支持这个css属性!!截出来的图是原图!这可是真的难受啊马飞,现在还没有解决方案,如果有大佬知道如何保存使用滤镜后的图片到本地的,请在评论区留下您的想法,非常感谢!</p><p>辣鸡源码</p><pre class="brush:php;toolbar:false">nbsp;html>
    
    
    
      <meta>
      <title>photoshop-web</title>
    
    
    
      
          
    •                          
    •     
    •                          
    •     
    •                          
    •     
    •                          
    •     
    •                          
    •     
    •                          
    •   
            

        JavaScript實現簡單的Ps濾鏡效果(附程式碼)   

    <script> //选择文件 function fileSelect() { let img = document.getElementById(&#39;img&#39;); document.getElementById(&#39;file&#39;).onchange = function() { var reader = new FileReader(); reader.onload = function(e) { img.src = e.target.result; } reader.readAsDataURL(this.files[0]); } } //重置效果 function reset() { let reset_btn = document.getElementById(&#39;reset&#39;); let val_boxes = document.getElementsByClassName(&#39;val-box&#39;); let val_arr = Array.prototype.slice.call(val_boxes); let img = document.getElementById(&#39;img&#39;); reset_btn.addEventListener(&#39;click&#39;, function() { //所有的数据输入重置为空 val_arr.forEach(function(item) { item.value = ""; }); //去掉图片的css属性 img.style.filter = ""; }) } //注册过滤器 function filter(type) { //获取滤镜类型关联的dom节点 //绑定change事件 //更改右侧输入框的显示的值,以及更新滤镜效果 let ele = document.getElementById(type); let ele_val = document.getElementById(type + &#39;-val&#39;); ele_val.addEventListener(&#39;keyup&#39;,function(e){ if(e.keyCode == 13){ ele.value = ele_val.value; setCss(type, ele_val.value); } }) ele.addEventListener(&#39;change&#39;, function() { ele_val.value = ele.value; setCss(type, ele_val.value); }); } //更新css属性 function setCss(type, val) { let img = document.getElementById(&#39;img&#39;); //已经存在某个滤镜,更改滤镜数值 if (img.style.filter.indexOf(type) > -1) { let reg = new RegExp("(?<=" + type + ")" + "\\(.*\\)", "g") img.style.filter = img.style.filter.replace(reg, function(match) { return `(${val/100})` }); } else { //直接添加新滤镜 img.style.filter += `${type}(${val/100})` } } window.onload = function() { //亮度 filter(&#39;brightness&#39;); //对比度 filter(&#39;contrast&#39;); //灰度 filter(&#39;grayscale&#39;); //饱和度 filter(&#39;saturate&#39;); //透明度 filter(&#39;opacity&#39;); //反相 filter(&#39;invert&#39;); //注册重置 reset(); //注册文件选择 fileSelect(); } </script>

    以上是JavaScript實現簡單的Ps濾鏡效果(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱AI工具

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Stock Market GPT

    Stock Market GPT

    人工智慧支援投資研究,做出更明智的決策

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    熱門話題

    什麼是語義HTML 什麼是語義HTML Sep 25, 2025 am 02:37 AM

    SemanticHTMLusesmeaningfultagslikearticle,section,nav,andmaintoclearlydefinecontentstructureforbothdevelopersandbrowsers.Theseelementsimproveaccessibilitybyenablingscreenreaderstointerpretpagelayouteffectively,enhanceSEOthroughbettercontentorganizati

    如何在HTML中自動播放視頻 如何在HTML中自動播放視頻 Sep 25, 2025 am 05:04 AM

    要實現視頻自動播放,必須將視頻靜音。使用autoplay和muted屬性可確保HTML視頻在現代瀏覽器中自動播放,如需循環播放可添加loop屬性,若移除controls則不顯示控制條。

    如何在HTML中創建簡單的圖像庫 如何在HTML中創建簡單的圖像庫 Sep 25, 2025 am 01:20 AM

    創建HTML結構,使用div容器和img標籤添加圖片;2.用CSS設置flex或grid佈局,調整間距與樣式;3.通過媒體查詢實現響應式設計;4.可選添加帶文字的圖片容器以顯示標題。

    HTML中的Q和BlockQuote標籤有什麼區別? HTML中的Q和BlockQuote標籤有什麼區別? Sep 25, 2025 am 06:14 AM

    q標籤用於短小的內聯引用,適合句子中的簡短引語,瀏覽器通常自動添加引號;2.blockquote標籤用於獨立的長段引用,常帶縮進以視覺區分,支持cite屬性標註來源;3.選擇q或blockquote應根據引文長度和上下文,兩者均提升內容語義化與可訪問性。

    HTML中圖像的ALT屬性是什麼? HTML中圖像的ALT屬性是什麼? Sep 25, 2025 am 02:39 AM

    Thealtattributeprovidestextdescriptionsforimages,aidingaccessibilitybyhelpingscreenreadersconveyimagecontenttovisuallyimpairedusers,displayingfallbacktextifimagesfailtoload,andimprovingSEObyinformingsearchenginesaboutimagecontent.Itshouldbeconciseand

    Chrome瀏覽器如何導入其他瀏覽器的書籤_Chrome導入書籤數據操作指南 Chrome瀏覽器如何導入其他瀏覽器的書籤_Chrome導入書籤數據操作指南 Sep 25, 2025 am 10:18 AM

    首先通過Chrome內置的“導入書籤和設置”功能可直接遷移其他瀏覽器數據;其次若已有HTML格式書籤文件,可通過書籤管理器導入;最後還可手動複製原瀏覽器書籤文件並轉換為HTML後導入。

    Chrome瀏覽器怎麼設置打印時去掉頁眉頁腳_打印頁面頁眉頁腳隱藏方法 Chrome瀏覽器怎麼設置打印時去掉頁眉頁腳_打印頁面頁眉頁腳隱藏方法 Sep 25, 2025 am 09:54 AM

    1、打開網頁打印界面,點擊“更多設置”並取消勾選“頁眉和頁腳”即可去除自動添加的網址、日期等信息。 2、通過在網頁代碼中添加@mediaprint{@page{margin:0}}的CSS樣式,可清除默認邊距與頁眉頁腳。 3、安裝如PrintEdit等第三方打印擴展程序,能更靈活編輯打印內容並禁用默認頁眉頁腳。

    如何處理HTML中的事件? 如何處理HTML中的事件? Sep 25, 2025 am 04:17 AM

    HandlingeventsinHTMLinvolvesrespondingtouseractionsusinginlineattributesorJavaScriptlisteners;2.Inlinemethodslikeonclickaresimplebutmixcode,makingthemunsuitableforlargeprojects;3.JavaScript’saddEventListenerprovidesbetterseparation,flexibility,andmai

    See all articles