File size: 2,186 Bytes
3ed48fd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92a523d
3ed48fd
 
 
 
 
92a523d
3ed48fd
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import { SimpleEffect } from './effects/simple.js';
import { NeonEffect } from './effects/neon.js';
import { GoldEffect } from './effects/gold.js';
import { MultilineNeonEffect } from './effects/multiline-neon.js';
import { GradientEffect } from './effects/gradient.js';
import { MetallicEffect } from './effects/metallic.js';

// エフェクトのインスタンスを作成
const effects = {
    simple: new SimpleEffect(),
    neon: new NeonEffect(),
    gold: new GoldEffect(),
    multilineNeon: new MultilineNeonEffect(),
    gradient: new GradientEffect(),
    metallic: new MetallicEffect(),
};

/**

 * 利用可能なエフェクトのリストを返す

 * @returns {Array<{name: string, description: string}>}

 */
export function getAvailableEffects() {
    return [
        {
            name: 'simple',
            description: 'シンプルなテキストレンダリング'
        },
        {
            name: 'neon',
            description: 'ネオングローエフェクト'
        },
        {
            name: 'gold',
            description: 'ゴールドエフェクト'
        },
        {
            name: 'multilineNeon',
            description: 'マルチラインネオンエフェクト'
        },
        {
            name: 'gradient',
            description: 'グラデーションエフェクト'
        },
        {
            name: 'metallic',
            description: 'メタリック調エフェクト'
        }
    ];
}

/**

 * テキストにエフェクトを適用

 * @param {string} effectType - エフェクトの種類

 * @param {string} text - レンダリングするテキスト

 * @param {Object} options - オプション

 * @param {string} options.font - フォントファミリー

 * @param {number} options.fontSize - フォントサイズ

 * @returns {Promise<HTMLCanvasElement>} - 生成されたcanvas要素

 */
export async function applyEffect(effectType, text, options) {
    const effect = effects[effectType];
    if (!effect) {
        throw new Error(`Unknown effect type: ${effectType}`);
    }
    
    return effect.apply(text, options);
}