Canvas を使用して画像を処理する方法の紹介

不言
リリース: 2018-07-03 09:31:28
オリジナル
1354 人が閲覧しました

この記事では主にCanvasを使って画像を加工する方法を紹介します。とても良い内容なので参考にしてください。

Canvas (中国語では「キャンバス」と訳されます) には、HTML5 に新しい 要素があり、JavaScript と組み合わせてキャンバス内にグラフィックを動的に描画できます。

今日は、Canvas でのグラフィック描画ではなく、画像の処理方法について説明します。

プロセスはおそらく非常に簡単で、主に次の 3 つのステップに分かれています:

はい、象を冷蔵庫に入れるのと同じくらい簡単です(笑)。

1. 主要な API

プロセス全体で使用される主な Canvas API は次のとおりです:

  1. 画像の描画:drawImage()

  2. 画像データの取得:getImageData()

  3. 画像データの書き換え: putImageData()

  4. 画像のエクスポート: 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)

上記のパラメータ値を以下で説明しますtable:

パラメータ説明img 使用する画像、キャンバス、またはビデオを指定します。 sxはオプションです。せん断を開始する x 座標の位置。 syオプション。せん断を開始する y 座標の位置。 幅オプション。トリミングされた画像の幅。 身長はオプションです。切り取られた画像の高さ。 x画像のx座標位置をキャンバス上に配置します。 y画像のy座標位置をキャンバス上に配置します。 幅オプション。使用する画像の幅。 (画像を拡大または縮小) 高さオプション。使用する画像の高さ。 (画像を拡大または縮小します)

2. getImageData()

このメソッドは、Canvas キャンバスから画像データを取得するために使用されます。

指定された範囲内のピクセル データを取得します。キャンバスの長方形の範囲: var ImageData = context.getImageData(x,y,width,height)

上記のパラメーター値については、次の表で説明します。 x

コピーを開始する左上隅の位置のx座標。 widthheightこのメソッドは ImageData オブジェクトを返します。このオブジェクトには幅、高さ、データという 3 つの属性があります。これは画像内の各ピクセルのデータを保存するためです。これらのデータを取得した後、それらを処理し、最終的に Canvas キャンバスに書き換えることで、写真の加工と変換を実現します。データ配列の具体的な使用法については、次の例で確認できます。 このメソッドは非常に単純で、画像データを Canvas キャンバスに書き換えるために使用されます。具体的な使用方法は次のとおりです。 上記のパラメータ値は次の表で説明します。
y コピーを開始する左上隅の y 座標。
コピーされる長方形領域の幅。
コピーされる長方形領域の高さ。
3. putImageData()
context.putImageData(imgData,x,y,dirtyX,dirtyY,dirtyWidth,dirtyHeight)
ログイン後にコピー

Parameters

Description

imgData

キャンバスに戻す ImageData オブジェクトを指定します。 yダーティX汚いdirtyWidthdirtyHeight

4. toDataURL()

这个方法与以上三种方法不同,它是Canvas对象的方法,该方法返回的是一个包含data URI的字符串,该字符串可直接作为图片路径地址填入标签的src属性当中,具体用法如下:

var dataURL = canvas.toDataURL(type, encoderOptions);
ログイン後にコピー

以上参数值描述如下表:

xImageData オブジェクトの左上隅の x 座標 (ピクセル単位)。
ImageData オブジェクトの左上隅の y 座標 (ピクセル単位)。
オプション。キャンバス上の画像を配置する水平方向の値 (x) (ピクセル単位)。
オプション。キャンバス上の画像を配置する水平方向の値 (y) (ピクセル単位)。
オプション。キャンバス上に画像を描画するために使用される幅。
オプション。キャンバス上に画像が描画される高さ。
参数描述
type可选。图片格式,默认为 image/png。
encoderOptions可选。在指定图片格式为 image/jpeg 或 image/webp的情况下,可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 0.92。其他参数会被忽略。

二、图片处理实例

本实例将通过代码简单介绍如何把彩色图片处理成黑白图片。





ログイン後にコピー

//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拍照或相册选择图片上传的功能

利用HTML5中的Canvas绘制笑脸的代码

以上がCanvas を使用して画像を処理する方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!