キャンバスで画像のミラーリングと反転を実現する2つの方法
2022-01-12 13:06:22
1.キャンバスを使った反転方法
var img = new Image(); //this is the dom object of the img tag
img.src = '. /sy.png';
img.onload = function () {
//execute this method after the image is loaded
ctx.drawImage(img, posx, posy, 210, 80);
};
play.addEventListener('click', function () {
ctx.clearRect(0, 0, canvas.width, canvas.height);//clear the canvas
//shift to do a mirror flip
ctx.translate(210+ posx * 2, 0);
ctx.scale(-1, 1); // mirror flip left and right
//ctx.translate(0, 160 + posy * 2);
//ctx.scale(1, -1); //up/down mirror flip
ctx.drawImage(img, 0, 0, 210, 80);
});
2. 画素点のミラーフリップ法
// vertical pixel inversion
function imageDataVRevert(sourceData, newData) {
for (var i = 0, h = sourceData.height; i < h; i++) {
for (var j = 0, w = sourceData.width; j < w; j++) {
newData.data[i * w * 4 + j * 4 + 0] =
sourceData.data[(h - i) * w * 4 + j * 4 + 0];
newData.data[i * w * 4 + j * 4 + 1] =
sourceData.data[(h - i) * w * 4 + j * 4 + 1];
newData.data[i * w * 4 + j * 4 + 2] =
sourceData.data[(h - i) * w * 4 + j * 4 + 2];
newData.data[i * w * 4 + j * 4 + 3] =
sourceData.data[(h - i) * w * 4 + j * 4 + 3];
}
}
return newData;
}
//invert horizontal pixels
function imageDataHRevert(sourceData, newData) {
for (var i = 0, h = sourceData.height; i < h; i++) {
for (j = 0, w = sourceData.width; j < w; j++) {
newData.data[i * w * 4 + j * 4 + 0] =
sourceData.data[i * w * 4 + (w - j) * 4 + 0];
newData.data[i * w * 4 + j * 4 + 1] =
sourceData.data[i * w * 4 + (w - j) * 4 + 1];
newData.data[i * w * 4 + j * 4 + 2] =
sourceData.data[i * w * 4 + (w - j) * 4 + 2];
newData.data[i * w * 4 + j * 4 + 3] =
sourceData.data[i * w * 4 + (w - j) * 4 + 3];
}
}
return newData;
}
``
var img = new Image(); //this is the dom object for the img tag
img.src = '. /sy.png';
img.onload = function () {
//execute this method after the image is loaded
ctx.drawImage(img, 0, 0, 210, 80);
};
//Pixel point manipulation
var imgData = ctx.getImageData(0, 0, 210, 80);
var newImgData = ctx.getImageData(0, 0, 210, 80);
// var newImgData = ctx.getImageData(0, 0, w, h);
ctx.putImageData(imageDataVRevert(newImgData, imgData), 0, 0); // flip up and down
// ctx.putImageData(imageDataHRevert(newImgData, imgData), 0, 0); // flip left and right ~~~~
今回の記事は、キャンバスでの画像ミラーリングと反転の2つの方法についてです。canvasでの画像ミラーリングと反転については、スクリプトハウスの過去記事を検索していただくか、引き続き以下の記事をご覧ください。
関連
-
Html5 データストリームによる動画再生
-
html+cssでメニューバーのスロードロップダウン効果を実現するコード例
-
HTML5の公開ページ抽出を公開コード方式に
-
HTML5 の数値入力コードで整数値のみを受け付けるようにする
-
html2canvasのスクリーンショットが空白になる問題の解決法
-
html5でhotcss.jsを使い、携帯電話の自己適合を実現する方法
-
HTML5ページの長押しで画像を保存する機能を解決するための記事
-
画像リソースが同一ドメイン下にないために、キャンバスがクロスドメインで汚染される場合の解決策
-
HTML5でよく使われるセマンティックタグの説明
-
webViewでhtml画像を読み込む際の問題を解決する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
html5 直交ハート型曲線の実装
-
HTML5の再適応スキームとビューポート適応の問題点を解説
-
HTML5 ドラッグ&ドロップの具体的な使用方法について
-
HTML5で音声や動画を読み込むためのコード
-
シェアボタン付きAmazeUIボトムナビゲーションバー用サンプルコード
-
H5 オフラインストレージ マニフェストの原理と使い方
-
html5でtype="range "属性のスライダー機能を実装する。
-
html5モバイルキーボードのポップアップを片付ける対応
-
H5では、ダイナミックなグラフィックス機能を実現するために、キャンバスの最も強力なインタフェース
-
モバイルhtml5で長押しイベントをシミュレートする方法