Canvas舉個慄子

来源:http://www.cnblogs.com/qqm16113/archive/2017/02/18/6413395.html
-Advertisement-
Play Games

下麵舉一些小例子: 先假設的創建一個上下文環境 1.canvas做灰色圖像: 個人認為主要的知識點在於: (1)獲取當前畫布中圖像的各個像素點的值; (2)灰色圖像的求解方式(r+g+b)/3,再將這個值賦給原來的像素的R、G、B; (3)在用新的顏色值畫一張圖片 2.canvas刮刮樂 個人認為主 ...


下麵舉一些小例子:

先假設的創建一個上下文環境

  

1 var mycanvas = document.getElementById("mycanvas");
2 var context = mycanvas.getContext("2d");

 

1.canvas做灰色圖像:

個人認為主要的知識點在於:

    (1)獲取當前畫布中圖像的各個像素點的值;

    (2)灰色圖像的求解方式(r+g+b)/3,再將這個值賦給原來的像素的R、G、B;

    (3)在用新的顏色值畫一張圖片

 1 //此處就忽略圖片預載入的步驟直接寫關鍵點
 2 //獲取畫布中的像素點
 3 var imgData = context.getImageData(0,0,myCanvas.width,myCanvas.height);
 4 var pixels = imgData.data;
 5 
 6 //獲取每個像素點的rgb
 7 for(var i=0; i<pixels.length; i+=4){
 8     var r = pixels[i];
 9     var g = pixels[i+1];
10     var b = pixels[i+2];
11     var gray = (r+b+g)/3;
12     pixels[i] = gray;
13     pixels[i+1] = gray;
14     pixels[i+2] = gray;
15 }
16 //重新繪製一張灰色的圖片
17 context.putImageData(imgData,100,100);    

 2.canvas刮刮樂

個人認為主要的知識點:

  (1)在網頁中用畫布去遮蓋原來的img圖片;

  (2)使用圖像組合模式中的"destination-out",當有兩個圖像重合額時候保留原圖未重合部分,其他置於透明;

  (3)canvas中添加事件;

  (4)當畫布中的透明區域大於整個畫布的百分之多少的時候,清空整個畫布

//繪製蒙版
context.fillStyle = "#CCCCCC";
context.fillRect(0,0,myCanvas.width,myCanvas.height);
//設為組合模式中的一種        
context.globalCompositeOperation = "destination-out";
//定義需要的變數
var startX = 0;
var startY = 0;
var isDown = false;
myCanvas.onmousedown = function(e){
    isDown = true;
    startX = e.offsetX;
    startY = e.offsetY;
    
}
myCanvas.onmousemove = function(e){
    if(!isDown){
        return;
    }
    var endX = e.offsetX;
    var endY = e.offsetY;
    context.beginPath();
    context.moveTo(startX,startY);
    context.lineTo(endX,endY);
    context.lineWidth = 40;
    context.lineCap = "round";
    context.stroke();
    startX = endX;
    startY = endY;
    //上一次的終點是新的起點
    var b = baifenbi();
    if(b>0.4){
        myCanvas.style.display = "none";
    }
    
}
myCanvas.onmouseup = function(){
    isDown = false;
}

function baifenbi(){
    var count = 0;
    var imgData = context.getImageData(0,0,myCanvas.width,myCanvas.height);
    var pixels = imgData.data;
    for(var i=0; i<pixels.length; i+=4){
        var a = pixels[i+3];
        if(a<128){
            count++;
        }
    }
    var b = count/(pixels.length/4);
    return b;
}

 

 

 

 

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 新手Perfect教程之JavaScript教程—①你好,世界! ...
  • CSS命名規範(規則)常用的CSS命名規則 頭:header 內容:content/container 尾:footer 導航:nav 側欄:sidebar 欄目:column 頁面外圍控制整體佈局寬度:wrapper 左右中:left right center 登錄條:loginbar 標誌:lo ...
  • html代碼: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <title>輪播圖練習</title> <link rel="stylesheet" href="css/css.css" type="text/css"/ ...
  • 動態顯示目錄的作用 不用每次寫博客的時候繁瑣的人工整理目錄,又可以動態浮動在右下角,方便快速跳到感興趣的位置同時也可以快速的對文章內容有一個大概的瞭解。 實現原理 首先根據個人喜好,我習慣了用 h1 來做分類。所以本篇內容也主要是針對h1來提取目錄。 如何提取出來h1呢? 先來看這張圖,以獵豹瀏覽器 ...
  • 一、為什麼使用RequireJS? <script src="a.js"></script> <script src="b.js"></script> <script src="c.js"></script> <script src="b.js"></script> <script src="c.j ...
  • 個人在移動端的一些總結歸納,有新的知識點會一直更新 一.css部分 1.meta標簽 <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"/> 移動端加上這個標簽才是真正的自適應,不加的 ...
  • 1 . 相對定位relative:顧名思義,相對定位是相對於自己的位置來進行偏移,如下圖: 以盒子中心為基準,為每條邊的正方向,例: 向右移動20px : 代碼為left:20px;或者right:-20px; 向下移動20px : 代碼為top:20px;或者bottom:-20px; 2 . 絕 ...
  • 直入正題,JS打開攝像頭並截圖上傳至後端的一個完整步驟 1. 打開攝像頭主要用到getUserMedia方法,然後將獲取到的媒體流置入video標簽 2. 截取圖片主要用到canvas繪圖,使用drawImage方法將video的內容繪至canvas中 3. 將截取的內容上傳至伺服器,將canvas ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...