SenY commited on
Commit
7d03026
·
1 Parent(s): 92a523d

色反転の実装に成功

Browse files
Files changed (2) hide show
  1. index.html +6 -0
  2. index.js +52 -45
index.html CHANGED
@@ -69,6 +69,12 @@
69
  ダミー
70
  </label>
71
  </div>
 
 
 
 
 
 
72
  </div>
73
  </div>
74
 
 
69
  ダミー
70
  </label>
71
  </div>
72
+ <div class="btn-check-wrapper">
73
+ <input type="checkbox" class="btn-check" name="postProcess" id="postProcessInvert" value="invert">
74
+ <label class="btn btn-outline-success" for="postProcessInvert">
75
+ 色反転
76
+ </label>
77
+ </div>
78
  </div>
79
  </div>
80
 
index.js CHANGED
@@ -1,5 +1,6 @@
1
  import { applyEffect, getAvailableEffects } from './effects.js';
2
  import { DummyPostProcess } from './postprocess/dummy.js';
 
3
  import { BasePostProcess } from './postprocess/base.js';
4
 
5
  const tagDisplayNames = {
@@ -227,7 +228,8 @@ function debounceRender(callback, delay = 200) {
227
 
228
  // ポストプロセス処理のインスタンスを作成
229
  const postProcessors = {
230
- dummy: new DummyPostProcess()
 
231
  };
232
 
233
  /**
@@ -289,9 +291,56 @@ async function updatePreview(effectType) {
289
  }
290
  }
291
 
292
- // イベントリスナーを追加(ポストプロセスの変更時には何もしない)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
293
  document.getElementById('postProcessContainer').addEventListener('change', () => {
294
- // 現時点では何もしない
295
  });
296
 
297
  // イベントリスナーの設定を更新
@@ -503,48 +552,6 @@ document.addEventListener('DOMContentLoaded', async () => {
503
  renderAllPresets();
504
  });
505
 
506
- // すべてのプリセットを描画する関数
507
- async function renderAllPresets() {
508
- effectGrid.innerHTML = '';
509
- const text = textInput.value || 'プレビュー';
510
- const fontFamily = fontSelect.value;
511
- const fontSize = fontSizeInput.value + 'px';
512
-
513
- const effects = getAvailableEffects();
514
- for (const effect of effects) {
515
- try {
516
- const imageUrl = await textToImage(text, fontFamily, fontSize, effect.name);
517
-
518
- const presetCard = document.createElement('div');
519
- presetCard.className = 'effect-item';
520
- presetCard.dataset.effect = effect.name;
521
- presetCard.innerHTML = `
522
- <div class="effect-name">${effect.name}</div>
523
- <div class="preview-container">
524
- <img src="${imageUrl}" alt="${effect.name}">
525
- </div>
526
- `;
527
-
528
- effectGrid.appendChild(presetCard);
529
- } catch (error) {
530
- console.error(`プリセット ${effect.name} の描画エラー:`, error);
531
-
532
- const errorCard = document.createElement('div');
533
- errorCard.className = 'effect-item error';
534
- errorCard.dataset.effect = effect.name;
535
- errorCard.innerHTML = `
536
- <div class="effect-name text-danger">${effect.name}</div>
537
- <div class="preview-container">
538
- <div class="text-danger">
539
- <small>エラー: ${error.message}</small>
540
- </div>
541
- </div>
542
- `;
543
- effectGrid.appendChild(errorCard);
544
- }
545
- }
546
- }
547
-
548
  // フォント変更時の処理
549
  fontSelect.addEventListener('change', async (e) => {
550
  try {
 
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
 
6
  const tagDisplayNames = {
 
228
 
229
  // ポストプロセス処理のインスタンスを作成
230
  const postProcessors = {
231
+ dummy: new DummyPostProcess(),
232
+ invert: new InvertPostProcess()
233
  };
234
 
235
  /**
 
291
  }
292
  }
293
 
294
+ // すべてのプリセットを描画する関数
295
+ async function renderAllPresets() {
296
+ const effectGrid = document.querySelector('.effect-grid');
297
+ const textInput = document.getElementById('textInput');
298
+ const fontSelect = document.getElementById('googleFontInput');
299
+ const fontSizeInput = document.getElementById('fontSize');
300
+
301
+ effectGrid.innerHTML = '';
302
+ const text = textInput.value || 'プレビュー';
303
+ const fontFamily = fontSelect.value;
304
+ const fontSize = fontSizeInput.value + 'px';
305
+
306
+ const effects = getAvailableEffects();
307
+ for (const effect of effects) {
308
+ try {
309
+ const imageUrl = await textToImage(text, fontFamily, fontSize, effect.name);
310
+
311
+ const presetCard = document.createElement('div');
312
+ presetCard.className = 'effect-item';
313
+ presetCard.dataset.effect = effect.name;
314
+ presetCard.innerHTML = `
315
+ <div class="effect-name">${effect.name}</div>
316
+ <div class="preview-container">
317
+ <img src="${imageUrl}" alt="${effect.name}">
318
+ </div>
319
+ `;
320
+
321
+ effectGrid.appendChild(presetCard);
322
+ } catch (error) {
323
+ console.error(`プリセット ${effect.name} の描画エラー:`, error);
324
+
325
+ const errorCard = document.createElement('div');
326
+ errorCard.className = 'effect-item error';
327
+ errorCard.dataset.effect = effect.name;
328
+ errorCard.innerHTML = `
329
+ <div class="effect-name text-danger">${effect.name}</div>
330
+ <div class="preview-container">
331
+ <div class="text-danger">
332
+ <small>エラー: ${error.message}</small>
333
+ </div>
334
+ </div>
335
+ `;
336
+ effectGrid.appendChild(errorCard);
337
+ }
338
+ }
339
+ }
340
+
341
+ // イベントリスナーを追加(ポストプロセスの変更時にすべてのプレビューを更新)
342
  document.getElementById('postProcessContainer').addEventListener('change', () => {
343
+ renderAllPresets();
344
  });
345
 
346
  // イベントリスナーの設定を更新
 
552
  renderAllPresets();
553
  });
554
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
555
  // フォント変更時の処理
556
  fontSelect.addEventListener('change', async (e) => {
557
  try {