整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          利用CSS filter的屬性給img修改顏色

          果圖:

          所有代碼:

          置CSS3 filter(濾鏡) 屬性

          • filter 屬性定義了元素(通常是<img>)的可視效果(例如:模糊與飽和度)。
          • blur(px) 給圖像設置高斯模糊。"radius"一值設定高斯函數的標準差,或者是屏幕上以多少像素融在一起, 所以值越大越模糊;
          • grayscale(%) 將圖像轉換為灰度圖像。值定義轉換的比例。值為100%則完全轉為灰度圖像,值為0%圖像無變化。值在0%到100%之間,則是效果的線性乘子。若未設置,值默認是0;
          • invert(%) 反轉輸入圖像。值定義轉換的比例。100%的價值是完全反轉。值為0%則圖像無變化。值在0%和100%之間,則是效果的線性乘子。 若值未設置,值默認是0。
          • sepia(%) 將圖像轉換為深褐色。值定義轉換的比例。值為100%則完全是深褐色的,值為0%圖像無變化。值在0%到100%之間,則是效果的線性乘子。若未設置,值默認是0;
          .none {
              -webkit-filter: none;
              filter: none;
          }
          
          .blur {
              -webkit-filter: blur(3px);
              filter: blur(3px);
          }
          
          .grayscale {
              -webkit-filter: grayscale(1);
              filter: grayscale(1);
          }
          
          .invert {
              -webkit-filter: invert(1);
              filter: invert(1);
          }
          
          .sepia {
              -webkit-filter: sepia(1);
              filter: sepia(1);
          }
          
          button#snapshot {
              margin: 0 10px 25px 0;
              width: 110px;
          }
          
          video {
              object-fit: cover;
          }

          獲取元素

          • Document方法querySelector(), 返回Element文檔中與指定選擇器或選擇器組匹配的第一個。如果未找到匹配項,null則返回。
          • 匹配是使用文檔節點的深度優先預序遍歷完成的,從文檔標記中的第一個元素開始,并按子節點數量的順序迭代順序節點。
          const filterSelect = document.querySelector('select#filter');
          const video = window.video = document.querySelector('video');

          綁定change事件

          • 當元素的值發生改變時,會發生 onchange 事件。
          • 該事件類似于 oninput 事件。不同之處在于 oninput 事件在元素值改變后立即發生,而 onchange 在元素失去焦點而內容發生改變后發生。另一個區別是 onchange 事件也適用于 <select> 元素。
          filterSelect.onchange = function() {
            video.className = filterSelect.value;
          };

          獲取音視頻軌道

          • MediaDevices.getUserMedia() 會提示用戶給予使用媒體輸入的許可,媒體輸入會產生一個MediaStream,里面包含了請求的媒體類型的軌道。此流可以包含一個視頻軌道(來自硬件或者虛擬視頻源,比如相機、視頻采集設備和屏幕共享服務等等)、一個音頻軌道(同樣來自硬件或虛擬音頻源,比如麥克風、A/D轉換器等等),也可能是其它軌道類型。
          • 它返回一個 Promise對象,成功后會resolve回調一個 MediaStream 對象。若用戶拒絕了使用權限,或者需要的媒體源不可用,promisereject回調一個 PermissionDeniedError 或者 NotFoundError
          navigator.mediaDevices.getUserMedia({
              audio: false,
              video: true
          }).then(handleSuccess).catch(handleError);
          
          function handleSuccess(stream) {
            video.srcObject = stream;
          }
          
          function handleError(error) {
            console.log('navigator.MediaDevices.getUserMedia error: ', error.message, error.name);
          }

          HTML

          <!DOCTYPE html>
          <html>
          <head>
              <meta charset="utf-8">
              <link rel="stylesheet" href="./index.css">
          </head>
          
          <body>
          <video playsinline autoplay></video>
          <label for="filter">Filter: </label>
          <select id="filter">
              <option value="none">None</option>
              <option value="blur">Blur</option>
              <option value="grayscale">Grayscale</option>
              <option value="invert">Invert</option>
              <option value="sepia">Sepia</option>
          </select>
          
          <script src="./index.js"></script>
          </body>
          </html>

          效果展示

          們經常在一些頁面中遇見svg格式的繪圖,通常是一臉懵逼,別急,看完這篇文章你就能很好地了解它了。

          一、svg簡介。

          SVG 意為可縮放矢量圖形(Scalable Vector Graphics),是使用 XML 來描述二維圖形和繪圖程序的語言,后綴是“.svg”。它的優點是圖像在放大或改變尺寸的情況下其圖形質量不會有所損失

          二、svg文件如何嵌入HTML文件。

          SVG 文件可通過以下標簽嵌入 HTML 文檔:<embed>、<object> 或者 <iframe>。但是在html5中,直接用內聯的方式嵌入,方便太多了。各種方式的嵌入如下:

          // 使用 <embed> 標簽
          <embed 
              src="rect.svg" 
              width="300" 
              height="100" 
              type="image/svg+xml"
              pluginspage="http://www.adobe.com/svg/viewer/install/"
          />
          
            // 使用 <object> 標簽
          <object
                data="rect.svg" 
                width="300" 
                height="100" 
                type="image/svg+xml"
                codebase="http://www.adobe.com/svg/viewer/install/"
          />
            
            // 使用 <iframe> 標簽
            <iframe src="rect.svg" width="300" height="100"></iframe>
          // 在 HTML5 中, SVG 元素直接嵌入 HTML 頁面中
          <svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="190">
             <polygon 
                 points="100,10 40,180 190,60 10,60 160,180"
                 style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;"
             />
          </svg>

          三、基本圖形繪制(h5中的嵌入方式做演示)。

          1.矩形

          <svg>
            <rect width="300" height="100"  style="fill:rgb(0,0,255);stroke-width:1;stroke:rgb(0,0,0)"/>
          </svg>
          
          // width="矩形的寬度"。必需的。
          // height="矩形的高度"。必需的。
          //  x="矩形的左上角的x軸"
          // y="矩形的左上角的y軸"
          // rx="x軸的半徑(round元素)"
          // ry="y軸的半徑(round元素)"
          // + 顯現屬性:Color, FillStroke, Graphics

          2.圓形

          <svg>
            <circle cx="100" cy="50" r="40" stroke="black"
            stroke-width="2" fill="red"/>
          </svg>
          
          // cx="圓的x軸坐標"
          // cy="圓的y軸坐標"
          // r="圓的半徑". 必需.
          // + 顯現屬性:顏色,FillStroke,圖形

          3.橢圓

          <svg>
           <ellipse cx="300" cy="80" rx="100" ry="50"
            style="fill:yellow;stroke:purple;stroke-width:2"/>
          </svg>
          // cx="橢圓x軸坐標"
          // cy="橢圓y軸坐標"
          // rx="沿x軸橢圓形的半徑"。必需。
          // ry="沿y軸長橢圓形的半徑"。必需。
          // + 顯現屬性:顏色,FillStroke,圖形

          4.直線

          <svg>
            <line x1="0" y1="0" x2="200" y2="200"
            style="stroke:rgb(255,0,0);stroke-width:2"/>
          </svg>
          // x1="直線起始點x坐標"
          // y1="直線起始點y坐標"
          // x2="直線終點x坐標"
          // y2="直線終點y坐標"
          // + 顯現屬性:Color, FillStroke, Graphics, Markers

          5.多邊形

          <svg>
           <polygon points="200,10 250,190 160,210"
            style="fill:lime;stroke:purple;stroke-width:1"/>
          </svg>
          // points="多邊形的點。點的總數必須是偶數"。必需的。
          // fill-rule="FillStroke演示屬性的部分"
          // + 顯現屬性:Color, FillStroke, Graphics, Markers

          6.多段線

          <svg>
          <polyline points="20,20 40,25 60,40 80,120 120,140 200,180"
            style="fill:none;stroke:black;stroke-width:3" />
          </svg>
          // points=折線上的"點"。必需的。
          // + 顯現屬性:Color, FillStroke, Graphics, Markers

          7.路徑

          <svg>
           <path d="M150 0 L75 200 L225 200 Z" />
          </svg>
          // d="定義路徑指令"
          // pathLength="如果存在,路徑將進行縮放,以便計算各點相當于此值的路徑長度"
          // transform="轉換列表"
          // + 顯現屬性:Color, FillStroke, Graphics, Markers

          8.文本

          <svg>
             <text x="0" y="15" fill="red">這是文本</text>
          </svg>
          // x="列表的X -軸的位置。在文本中在第n個字符的位置在第n個x軸。如果后面存在額外的字符,耗盡他們最后一個字符之后放置的位置。 0是默認"
          // y="列表的Y軸位置。(參考x)0是默認"
          // dx="在字符的長度列表中移動相對最后繪制標志符號的絕對位置。(參考x)"
          // dy="在字符的長度列表中移動相對最后繪制標志符號的絕對位置。(參考x)"
          // rotate="一個旋轉的列表。第n個旋轉是第n個字符。附加字符沒有給出最后的旋轉值"
          // textLength="SVG查看器將嘗試顯示文本之間的間距/或字形調整的文本目標長度。(默認:正常文本的長度)"
          // lengthAdjust="告訴查看器,如果指定長度就嘗試進行調整用以呈現文本。這兩個值是'spacing'和'spacingAndGlyphs'"
          // + 顯現屬性:Color, FillStroke, Graphics, FontSpecification, TextContentElements

          四、高級特效。

          主要分濾鏡和漸變效果。

          <defs> 和 <filter>

          所有互聯網的SVG濾鏡定義在<defs>元素中。<defs>元素定義短并含有特殊元素(如濾鏡)定義。<filter>標簽用來定義SVG濾鏡。<filter>標簽使用必需的id屬性來定義向圖形應用哪個濾鏡。

          1.濾鏡可以做一些模糊的效果和陰影,效果有很多,也可以自己嘗試地做一做。

          比如做個簡單的邊緣模糊效果。


          <svg>
            <defs>
              <filter id="f1" x="0" y="0">
                <feGaussianBlur in="SourceGraphic" stdDeviation="15" /> //<feGaussianBlur> 元素是用于創建模糊效果
              </filter>
            </defs>
            <rect width="90" height="90" stroke="green" stroke-width="3" fill="green" filter="url(#f1)" />
          </svg>

          2.漸變有線性漸變,放射性漸變,下面是個線性漸變的例子。


          <svg>
            <defs>
              <linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%">
                <stop offset="0%" style="stop-color:rgb(255,255,0);stop-opacity:1" />
                <stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1" />
              </linearGradient>
            </defs>
            <rect width="200" height="90" fill="url(#grad1)" />
          </svg>
          // 把上面的
              <linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%">
               ......
              </linearGradient>
          // 替換成
           <radialGradient id="grad1" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
                <stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:0" />
                <stop offset="100%" style="stop-color:rgb(0,0,255);stop-opacity:1" />
              </radialGradient>
          // 變成放射性漸變

          眾多示例:https://www.runoob.com/svg/svg-examples.html

          五、svg和canvas比較。

          SVG 是一種使用 XML 描述 2D 圖形的語言。 SVG DOM 中的每個元素都是可用的。它的繪制不依賴分辨率,可以為某個元素附加 JavaScript 事件處理器,不過事件添加過多會影響渲染速度。如果 SVG 對象的屬性發生變化,瀏覽器能夠自動重現圖形。最適合帶有大型渲染區域的應用程序(比如谷歌地圖)。

          Canvas 通過 JavaScript 來繪制 2D 圖形。它的繪制是依賴分辨率的,不能單獨為其中元素添加事件。在 canvas 中,一旦圖形被繪制完成,它就不會繼續得到瀏覽器的關注。如果其位置發生變化,那么整個場景也需要重新繪制,包括任何或許已被圖形覆蓋的對象。能夠以 .png 或 .jpg 格式保存結果圖像。最適合圖像密集型的游戲,其中的許多對象會被頻繁重繪


          主站蜘蛛池模板: 99精品国产高清一区二区麻豆| 福利一区国产原创多挂探花| 暖暖免费高清日本一区二区三区 | 亚洲宅男精品一区在线观看| 一区免费在线观看| 亚洲日韩精品国产一区二区三区 | 色欲精品国产一区二区三区AV | 亚洲一区二区三区在线网站| 红桃AV一区二区三区在线无码AV | 日本精品一区二区三本中文 | 国产乱码精品一区二区三区四川| 麻豆一区二区三区精品视频 | 在线欧美精品一区二区三区 | 国产精品自在拍一区二区不卡| 欧美日韩一区二区成人午夜电影 | 国产精品久久无码一区二区三区网 | 无码人妻精品一区二区三区99仓本| 老鸭窝毛片一区二区三区| 亚洲变态另类一区二区三区 | 亚洲av综合av一区| 亚洲一区二区三区免费| 国产一区二区三区在线看片| 国产伦精品一区二区三区免费迷 | 国产一区二区三区91| 国产精品女同一区二区| 无码人妻精品一区二区三区夜夜嗨| 熟女大屁股白浆一区二区| 国产一区二区精品| 精品一区二区三区无码免费视频| 亚洲蜜芽在线精品一区| 99热门精品一区二区三区无码 | 国产AV午夜精品一区二区三区 | 国产一区二区三区四| 日韩精品人妻av一区二区三区| 午夜无码一区二区三区在线观看| 无码人妻一区二区三区在线水卜樱| 亚洲视频一区二区| 无码一区二区三区| 久久中文字幕无码一区二区| 国产一区二区三区免费视频| 久久精品国产一区二区|