首頁 web前端 js教程 利用Canvas處理圖片的方法

利用Canvas處理圖片的方法

Feb 08, 2018 am 11:44 AM
canvas 處理 進行

Canvas,中文翻譯為“畫布”,HTML5中新增了元素,可以結合JavaScript動態地在畫布中繪製圖形。本文主要為和家介紹了利用Canvas對圖片進行處理的相關資料,文中透過範例程式碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,希望能幫助大家。

大概流程非常簡單,主要分成以下三個步驟:


Canvas圖片處理

是的,就像把大像裝進冰箱一樣簡單,哈哈。

一、主要API

整個流程中所用到的主要Canvas API有:

  • 繪製影像: drawImage()

  • 取得影像資料:getImageData()

  • 重寫影像資料:putImageData()

  • 匯出影像: toDataURL ()

1. drawImage()

顧名思義,此方法就是用於將影像繪製與Canvas畫布當中,具體用法有三種:

      ① 在畫布上定位影像:context.drawImage(img,x,y)

      ② 在畫布上定位影像,並規定影像的寬度與高度:context.drawImage(img,x, y,width,height)

      ③ 剪切影像,並在畫布上定位被剪切的部分:context.drawImage(img,sx,sy,swidth,sheight,x,y,width ,height)

以上參數值描述如下表:

規定要使用的圖像、畫布或影片。 可選。開始剪切的 x 座標位置。 可選。開始剪切的 y 座標位置。 可選。被剪切影像的寬度。 可選。被剪切影像的高度。 在畫布上放置影像的 x 座標位置。 在畫布上放置影像的 y 座標位置。 可選。要使用的圖像的寬度。 (伸展或縮小影像)可選。要使用的圖像的高度。 (伸展或縮小圖像)
#參數 描述
##img
sx
sy
swidth
sheight
x
y
width
height

2. getImageData()

此方法用於從Canvas畫布中獲取圖像數據,具體用法如下:

取得畫布指定矩形範圍內的像素資料:var ImageData = context.getImageData(x,y,width,height)

以上參數值說明如下表:描述開始複製的左上角位置的x座標。 開始複製的左上角位置的 y 座標。 將要複製的矩形區域的寬度。 將要複製的矩形區域的高度。
參數
#x
y
width
height

該方法會傳回一個ImageData對象,該物件有三個屬性分別為:width、height和data,而我們最主要用到的就是這個data數組,因為它保存著影像中每一個像素的資料。有了這些資料之後我們便可以對它們進行處理,最後再將其重寫至Canvas畫布中,這樣就實現了對圖片的處理轉換。對於該data數組具體用法,我們可以在後面的實例中看到。

3. putImageData()

該方法很簡單,就是用於將圖像資料重寫到Canvas畫布中,具體用法如下:

context.putImageData(imgData ,x,y,dirtyX,dirtyY,dirtyWidth,dirtyHeight)

以上參數值描述如下表: #描述規定要放回畫布的ImageData 物件。 ImageData 物件左上角的 x 座標,以像素為單位。 ImageData 物件左上角的 y 座標,以像素為單位。 可選。水平值(x),以像素計,在畫布上放置影像的位置。 可選。水平值(y),以像素計,在畫布上放置影像的位置。 #可選。在畫布上繪製圖像所使用的寬度。 可選。在畫布上繪製圖像所使用的高度。
參數
imgData
x
y
dirtyX
dirtyY
dirtyWidth
dirtyHeight
######

4. toDataURL()

這個方法與以上三種方法不同,它是Canvas物件的方法,該方法傳回的是一個包含data URI的字串,該字串可直接作為圖片路徑位址填入標籤的src屬性當中,具體用法如下:

var dataURL = canvas.toDataURL(type, encoderOptions);

##以上參數值說明如下表:

參數#描述type#可選。圖片格式,預設為 image/png。 encoderOptions可選。在指定圖片格式為 image/jpeg 或 image/webp的情況下,可以從 0 到 1 的區間內選擇圖片的品質。如果超出取值範圍,將會使用預設值 0.92。其他參數會被忽略。
二、圖片處理實例

本實例將透過程式碼簡單介紹如何把彩色圖片處理成黑白圖片。

<!--HTML-->
<canvas id="canvas" width="600" height="600"></canvas>
<input id="handle" type="button" value="处理图片" />
<input id="create" type="button" value="生成图片" />
<p id="result"></p>
登入後複製
//JavaScript
window.onload = function(){
  var canvas = document.getElementById("canvas"),  //获取Canvas画布对象
    context = canvas.getContext('2d'); //获取2D上下文对象,大多数Canvas API均为此对象方法
  var image = new Image(); //定义一个图片对象
  image.src = 'imgs/img.jpg'; 
  image.onload = function(){ //此处必须注意!后面所有操作均需在图片加载成功后执行,否则图片将处理无效
    context.drawImage(image,0,0); //将图片从Canvas画布的左上角(0,0)位置开始绘制,大小默认为图片实际大小
    var handle = document.getElementById("handle");
    var create = document.getElementById("create");
    handle.onclick = function(){ // 单击“处理图片”按钮,处理图片
      var imgData = context.getImageData(0,0,canvas.width,canvas.height);  //获取图片数据对象
      var data = imgData.data; //获取图片数据数组,该数组中每个像素用4个元素来保存,分别表示红、绿、蓝和透明度值
      var average = 0;
      for (var i = 0; i < data.length; i+=4) {
        average = Math.floor((data[i]+data[i+1]+data[i+2])/3); //将红、绿、蓝色值求平均值后得到灰度值
        data[i] = data[i+1] = data[i+2] = average; 将每个像素点的色值重写
      }
      imgData.data = data;
      context.putImageData(imgData,0,0); //将处理后的图像数据重写至Canvas画布,此时画布中图像变为黑白色
    };
    create.onclick = function(){ // 单击“生成图片”按钮,导出图片
      var imgSrc = canvas.toDataURL(); //获取图片的DataURL
      var newImg = new Image();
      var result = document.getElementById("result");
      newImg.src = imgSrc; //将图片路径赋值给src
      result.innerHTML = '';
      result.appendChild(newImg);
    };
  };
};
登入後複製
相關推薦:


Canvas處理圖片

PHP圖片處理之多張圖片合成一張的實例

canvas的圖片處理

以上是利用Canvas處理圖片的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24
WIN10服務主機太佔cpu的處理操作過程 WIN10服務主機太佔cpu的處理操作過程 Mar 27, 2024 pm 02:41 PM

1.首先我們右鍵點選任務列空白處,選擇【任務管理器】選項,或右鍵開始徽標,然後再選擇【任務管理器】選項。 2.在開啟的任務管理器介面,我們點選最右邊的【服務】選項卡。 3.在開啟的【服務】選項卡,點選下方的【開啟服務】選項。 4.在開啟的【服務】窗口,右鍵點選【InternetConnectionSharing(ICS)】服務,然後選擇【屬性】選項。 5.在開啟的屬性窗口,將【開啟方式】修改為【禁用】,點選【應用程式】後點選【確定】。 6.點選開始徽標,然後點選關機按鈕,選擇【重啟】,完成電腦重啟就行了。

CSV檔案操作速成指南 CSV檔案操作速成指南 Dec 26, 2023 pm 02:23 PM

快速學會開啟和處理CSV格式檔案的方法指南隨著資料分析和處理的不斷發展,CSV格式成為了廣泛使用的檔案格式之一。 CSV文件是一種簡單且易於閱讀的文字文件,其以逗號分隔不同的資料欄位。無論是在學術研究、商業分析或資料處理方面,都經常會遇到需要開啟和處理CSV檔案的情況。以下的指南將向您介紹如何快速學會開啟和處理CSV格式檔案。步驟一:了解CSV檔案格式首先,

學習PHP中如何處理特殊字元轉換單引號 學習PHP中如何處理特殊字元轉換單引號 Mar 27, 2024 pm 12:39 PM

在PHP開發過程中,處理特殊字元是常見的問題,尤其是在字串處理中經常會遇到特殊字元轉義的情況。其中,將特殊字元轉換單引號是比較常見的需求,因為在PHP中,單引號是一種常用的字串包裹方式。在本文中,我們將介紹如何在PHP中處理特殊字元轉換單引號,並提供具體的程式碼範例。在PHP中,特殊字元包括但不限於單引號(')、雙引號(")、反斜線()等。在字串

win7升級至win10失敗後,如何解決? win7升級至win10失敗後,如何解決? Dec 26, 2023 pm 07:49 PM

如果我們使用的作業系統是win7的話,對於升級的時候有的小夥伴們可能就會出現win7升win10失敗的情況。小編覺得我們可以嘗試重新升級看下能不能解決。詳細內容就來看下小編是怎麼做的吧~win7升win10失敗怎麼辦方法一:1.建議下載個驅動人生先評估下你電腦是否可以升級到Win10,2.然後升級後用驅動人生檢測下有沒有驅動異常這些,然後一鍵修復。方法二:1.刪除C:\Windows\SoftwareDistribution\Download下的所有檔案。 2.win+R運行“wuauclt.e

學習canvas框架 詳解常用的canvas框架 學習canvas框架 詳解常用的canvas框架 Jan 17, 2024 am 11:03 AM

探索Canvas框架:了解常用的Canvas框架有哪些,需要具體程式碼範例引言:Canvas是HTML5中提供的一個繪圖API,透過它我們可以實現豐富的圖形和動畫效果。為了提高繪圖的效率和便利性,許多開發者開發了不同的Canvas框架。本文將介紹一些常用的Canvas框架,並提供具體程式碼範例,以幫助讀者更深入地了解這些框架的使用方法。一、EaselJS框架Ea

探索canvas在遊戲開發中的強大作用及應用 探索canvas在遊戲開發中的強大作用及應用 Jan 17, 2024 am 11:00 AM

了解canvas在遊戲開發中的威力與應用概述:隨著網路科技的快速發展,網頁遊戲越來越受到廣大玩家的喜愛。而作為網頁遊戲開發中重要的一環,canvas技術在遊戲開發中逐漸嶄露頭角,展現出強大的威力與應用。本文將介紹canvas在遊戲開發中的潛力,並透過具體的程式碼範例來展示其應用。一、canvas技術簡介canvas是HTML5中新增的元素,它允許我們使用

canvas程式碼寫到哪裡 canvas程式碼寫到哪裡 Dec 20, 2023 pm 03:17 PM

Canvas程式碼可以寫在HTML檔案的<body>標籤內部,通常作為HTML文件的一部分,Canvas程式碼中的核心是取得並操作Canvas元素的上下文,透過document.getElementById('myCanvas')取得到Canvas元素的引用,然後使用getContext('2d')取得2D繪圖上下文。

PHP 字串處理:如何去除右側第一個字元? PHP 字串處理:如何去除右側第一個字元? Mar 01, 2024 pm 12:51 PM

在PHP中處理字串是非常常見的操作,而去除右側第一個字元也是常見需求。在本文中,我將向您展示如何使用PHP程式碼實現去除右側第一個字元的功能。首先,讓我們來看一個簡單的字串處理函數範例,示範如何去除右側第一個字元:

See all articles