ポストプロセスの叩き作成完了
Browse files- index.js +0 -2
- postprocess/base.js +28 -0
- postprocess/invert.js +51 -0
index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
| 1 |
import { applyEffect, getAvailableEffects } from './effects.js';
|
| 2 |
-
import { DummyPostProcess } from './postprocess/dummy.js';
|
| 3 |
import { InvertPostProcess } from './postprocess/invert.js';
|
| 4 |
import { BasePostProcess } from './postprocess/base.js';
|
| 5 |
|
|
@@ -228,7 +227,6 @@ function debounceRender(callback, delay = 200) {
|
|
| 228 |
|
| 229 |
// ポストプロセス処理のインスタンスを作成
|
| 230 |
const postProcessors = {
|
| 231 |
-
dummy: new DummyPostProcess(),
|
| 232 |
invert: new InvertPostProcess()
|
| 233 |
};
|
| 234 |
|
|
|
|
| 1 |
import { applyEffect, getAvailableEffects } from './effects.js';
|
|
|
|
| 2 |
import { InvertPostProcess } from './postprocess/invert.js';
|
| 3 |
import { BasePostProcess } from './postprocess/base.js';
|
| 4 |
|
|
|
|
| 227 |
|
| 228 |
// ポストプロセス処理のインスタンスを作成
|
| 229 |
const postProcessors = {
|
|
|
|
| 230 |
invert: new InvertPostProcess()
|
| 231 |
};
|
| 232 |
|
postprocess/base.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/**
|
| 2 |
+
* ポストプロセス処理の基底クラス
|
| 3 |
+
*/
|
| 4 |
+
export class BasePostProcess {
|
| 5 |
+
constructor() {
|
| 6 |
+
this.name = 'base';
|
| 7 |
+
this.label = 'ベース';
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
/**
|
| 11 |
+
* ポストプロセス処理を適用
|
| 12 |
+
* @param {HTMLCanvasElement} canvas - 処理対象のcanvas
|
| 13 |
+
* @returns {HTMLCanvasElement} - 処理後のcanvas
|
| 14 |
+
*/
|
| 15 |
+
async apply(canvas) {
|
| 16 |
+
// 基底クラスでは何もせずにcanvasをそのまま返す
|
| 17 |
+
return canvas;
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
/**
|
| 21 |
+
* 最終的なPNG画像データを生成
|
| 22 |
+
* @param {HTMLCanvasElement} canvas - 処理対象のcanvas
|
| 23 |
+
* @returns {string} - PNG形式の画像データURL
|
| 24 |
+
*/
|
| 25 |
+
static toPng(canvas) {
|
| 26 |
+
return canvas.toDataURL('image/png');
|
| 27 |
+
}
|
| 28 |
+
}
|
postprocess/invert.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { BasePostProcess } from './base.js';
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* 色を反転させるポストプロセス
|
| 5 |
+
*/
|
| 6 |
+
export class InvertPostProcess extends BasePostProcess {
|
| 7 |
+
constructor() {
|
| 8 |
+
super();
|
| 9 |
+
this.name = 'invert';
|
| 10 |
+
this.label = '色反転';
|
| 11 |
+
this.ui = {
|
| 12 |
+
template: `
|
| 13 |
+
<p class="text-muted mb-0"><small>設定はありません</small></p>
|
| 14 |
+
`
|
| 15 |
+
};
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
/**
|
| 19 |
+
* 色を反転させる処理を適用
|
| 20 |
+
* @param {HTMLCanvasElement} canvas - 処理対象のcanvas
|
| 21 |
+
* @returns {HTMLCanvasElement} - 処理後のcanvas
|
| 22 |
+
*/
|
| 23 |
+
async apply(canvas) {
|
| 24 |
+
// 新しいcanvasを作成
|
| 25 |
+
const newCanvas = document.createElement('canvas');
|
| 26 |
+
newCanvas.width = canvas.width;
|
| 27 |
+
newCanvas.height = canvas.height;
|
| 28 |
+
const ctx = newCanvas.getContext('2d');
|
| 29 |
+
|
| 30 |
+
// 元のcanvasを描画
|
| 31 |
+
ctx.drawImage(canvas, 0, 0);
|
| 32 |
+
|
| 33 |
+
// ピクセルデータを取得
|
| 34 |
+
const imageData = ctx.getImageData(0, 0, newCanvas.width, newCanvas.height);
|
| 35 |
+
const data = imageData.data;
|
| 36 |
+
|
| 37 |
+
// 各ピクセルの色を反転
|
| 38 |
+
for (let i = 0; i < data.length; i += 4) {
|
| 39 |
+
// RGB値を反転(アルファ値は変更しない)
|
| 40 |
+
data[i] = 255 - data[i]; // R
|
| 41 |
+
data[i + 1] = 255 - data[i + 1]; // G
|
| 42 |
+
data[i + 2] = 255 - data[i + 2]; // B
|
| 43 |
+
// data[i + 3] はアルファ値なので変更しない
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
// 反転した画像データを描画
|
| 47 |
+
ctx.putImageData(imageData, 0, 0);
|
| 48 |
+
|
| 49 |
+
return newCanvas;
|
| 50 |
+
}
|
| 51 |
+
}
|