SenY commited on
Commit
a812266
·
1 Parent(s): 79a900a

エフェクトを調整

Browse files
effects/base.js CHANGED
@@ -243,6 +243,7 @@ export class BaseEffect {
243
  ctx.shadowOffsetX = 0;
244
  ctx.shadowOffsetY = 0;
245
 
 
246
  for (let j = 0; j < iterations; j++) {
247
  ctx.shadowBlur = blur - (blur * j / iterations);
248
  ctx.fillStyle = `rgba(${this.hexToRgb(color)}, ${1/iterations})`;
@@ -261,8 +262,29 @@ export class BaseEffect {
261
  }
262
  }
263
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
264
 
265
- // シャドウをリセット
 
 
266
  ctx.shadowBlur = 0;
267
  ctx.shadowColor = 'transparent';
268
  }
 
243
  ctx.shadowOffsetX = 0;
244
  ctx.shadowOffsetY = 0;
245
 
246
+ // 内側のグロー
247
  for (let j = 0; j < iterations; j++) {
248
  ctx.shadowBlur = blur - (blur * j / iterations);
249
  ctx.fillStyle = `rgba(${this.hexToRgb(color)}, ${1/iterations})`;
 
262
  }
263
  }
264
  }
265
+
266
+ // 外側の広いグロー
267
+ ctx.globalCompositeOperation = 'lighter';
268
+ ctx.shadowBlur = blur * 1.5;
269
+ ctx.globalAlpha = 0.3;
270
+
271
+ for (const lineCoords of this.coordinates) {
272
+ for (const coord of lineCoords) {
273
+ ctx.save();
274
+ if (coord.rotate) {
275
+ ctx.translate(coord.x, coord.y);
276
+ ctx.rotate(Math.PI/2);
277
+ ctx.fillText(coord.char, -coord.width/2, 0);
278
+ } else {
279
+ ctx.fillText(coord.char, coord.x, coord.y);
280
+ }
281
+ ctx.restore();
282
+ }
283
+ }
284
 
285
+ // 設定を元に戻す
286
+ ctx.globalCompositeOperation = 'source-over';
287
+ ctx.globalAlpha = 1.0;
288
  ctx.shadowBlur = 0;
289
  ctx.shadowColor = 'transparent';
290
  }
effects/gold.js CHANGED
@@ -3,14 +3,9 @@ import { BaseEffect } from './base.js';
3
  export class GoldEffect extends BaseEffect {
4
  constructor() {
5
  super();
6
- this.glowOptions = {
7
- color: '#ffd700',
8
- blur: 15,
9
- iterations: 10
10
- };
11
  this.strokeOptions = {
12
  color: '#b8860b',
13
- width: 2
14
  };
15
  }
16
 
 
3
  export class GoldEffect extends BaseEffect {
4
  constructor() {
5
  super();
 
 
 
 
 
6
  this.strokeOptions = {
7
  color: '#b8860b',
8
+ width: 10
9
  };
10
  }
11
 
effects/gradient.js CHANGED
@@ -12,7 +12,9 @@ export class GradientEffect extends BaseEffect {
12
  // グラデーションの作成
13
  const gradient = ctx.createLinearGradient(0, 0, ctx.canvas.width, ctx.canvas.height);
14
  gradient.addColorStop(0, '#ff0000');
 
15
  gradient.addColorStop(0.5, '#00ff00');
 
16
  gradient.addColorStop(1, '#0000ff');
17
  ctx.fillStyle = gradient;
18
  }
 
12
  // グラデーションの作成
13
  const gradient = ctx.createLinearGradient(0, 0, ctx.canvas.width, ctx.canvas.height);
14
  gradient.addColorStop(0, '#ff0000');
15
+ gradient.addColorStop(0.25, '#ffff00');
16
  gradient.addColorStop(0.5, '#00ff00');
17
+ gradient.addColorStop(0.75, '#00ffff');
18
  gradient.addColorStop(1, '#0000ff');
19
  ctx.fillStyle = gradient;
20
  }
effects/metallic.js CHANGED
@@ -9,8 +9,8 @@ export class MetallicEffect extends BaseEffect {
9
  iterations: 10
10
  };
11
  this.strokeOptions = {
12
- color: '#808080',
13
- width: 1.5
14
  };
15
  }
16
 
 
9
  iterations: 10
10
  };
11
  this.strokeOptions = {
12
+ color: '#4a4a4a',
13
+ width: 5
14
  };
15
  }
16
 
effects/multiline-neon.js CHANGED
@@ -5,12 +5,12 @@ export class MultilineNeonEffect extends BaseEffect {
5
  super();
6
  this.glowOptions = {
7
  color: '#00ffff',
8
- blur: 25,
9
- iterations: 25
10
  };
11
  this.strokeOptions = {
12
  color: '#ffffff',
13
- width: 0.5
14
  };
15
  }
16
 
 
5
  super();
6
  this.glowOptions = {
7
  color: '#00ffff',
8
+ blur: 90,
9
+ iterations: 6
10
  };
11
  this.strokeOptions = {
12
  color: '#ffffff',
13
+ width: 4
14
  };
15
  }
16
 
effects/neon.js CHANGED
@@ -3,22 +3,16 @@ import { BaseEffect } from './base.js';
3
  export class NeonEffect extends BaseEffect {
4
  constructor() {
5
  super();
6
- // グローエフェクトの設定
7
  this.glowOptions = {
8
- color: '#ff69b4',
9
- blur: 20,
10
- iterations: 20
11
- };
12
- // 縁取りの設定
13
- this.strokeOptions = {
14
- color: '#ffffff',
15
- width: 0.5
16
  };
17
  }
18
 
19
  async setupContext(ctx, options) {
20
  ctx.font = `${options.fontSize}px "${options.font}"`;
 
21
  ctx.textBaseline = 'top';
22
- ctx.fillStyle = '#ff69b4'; // メインのテキストカラー
23
  }
24
  }
 
3
  export class NeonEffect extends BaseEffect {
4
  constructor() {
5
  super();
 
6
  this.glowOptions = {
7
+ color: '#ff69b4', // ネオンピンク
8
+ blur: 90,
9
+ iterations: 12
 
 
 
 
 
10
  };
11
  }
12
 
13
  async setupContext(ctx, options) {
14
  ctx.font = `${options.fontSize}px "${options.font}"`;
15
+ ctx.fillStyle = '#ff69b4';
16
  ctx.textBaseline = 'top';
 
17
  }
18
  }
postprocess/hue.js CHANGED
@@ -12,8 +12,8 @@ export class HuePostProcess extends BasePostProcess {
12
  template: `
13
  <div class="mb-2">
14
  <label class="form-label">色相の変更</label>
15
- <input type="range" class="form-range" min="0" max="359" value="0" id="hueRotate">
16
- <div class="range-value"><span id="hueRotateValue">0</span>°</div>
17
  </div>
18
  `
19
  };
 
12
  template: `
13
  <div class="mb-2">
14
  <label class="form-label">色相の変更</label>
15
+ <input type="range" class="form-range" min="0" max="359" value="180" id="hueRotate">
16
+ <div class="range-value"><span id="hueRotateValue">180</span>°</div>
17
  </div>
18
  `
19
  };