目次
开始操作
ホームページ ウェブフロントエンド 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 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

    完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    HTMLボタン要素を使用してクリック可能なボタンを実装します HTMLボタン要素を使用してクリック可能なボタンを実装します Jul 07, 2025 am 02:31 AM

    HTMLボタン要素を使用してクリック可能なボタンを実現するには、まずその基本的な使用法と一般的な予防策を習得する必要があります。 1.デフォルトで送信されるタイプ属性(ボタン、送信、リセットなど)を使用してタグを使用してボタンを作成し、動作を定義します。 2. JavaScriptを介してインタラクティブな関数を追加します。これは、IDを介してインラインまたはバインドイベントリスナーを作成してメンテナンスを改善することができます。 3. CSSを使用して、バックグラウンドカラー、ボーダー、丸いコーナー、ホバー/アクティブステータス効果などのスタイルをカスタマイズして、ユーザーエクスペリエンスを強化します。 4.一般的な問題に注意してください:無効な属性が有効になっていないことを確認し、JSイベントが正しくバインドされ、レイアウトオクルージョンがあり、開発者ツールのヘルプを使用して例外をトラブルシューティングします。これをマスターします

    HTMLヘッド要素内のドキュメントメタデータの構成 HTMLヘッド要素内のドキュメントメタデータの構成 Jul 09, 2025 am 02:30 AM

    htmlheadのメタデータは、SEO、ソーシャル共有、ブラウザの動作にとって重要です。 1.ページのタイトルと説明を設定し、使用して簡潔で一意に保ちます。 2.オープングラフとツイッターのカード情報を追加してソーシャル共有効果を最適化し、画像サイズに注意を払い、デバッグツールを使用してテストします。 3.文字セットとビューポート設定を定義して、多言語サポートがモバイル端末に適合していることを確認します。 4.著者の著作権、ロボット制御、および標準的な防止コンテンツなどのオプションのタグも合理的に構成する必要があります。

    HTMLフィギュアとFigcaption要素を使用して、キャプションを画像やメディアに関連付ける方法は? HTMLフィギュアとFigcaption要素を使用して、キャプションを画像やメディアに関連付ける方法は? Jul 07, 2025 am 02:30 AM

    HTML合計を使用すると、直感的でセマンティックな明確さが可能になり、画像またはメディアにキャプションテキストを追加できます。 1。写真、ビデオ、コードブロックなどの独立したメディアコンテンツをラップするために使用されます。 2。説明テキストとして配置され、メディアの上または下に配置できます。 3.ページ構造の明確さを改善するだけでなく、アクセシビリティとSEO効果も向上します。 4.それを使用する場合、虐待を避けるために注意を払い、通常の装飾的な写真ではなく、説明を強調し、伴う必要があるコンテンツに適用する必要があります。 5.無視できないalt属性。これはfigcaptionとは異なります。 6.フィマは柔軟で、必要に応じて図の上または下部に配置できます。これらの2つのタグを正しく使用すると、セマンティックで理解しやすいWebコンテンツの構築に役立ちます。

    HTMLで最も一般的に使用されるグローバル属性は何ですか? HTMLで最も一般的に使用されるグローバル属性は何ですか? Jul 10, 2025 am 10:58 AM

    クラス、ID、スタイル、データ、およびタイトルは、HTMLで最も一般的に使用されるグローバル属性です。クラスは、スタイル設定とJavaScript操作を容易にするために、1つ以上のクラス名を指定するために使用されます。 IDは、アンカージャンプとJavaScriptコントロールに適した要素の一意の識別子を提供します。スタイルを使用すると、インラインスタイルを追加できます。一時的なデバッグに適していますが、大規模な使用にはお勧めしません。データプロパティは、フロントエンドとバックエンドの相互作用に便利なカスタムデータの保存に使用されます。タイトルはマウスオーバープロンプトを追加するために使用されますが、そのスタイルと動作はブラウザによって制限されます。これらの属性の合理的な選択は、開発効率とユーザーエクスペリエンスを改善できます。

    HTMLのリンクRel PrefetchとPreloadの違いは何ですか? HTMLのリンクRel PrefetchとPreloadの違いは何ですか? Jul 07, 2025 am 02:22 AM

    Rel = "Preload"は、現在のページで非常に必要な優先度の高いリソースに使用されますが、Rel = "Prefett"は、将来必要になる可能性のある低優先度リソースに使用されます。 1.REL = "Preload"は、現在のページのレンダリング速度を改善するために、フォント、スクリプト、スタイルシートなどの主要なリソースをすぐにダウンロードするようブラウザに指示します。 2.REL = "Prefetch"は、ブラウザが次のページのCSSやJSファイルなど、アイドル状態の場合に使用できるリソースをダウンロードできるようにするプロンプトとして機能します。どちらも負荷のパフォーマンスを最適化するように設計されていますが、さまざまなシナリオに適用でき、誤った使用は帯域幅の廃棄物や性能の低下につながる可能性があります。

    HTMLの画像のネイティブレイジーロードを実装します HTMLの画像のネイティブレイジーロードを実装します Jul 12, 2025 am 12:48 AM

    ネイティブLazyロードは、タグにロード= "lazy"属性を追加することにより、写真の怠zyなロードを可能にする組み込みブラウザー機能です。 1. JavaScriptまたはサードパーティライブラリを必要とせず、HTMLで直接使用されます。 2。ページの下の最初の画面に表示されない写真、画像ギャラリーはアドオンをスクロールし、大規模な写真リソースに適しています。 3.最初の画面またはディスプレイを備えた写真には適していません。 4。それを使用する場合、レイアウトジッターを避けるために適切なプレースホルダーを設定する必要があります。 5。SRCSETおよびサイズの属性と組み合わせて、レスポンシブな画像の読み込みを最適化する必要があります。 6。互換性の問題を考慮する必要があります。一部の古いブラウザはそれをサポートしていません。これらは、機能検出を通じて使用し、JavaScriptソリューションと組み合わせることができます。

    HTML Textareaと入力タイプのテキストの違いとユースケースは何ですか? HTML Textareaと入力タイプのテキストの違いとユースケースは何ですか? Jul 12, 2025 am 02:48 AM

    主な違いは、Textareaが複数のテキスト入力をサポートし、inputTextは単一行でのみ使用できることです。 1。inputtype= "テキスト"を使用して、ユーザー名、電子メールアドレスなどなどの短いおよび単一ラインのユーザー入力に適しており、最大長を設定して文字の数を制限できます。ブラウザは自動充填機能を提供するため、ブラウザ全体で均一にスタイルを整えることができます。 2。コメントボックス、フィードバックフォーム、サポートラインブレーク、パラグラフなど、複数の入力を必要とするシナリオには、Textareaを使用し、CSSを介してサイズを制御したり、調整機能を無効にしたりできます。どちらもプレースホルダーや必要な塗りつぶしなどのサポートフォームの機能ですが、Textareaは行とcolを介してサイズを定義し、入力はサイズ属性を使用します。

    HTML Aタグを使用してナビゲーションのハイパーリンクを作成します HTML Aタグを使用してナビゲーションのハイパーリンクを作成します Jul 11, 2025 am 03:03 AM

    HTMLタグを使用して、HREF属性を使用して、ページジャンプを実現し、新しいウィンドウを開く、ページ内の配置、電子メールおよび電話リンクの機能を実現できます。 1。基本的な使用法:Webページへのアクセスなど、HREFを介してターゲットアドレスを指定します。 2。新しいウィンドウを開きます:ターゲットを追加= "_ blank"およびrel = "noopener"属性。 3.ページ内にジャンプします:IDと#シンボルを結合して、アンカーポイントの位置決めを実現します。 4。電子メール電話リンク:MailTo:またはTel:Protocolを使用してシステムアプリケーションをトリガーします。

    See all articles