SenY commited on
Commit
1e8da4e
·
1 Parent(s): d21aed0

ポストプロセスの叩き作成完了

Browse files
Files changed (3) hide show
  1. index.js +0 -2
  2. postprocess/base.js +28 -0
  3. 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
+ }