ポストプロセスの叩き作成完了
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 |
+
}
|