この記事では主にCanvasを使って画像を加工する方法を紹介します。とても良い内容なので参考にしてください。
Canvas (中国語では「キャンバス」と訳されます) には、HTML5 に新しい
今日は、Canvas でのグラフィック描画ではなく、画像の処理方法について説明します。
プロセスはおそらく非常に簡単で、主に次の 3 つのステップに分かれています:
はい、象を冷蔵庫に入れるのと同じくらい簡単です(笑)。
1. 主要な 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座標位置をキャンバス上に配置します。 | |
オプション。使用する画像の幅。 (画像を拡大または縮小) | |
オプション。使用する画像の高さ。 (画像を拡大または縮小します) |
2. getImageData()
このメソッドは、Canvas キャンバスから画像データを取得するために使用されます。 指定された範囲内のピクセル データを取得します。キャンバスの長方形の範囲: var ImageData = context.getImageData(x,y,width,height)上記のパラメーター値については、次の表で説明します。 x
y | コピーを開始する左上隅の y 座標。 |
---|---|
コピーされる長方形領域の幅。 | |
コピーされる長方形領域の高さ。 | |
3. putImageData() | |
context.putImageData(imgData,x,y,dirtyX,dirtyY,dirtyWidth,dirtyHeight) ログイン後にコピー |
Parameters
DescriptionimgData キャンバスに戻す ImageData オブジェクトを指定します。x | ImageData オブジェクトの左上隅の x 座標 (ピクセル単位)。 |
---|---|
ImageData オブジェクトの左上隅の y 座標 (ピクセル単位)。 | |
オプション。キャンバス上の画像を配置する水平方向の値 (x) (ピクセル単位)。 | |
オプション。キャンバス上の画像を配置する水平方向の値 (y) (ピクセル単位)。 | |
オプション。キャンバス上に画像を描画するために使用される幅。 | |
オプション。キャンバス上に画像が描画される高さ。 |
参数 | 描述 |
---|---|
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); }; }; };
可能上面代码写得不是很好,看起来也不是那么好理解,最好自己能够亲自写一写,这样对于自己理解会更加深刻一些。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
HTML5 Plus 实现手机APP拍照或相册选择图片上传的功能
以上がCanvas を使用して画像を処理する方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。