@jjlmoya/utils-audiovisual 1.7.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/package.json +2 -1
  2. package/src/category/i18n/de.ts +198 -0
  3. package/src/category/i18n/id.ts +198 -0
  4. package/src/category/i18n/it.ts +198 -0
  5. package/src/category/i18n/ja.ts +198 -0
  6. package/src/category/i18n/ko.ts +198 -0
  7. package/src/category/i18n/nl.ts +198 -0
  8. package/src/category/i18n/pl.ts +198 -0
  9. package/src/category/i18n/pt.ts +198 -0
  10. package/src/category/i18n/ru.ts +198 -0
  11. package/src/category/i18n/sv.ts +198 -0
  12. package/src/category/i18n/tr.ts +198 -0
  13. package/src/category/i18n/zh.ts +198 -0
  14. package/src/category/index.ts +31 -3
  15. package/src/tests/i18n_coverage.test.ts +36 -0
  16. package/src/tests/slug_uniqueness.test.ts +81 -0
  17. package/src/tool/chromaticLens/i18n/de.ts +246 -0
  18. package/src/tool/chromaticLens/i18n/id.ts +246 -0
  19. package/src/tool/chromaticLens/i18n/it.ts +246 -0
  20. package/src/tool/chromaticLens/i18n/ja.ts +246 -0
  21. package/src/tool/chromaticLens/i18n/ko.ts +246 -0
  22. package/src/tool/chromaticLens/i18n/nl.ts +246 -0
  23. package/src/tool/chromaticLens/i18n/pl.ts +246 -0
  24. package/src/tool/chromaticLens/i18n/pt.ts +246 -0
  25. package/src/tool/chromaticLens/i18n/ru.ts +246 -0
  26. package/src/tool/chromaticLens/i18n/sv.ts +246 -0
  27. package/src/tool/chromaticLens/i18n/tr.ts +246 -0
  28. package/src/tool/chromaticLens/i18n/zh.ts +246 -0
  29. package/src/tool/chromaticLens/index.ts +15 -7
  30. package/src/tool/collageMaker/i18n/de.ts +233 -0
  31. package/src/tool/collageMaker/i18n/id.ts +233 -0
  32. package/src/tool/collageMaker/i18n/it.ts +233 -0
  33. package/src/tool/collageMaker/i18n/ja.ts +233 -0
  34. package/src/tool/collageMaker/i18n/ko.ts +233 -0
  35. package/src/tool/collageMaker/i18n/nl.ts +233 -0
  36. package/src/tool/collageMaker/i18n/pl.ts +233 -0
  37. package/src/tool/collageMaker/i18n/pt.ts +233 -0
  38. package/src/tool/collageMaker/i18n/ru.ts +233 -0
  39. package/src/tool/collageMaker/i18n/sv.ts +233 -0
  40. package/src/tool/collageMaker/i18n/tr.ts +233 -0
  41. package/src/tool/collageMaker/i18n/zh.ts +233 -0
  42. package/src/tool/collageMaker/index.ts +15 -6
  43. package/src/tool/exifCleaner/i18n/de.ts +277 -0
  44. package/src/tool/exifCleaner/i18n/fr.ts +1 -1
  45. package/src/tool/exifCleaner/i18n/id.ts +277 -0
  46. package/src/tool/exifCleaner/i18n/it.ts +277 -0
  47. package/src/tool/exifCleaner/i18n/ja.ts +277 -0
  48. package/src/tool/exifCleaner/i18n/ko.ts +277 -0
  49. package/src/tool/exifCleaner/i18n/nl.ts +277 -0
  50. package/src/tool/exifCleaner/i18n/pl.ts +277 -0
  51. package/src/tool/exifCleaner/i18n/pt.ts +277 -0
  52. package/src/tool/exifCleaner/i18n/ru.ts +277 -0
  53. package/src/tool/exifCleaner/i18n/sv.ts +277 -0
  54. package/src/tool/exifCleaner/i18n/tr.ts +277 -0
  55. package/src/tool/exifCleaner/i18n/zh.ts +277 -0
  56. package/src/tool/exifCleaner/index.ts +16 -8
  57. package/src/tool/imageCompressor/i18n/de.ts +242 -0
  58. package/src/tool/imageCompressor/i18n/en.ts +1 -1
  59. package/src/tool/imageCompressor/i18n/es.ts +1 -1
  60. package/src/tool/imageCompressor/i18n/id.ts +242 -0
  61. package/src/tool/imageCompressor/i18n/it.ts +242 -0
  62. package/src/tool/imageCompressor/i18n/ja.ts +242 -0
  63. package/src/tool/imageCompressor/i18n/ko.ts +242 -0
  64. package/src/tool/imageCompressor/i18n/nl.ts +242 -0
  65. package/src/tool/imageCompressor/i18n/pl.ts +242 -0
  66. package/src/tool/imageCompressor/i18n/pt.ts +242 -0
  67. package/src/tool/imageCompressor/i18n/ru.ts +242 -0
  68. package/src/tool/imageCompressor/i18n/sv.ts +242 -0
  69. package/src/tool/imageCompressor/i18n/tr.ts +242 -0
  70. package/src/tool/imageCompressor/i18n/zh.ts +244 -0
  71. package/src/tool/imageCompressor/index.ts +15 -7
  72. package/src/tool/printQualityCalculator/i18n/de.ts +261 -0
  73. package/src/tool/printQualityCalculator/i18n/fr.ts +1 -1
  74. package/src/tool/printQualityCalculator/i18n/id.ts +261 -0
  75. package/src/tool/printQualityCalculator/i18n/it.ts +261 -0
  76. package/src/tool/printQualityCalculator/i18n/ja.ts +261 -0
  77. package/src/tool/printQualityCalculator/i18n/ko.ts +261 -0
  78. package/src/tool/printQualityCalculator/i18n/nl.ts +261 -0
  79. package/src/tool/printQualityCalculator/i18n/pl.ts +261 -0
  80. package/src/tool/printQualityCalculator/i18n/pt.ts +261 -0
  81. package/src/tool/printQualityCalculator/i18n/ru.ts +261 -0
  82. package/src/tool/printQualityCalculator/i18n/sv.ts +261 -0
  83. package/src/tool/printQualityCalculator/i18n/tr.ts +261 -0
  84. package/src/tool/printQualityCalculator/i18n/zh.ts +261 -0
  85. package/src/tool/printQualityCalculator/index.ts +15 -7
  86. package/src/tool/privacyBlur/i18n/de.ts +238 -0
  87. package/src/tool/privacyBlur/i18n/id.ts +238 -0
  88. package/src/tool/privacyBlur/i18n/it.ts +238 -0
  89. package/src/tool/privacyBlur/i18n/ja.ts +238 -0
  90. package/src/tool/privacyBlur/i18n/ko.ts +238 -0
  91. package/src/tool/privacyBlur/i18n/nl.ts +238 -0
  92. package/src/tool/privacyBlur/i18n/pl.ts +238 -0
  93. package/src/tool/privacyBlur/i18n/pt.ts +238 -0
  94. package/src/tool/privacyBlur/i18n/ru.ts +238 -0
  95. package/src/tool/privacyBlur/i18n/sv.ts +238 -0
  96. package/src/tool/privacyBlur/i18n/tr.ts +238 -0
  97. package/src/tool/privacyBlur/i18n/zh.ts +238 -0
  98. package/src/tool/privacyBlur/index.ts +15 -7
  99. package/src/tool/subtitleSync/i18n/de.ts +241 -0
  100. package/src/tool/subtitleSync/i18n/fr.ts +5 -5
  101. package/src/tool/subtitleSync/i18n/id.ts +241 -0
  102. package/src/tool/subtitleSync/i18n/it.ts +241 -0
  103. package/src/tool/subtitleSync/i18n/ja.ts +241 -0
  104. package/src/tool/subtitleSync/i18n/ko.ts +241 -0
  105. package/src/tool/subtitleSync/i18n/nl.ts +241 -0
  106. package/src/tool/subtitleSync/i18n/pl.ts +241 -0
  107. package/src/tool/subtitleSync/i18n/pt.ts +241 -0
  108. package/src/tool/subtitleSync/i18n/ru.ts +241 -0
  109. package/src/tool/subtitleSync/i18n/sv.ts +241 -0
  110. package/src/tool/subtitleSync/i18n/tr.ts +241 -0
  111. package/src/tool/subtitleSync/i18n/zh.ts +241 -0
  112. package/src/tool/subtitleSync/index.ts +15 -7
  113. package/src/tool/timelapseCalculator/i18n/de.ts +169 -0
  114. package/src/tool/timelapseCalculator/i18n/fr.ts +2 -2
  115. package/src/tool/timelapseCalculator/i18n/id.ts +169 -0
  116. package/src/tool/timelapseCalculator/i18n/it.ts +169 -0
  117. package/src/tool/timelapseCalculator/i18n/ja.ts +169 -0
  118. package/src/tool/timelapseCalculator/i18n/ko.ts +169 -0
  119. package/src/tool/timelapseCalculator/i18n/nl.ts +169 -0
  120. package/src/tool/timelapseCalculator/i18n/pl.ts +169 -0
  121. package/src/tool/timelapseCalculator/i18n/pt.ts +169 -0
  122. package/src/tool/timelapseCalculator/i18n/ru.ts +169 -0
  123. package/src/tool/timelapseCalculator/i18n/sv.ts +169 -0
  124. package/src/tool/timelapseCalculator/i18n/tr.ts +169 -0
  125. package/src/tool/timelapseCalculator/i18n/zh.ts +169 -0
  126. package/src/tool/timelapseCalculator/index.ts +16 -8
  127. package/src/tool/tvDistance/i18n/de.ts +223 -0
  128. package/src/tool/tvDistance/i18n/id.ts +223 -0
  129. package/src/tool/tvDistance/i18n/it.ts +223 -0
  130. package/src/tool/tvDistance/i18n/ja.ts +223 -0
  131. package/src/tool/tvDistance/i18n/ko.ts +223 -0
  132. package/src/tool/tvDistance/i18n/nl.ts +223 -0
  133. package/src/tool/tvDistance/i18n/pl.ts +223 -0
  134. package/src/tool/tvDistance/i18n/pt.ts +223 -0
  135. package/src/tool/tvDistance/i18n/ru.ts +223 -0
  136. package/src/tool/tvDistance/i18n/sv.ts +223 -0
  137. package/src/tool/tvDistance/i18n/tr.ts +223 -0
  138. package/src/tool/tvDistance/i18n/zh.ts +223 -0
  139. package/src/tool/tvDistance/index.ts +15 -7
  140. package/src/tool/videoFrameExtractor/i18n/de.ts +235 -0
  141. package/src/tool/videoFrameExtractor/i18n/id.ts +235 -0
  142. package/src/tool/videoFrameExtractor/i18n/it.ts +235 -0
  143. package/src/tool/videoFrameExtractor/i18n/ja.ts +235 -0
  144. package/src/tool/videoFrameExtractor/i18n/ko.ts +235 -0
  145. package/src/tool/videoFrameExtractor/i18n/nl.ts +235 -0
  146. package/src/tool/videoFrameExtractor/i18n/pl.ts +235 -0
  147. package/src/tool/videoFrameExtractor/i18n/pt.ts +235 -0
  148. package/src/tool/videoFrameExtractor/i18n/ru.ts +235 -0
  149. package/src/tool/videoFrameExtractor/i18n/sv.ts +235 -0
  150. package/src/tool/videoFrameExtractor/i18n/tr.ts +235 -0
  151. package/src/tool/videoFrameExtractor/i18n/zh.ts +235 -0
  152. package/src/tool/videoFrameExtractor/index.ts +16 -8
@@ -0,0 +1,238 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { PrivacyBlurUI, PrivacyBlurLocaleContent } from '../index';
3
+
4
+ const slug = 'redaktor-konfidencialnosti-online-pikselizaciya-razmytie-lic-foto';
5
+ const title = 'Редактор конфиденциальности: Пикселизация и скрытие лиц на фото';
6
+ const description = 'Защитите свою личность, подвергая цензуре конфиденциальные области ваших фотографий. Пикселизируйте лица, размывайте документы или скрывайте личную информацию на 100% локально.';
7
+
8
+ const ui: PrivacyBlurUI = {
9
+ toolPixel: "Пиксели",
10
+ toolBlur: "Размытие",
11
+ toolSolid: "Фигура",
12
+ intensityLabel: "Интенсивность",
13
+ undoButton: "Отмена",
14
+ downloadButton: "Сохранить",
15
+ dropTitle: "Редактор приватности",
16
+ dropSubtitle: "Перетащите изображение сюда или нажмите, чтобы начать",
17
+ privacySecureLabel: "100% Локально",
18
+ offlineLabel: "Оффлайн",
19
+ autoDetectFaces: "Автопоиск",
20
+ loadingModels: "Загрузка моделей...",
21
+ noFacesDetected: "Лица автоматически не обнаружены.",
22
+ faqTitle: "Часто задаваемые вопросы",
23
+ bibliographyTitle: "Ссылки"
24
+ };
25
+
26
+ const faq: PrivacyBlurLocaleContent['faq'] = [
27
+ {
28
+ question: "Загружаются ли мои фотографии на какой-либо сервер?",
29
+ answer: "Нет. Редактор конфиденциальности работает полностью в вашем браузере. Пиксели изменяются локально, и ничего не передается за пределы вашего устройства.",
30
+ },
31
+ {
32
+ question: "Как работает автоматическое обнаружение лиц?",
33
+ answer: "Мы используем легкую нейронную сеть (TinyFaceDetector), которая запускается в вашем браузере для идентификации черт лица без необходимости внешнего подключения.",
34
+ },
35
+ ];
36
+
37
+ const howTo: PrivacyBlurLocaleContent['howTo'] = [
38
+ {
39
+ name: "Загрузите фото",
40
+ text: "Перетащите или выберите изображение, содержащее конфиденциальную информацию, которую вы хотите скрыть.",
41
+ },
42
+ {
43
+ name: "Выберите инструмент",
44
+ text: "Выберите между пикселизацией, размытием или сплошным покрытием в зависимости от необходимого уровня приватности.",
45
+ },
46
+ {
47
+ name: "Отметьте область",
48
+ text: "Нажмите и перетащите курсор над зоной, которую вы хотите защитить (лица, номерные знаки, имена и т. д.).",
49
+ },
50
+ {
51
+ name: "Сохраните результат",
52
+ text: "Загрузите обработанное изображение с уверенностью, что исходные данные недоступны.",
53
+ },
54
+ ];
55
+
56
+ const bibliography: PrivacyBlurLocaleContent['bibliography'] = [
57
+ {
58
+ name: "Privacy by Design (PbD) - AGPD",
59
+ url: "https://www.aepd.es/es/guias-y-herramientas/guias/guia-de-privacidad-desde-el-diseno",
60
+ },
61
+ ];
62
+
63
+ const seo: PrivacyBlurLocaleContent['seo'] = [
64
+ {
65
+ type: 'summary',
66
+ title: 'Редактор приватности: Пикселизация, Размытие и Скрытие',
67
+ items: [
68
+ 'Три инструмента редактирования: Пикселизация, Размытие, Сплошное покрытие',
69
+ 'Автоматическое обнаружение лиц с помощью ИИ (TinyFaceDetector)',
70
+ '100% локальная обработка — ваши фото никогда не покидают браузер',
71
+ 'Без водяных знаков, без ограничений, полностью бесплатно'
72
+ ]
73
+ },
74
+ { type: 'title', text: 'Цифровая приватность: как защитить ваши визуальные данные', level: 2 },
75
+ { type: 'paragraph', html: 'В эру социальных сетей бесконтрольный обмен фотографиями может раскрыть конфиденциальные личные данные. Наш инструмент позволяет скрыть критически важную информацию (лица, номерные знаки, имена, адреса) перед загрузкой в Интернет, гарантируя, что ваша конфиденциальность остается под вашим полным контролем.' },
76
+
77
+ { type: 'stats', items: [
78
+ { value: '3', label: 'Метода скрытия', icon: 'mdi:tools' },
79
+ { value: '100%', label: 'Локальная приватность', icon: 'mdi:shield-check' },
80
+ { value: 'ИИ', label: 'Детекция лиц', icon: 'mdi:brain' }
81
+ ], columns: 3 },
82
+
83
+ { type: 'title', text: 'Объяснение трех методов скрытия', level: 3 },
84
+ { type: 'comparative', items: [
85
+ {
86
+ title: 'Пикселизация',
87
+ description: 'Разбивает область на квадраты, которые невозможно распознать',
88
+ icon: 'mdi:blur',
89
+ points: [
90
+ 'Максимальное необратимое запутывание',
91
+ 'Более безопасно против распознавания лиц',
92
+ 'Заметно, ясно, что что-то было скрыто',
93
+ 'Идеально: лица на публичных фотографиях'
94
+ ]
95
+ },
96
+ {
97
+ title: 'Размытие (Blur)',
98
+ description: 'Гауссово сглаживание — более естественный вид',
99
+ icon: 'mdi:blur-off',
100
+ points: [
101
+ 'Более элегантный визуальный вид',
102
+ 'Сохраняет некоторую цветовую связность',
103
+ 'Математически обратимо (теоретически)',
104
+ 'Идеально: менее конфиденциальная информация'
105
+ ],
106
+ highlight: true
107
+ },
108
+ {
109
+ title: 'Сплошное покрытие',
110
+ description: 'Непрозрачный блок цвета — максимальная приватность',
111
+ icon: 'mdi:rectangle',
112
+ points: [
113
+ 'Заметное, очевидное скрытие',
114
+ 'Максимальная юридическая безопасность/приватность',
115
+ 'Изменяет визуальную композицию',
116
+ 'Идеально: документы, сверхчувствительные данные'
117
+ ]
118
+ }
119
+ ], columns: 3 },
120
+
121
+ { type: 'title', text: 'Автоматическое обнаружение лиц с помощью ИИ', level: 3 },
122
+ { type: 'paragraph', html: 'Наш инструмент использует TinyFaceDetector — компактную нейронную сеть, которая запускается прямо в вашем браузере для автоматической идентификации лиц:' },
123
+ { type: 'list', items: [
124
+ '<strong>100% Локально:</strong> Модель ИИ работает на вашем GPU/CPU, а не на удаленных серверах.',
125
+ '<strong>Без интернета:</strong> После первоначальной загрузки работает полностью оффлайн.',
126
+ '<strong>Приватность гарантирована:</strong> Никто не видит лиц: ни Google, ни OpenAI, ни мы.',
127
+ '<strong>Автоматика в один клик:</strong> Обнаруживает лица и позволяет скрыть их одним нажатием.'
128
+ ], icon: 'mdi:check' },
129
+
130
+ { type: 'card', title: 'Privacy by Design', html: 'Обрабатывая изображения с помощью локальных ресурсов вашего браузера, мы гарантируем, что оригинальные фотографии никогда не покинут ваше устройство. Даже если вы передумаете, ничего не было передано. Это высший стандарт цифровой приватности.' },
131
+
132
+ { type: 'title', text: 'Сценарии использования приватности', level: 3 },
133
+ { type: 'table', headers: ['Конфиденциальная информация', 'Рекомендуемый метод', 'Срочность'], rows: [
134
+ ['Лица людей', 'Пикселизация или Размытие', 'Критично'],
135
+ ['Автомобильные номера', 'Пикселизация (необратимо)', 'Критично'],
136
+ ['Удостоверения личности', 'Сплошное покрытие или Пикселизация', 'Критично'],
137
+ ['Написанные имена/адреса', 'Сплошное покрытие или Пикселизация', 'Высокая'],
138
+ ['Номера телефонов', 'Пикселизация или Покрытие', 'Высокая'],
139
+ ['Медицинская информация', 'Сплошное покрытие', 'Критично'],
140
+ ['Видимые сигналы WiFi', 'Пикселизация', 'Средняя']
141
+ ] },
142
+
143
+ { type: 'proscons', items: [
144
+ {
145
+ pro: 'Полная приватность: 100% локальная обработка, без серверов, без хранения',
146
+ con: 'Требуется современный браузер с поддержкой Canvas и WebGL'
147
+ },
148
+ {
149
+ pro: 'Автоматическое обнаружение лиц экономит время',
150
+ con: 'ИИ не идеален — лица в профиль или частично закрытые могут быть не найдены'
151
+ },
152
+ {
153
+ pro: 'Три метода позволяют выбирать между безопасностью и эстетикой',
154
+ con: 'Нет продвинутых функций (умная деформация, контекстное заполнение)'
155
+ },
156
+ {
157
+ pro: 'Полностью бесплатно, без рекламы, без ограничений',
158
+ con: 'Не является эквивалентом профессионального ПО, такого как Photoshop'
159
+ }
160
+ ], proTitle: 'Преимущества', conTitle: 'Ограничения' },
161
+
162
+ { type: 'diagnostic', variant: 'warning', title: 'Предупреждение: Размытие НЕ на 100% безопасно', icon: 'mdi:alert', badge: 'Безопасность', html: 'Гауссово размытие математически обратимо с помощью сложных инверсных алгоритмов. Если информация является КРИТИЧЕСКОЙ (юридические документы, личность), используйте <strong>Пикселизацию или Сплошное покрытие</strong>. Размытие выглядит эстетичнее, но менее безопасно.' },
163
+
164
+ { type: 'glossary', items: [
165
+ {
166
+ term: 'Пикселизация',
167
+ definition: 'Снижение разрешения путем разделения области на одноцветные блоки. Необратимо. Максимальная защита от ИИ-распознавания лиц.'
168
+ },
169
+ {
170
+ term: 'Размытие по Гауссу',
171
+ definition: 'Математическое сглаживание на основе нормального распределения. Теоретически обратимо с помощью деконволюции, но на практике очень сложно.'
172
+ },
173
+ {
174
+ term: 'Сплошное покрытие',
175
+ definition: 'Непрозрачный блок равномерного цвета. Максимальная безопасность, максимальная юридическая приватность, менее элегантно визуально.'
176
+ },
177
+ {
178
+ term: 'TinyFaceDetector',
179
+ definition: 'Легкая сверточная нейронная сеть (CNN) для обнаружения лиц. Работает локально в браузере без необходимости во внешнем сервере.'
180
+ },
181
+ {
182
+ term: 'Privacy by Design (PbD)',
183
+ definition: 'Подход, при котором приватность интегрируется на этапе проектирования системы, а не добавляется позже. Наш локальный подход — это Privacy by Design.'
184
+ }
185
+ ] },
186
+
187
+ { type: 'message', title: 'Приватность под вашим контролем', ariaLabel: 'Информация о защите приватности', html: 'Мы не храним и не обрабатываем ваши фотографии на удаленных серверах. Нет трекинговых куки. Нет истории правок. Мы не знаем, что вы скрываете, потому что никогда не видим ваши изображения. Полный контроль, полная приватность, полная свобода.' },
188
+
189
+ { type: 'title', text: 'Безопасно делитесь в соцсетях', level: 3 },
190
+ { type: 'paragraph', html: 'Перед тем как опубликовать любое фото в Интернете, спросите себя: есть ли там информация, которую я бы предпочел не делать публичной? Лица детей, номера машин, адреса, номера документов. 2-минутная сессия приватности сейчас позволит избежать проблем на годы.' }
191
+ ];
192
+
193
+ const faqSchema: WithContext<FAQPage> = {
194
+ '@context': 'https://schema.org',
195
+ '@type': 'FAQPage',
196
+ mainEntity: faq.map((item) => ({
197
+ '@type': 'Question',
198
+ name: item.question,
199
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
200
+ })),
201
+ };
202
+
203
+ const howToSchema: WithContext<HowTo> = {
204
+ '@context': 'https://schema.org',
205
+ '@type': 'HowTo',
206
+ name: title,
207
+ description,
208
+ step: howTo.map((step) => ({
209
+ '@type': 'HowToStep',
210
+ name: step.name,
211
+ text: step.text,
212
+ })),
213
+ };
214
+
215
+ const appSchema: WithContext<SoftwareApplication> = {
216
+ '@context': 'https://schema.org',
217
+ '@type': 'SoftwareApplication',
218
+ name: title,
219
+ description,
220
+ applicationCategory: 'UtilitiesApplication',
221
+ operatingSystem: 'Web',
222
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
223
+ inLanguage: 'ru',
224
+ };
225
+
226
+ export const content: PrivacyBlurLocaleContent = {
227
+ slug,
228
+ title,
229
+ description,
230
+ ui,
231
+ seo,
232
+ faqTitle: "Часто задаваемые вопросы",
233
+ faq,
234
+ bibliographyTitle: "Ссылки",
235
+ bibliography,
236
+ howTo,
237
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
238
+ };
@@ -0,0 +1,238 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { PrivacyBlurUI, PrivacyBlurLocaleContent } from '../index';
3
+
4
+ const slug = 'online-privacy-editor-pixla-sudda-ansikten-foton';
5
+ const title = 'Online Privacy Editor: Pixla och dölj ansikten i foton';
6
+ const description = 'Skydda din identitet genom att censurera känsliga delar av dina foton. Pixla ansikten, sudda dokument eller täck över privat information 100% lokalt.';
7
+
8
+ const ui: PrivacyBlurUI = {
9
+ toolPixel: "Pixla",
10
+ toolBlur: "Sudda",
11
+ toolSolid: "Täck",
12
+ intensityLabel: "Intensitet",
13
+ undoButton: "Ångra",
14
+ downloadButton: "Spara",
15
+ dropTitle: "Privacy Editor",
16
+ dropSubtitle: "Dra din bild hit eller klicka för att starta",
17
+ privacySecureLabel: "100% Lokalt",
18
+ offlineLabel: "Offline",
19
+ autoDetectFaces: "Auto-detektering",
20
+ loadingModels: "Laddar modeller...",
21
+ noFacesDetected: "Inga ansikten hittades automatiskt.",
22
+ faqTitle: "Vanliga Frågor",
23
+ bibliographyTitle: "Referenser"
24
+ };
25
+
26
+ const faq: PrivacyBlurLocaleContent['faq'] = [
27
+ {
28
+ question: "Laddas mina foton upp till någon server?",
29
+ answer: "Nej. Sekretessredigeraren fungerar helt i din webbläsare. Pixlar ändras lokalt och ingenting skickas utanför din enhet.",
30
+ },
31
+ {
32
+ question: "Hur fungerar automatisk ansiktsdetektering?",
33
+ answer: "Vi använder ett lättviktigt neuralt nätverk (TinyFaceDetector) som körs i din webbläsare för att identifiera ansiktsdrag utan behov av extern anslutning.",
34
+ },
35
+ ];
36
+
37
+ const howTo: PrivacyBlurLocaleContent['howTo'] = [
38
+ {
39
+ name: "Ladda upp din bild",
40
+ text: "Dra eller välj bilden som innehåller känslig information som du vill dölja.",
41
+ },
42
+ {
43
+ name: "Välj verktyg",
44
+ text: "Välj mellan att pixla, sudda eller täcka helt beroende på vilken sekretessnivå du behöver.",
45
+ },
46
+ {
47
+ name: "Markera området",
48
+ text: "Klicka och dra över den zon du vill skydda (ansikten, registreringsskyltar, namn etc.).",
49
+ },
50
+ {
51
+ name: "Spara resultatet",
52
+ text: "Ladda ner den bearbetade bilden med säkerheten att originaldata är oåtkomlig.",
53
+ },
54
+ ];
55
+
56
+ const bibliography: PrivacyBlurLocaleContent['bibliography'] = [
57
+ {
58
+ name: "Privacy by Design (PbD) - AGPD",
59
+ url: "https://www.aepd.es/es/guias-y-herramientas/guias/guia-de-privacidad-desde-el-diseno",
60
+ },
61
+ ];
62
+
63
+ const seo: PrivacyBlurLocaleContent['seo'] = [
64
+ {
65
+ type: 'summary',
66
+ title: 'Privacy Editor: Pixla, Sudda och Dölj',
67
+ items: [
68
+ 'Tre redigeringsverktyg: Pixla, Sudda, Täck',
69
+ 'Automatisk ansiktsdetektering med AI (TinyFaceDetector)',
70
+ '100% lokal bearbetning - dina foton lämnar aldrig webbläsaren',
71
+ 'Inga vattenstämplar, inga gränser, helt gratis'
72
+ ]
73
+ },
74
+ { type: 'title', text: 'Digital Integritet: Hur du Skyddar Dina Visuella Data', level: 2 },
75
+ { type: 'paragraph', html: 'I sociala mediers era kan delning av foton utan kontroll exponera känsliga personuppgifter. Vårt verktyg låter dig dölja kritisk information (ansikten, registreringsskyltar, namn, adresser) innan du laddar upp dem till Internet, vilket säkerställer att din integritet förblir under din fulla kontroll.' },
76
+
77
+ { type: 'stats', items: [
78
+ { value: '3', label: 'Döljningsmetoder', icon: 'mdi:tools' },
79
+ { value: '100%', label: 'Lokal Integritet', icon: 'mdi:shield-check' },
80
+ { value: 'AI', label: 'Ansiktsdetektering', icon: 'mdi:brain' }
81
+ ], columns: 3 },
82
+
83
+ { type: 'title', text: 'De Tre Döljningsmetoderna Förklarade', level: 3 },
84
+ { type: 'comparative', items: [
85
+ {
86
+ title: 'Pixla',
87
+ description: 'Delar upp området i kvadrater, omöjliga att känna igen',
88
+ icon: 'mdi:blur',
89
+ points: [
90
+ 'Maximal irreversibel förvrängning',
91
+ 'Säkrare mot ansiktsigenkänning',
92
+ 'Synligt, tydligt att något är doldt',
93
+ 'Idealiskt: ansikten på offentliga foton'
94
+ ]
95
+ },
96
+ {
97
+ title: 'Sudda (Blur)',
98
+ description: 'Gaussisk suddighet - mer naturligt utseende',
99
+ icon: 'mdi:blur-off',
100
+ points: [
101
+ 'Mer elegant visuellt utseende',
102
+ 'Behåller viss färgkoherens',
103
+ 'Matematiskt omvändbar (teoretiskt)',
104
+ 'Idealiskt: mindre känslig information'
105
+ ],
106
+ highlight: true
107
+ },
108
+ {
109
+ title: 'Täck Helt',
110
+ description: 'Opakt färgblock - maximal integritet',
111
+ icon: 'mdi:rectangle',
112
+ points: [
113
+ 'Synlig, uppenbar döljning',
114
+ 'Maximal juridisk säkerhet/sekretess',
115
+ 'Ändrar den visuella kompositionen',
116
+ 'Idealiskt: dokument, känsliga data'
117
+ ]
118
+ }
119
+ ], columns: 3 },
120
+
121
+ { type: 'title', text: 'Automatisk Ansiktsdetektering med AI', level: 3 },
122
+ { type: 'paragraph', html: 'Vårt verktyg använder TinyFaceDetector, ett kompakt neuralt nätverk som körs direkt i din webbläsare för att identifiera ansikten automatiskt:' },
123
+ { type: 'list', items: [
124
+ '<strong>100% Lokalt:</strong> AI-modellen körs på din GPU/CPU, inte på fjärrservrar.',
125
+ '<strong>Inget Internet:</strong> Efter den första nedladdningen fungerar det helt offline.',
126
+ '<strong>Garanterad Sekretess:</strong> Ingen ser ansiktena: varken Google, OpenAI eller vi.',
127
+ '<strong>Automatisk Ett-klick:</strong> Hittar ansikten och låter dig välja att dölja dem med ett klick.'
128
+ ], icon: 'mdi:check' },
129
+
130
+ { type: 'card', title: 'Privacy by Design', html: 'Genom att bearbeta bilder med hjälp av webbläsarens lokala GPU och CPU garanterar vi att originalfoton aldrig lämnar din enhet. Även om du ändrar dig har ingenting överförts. Detta är den maximala standarden för digital integritet.' },
131
+
132
+ { type: 'title', text: 'Användningsfall för Sekretess', level: 3 },
133
+ { type: 'table', headers: ['Känslig Information', 'Rekommenderad Metod', 'Brådskande'], rows: [
134
+ ['Personers ansikten', 'Pixla eller Sudda', 'Kritiskt'],
135
+ ['Registreringsskyltar', 'Pixla (irreversibelt)', 'Kritiskt'],
136
+ ['Identitetshandlingar', 'Täck Helt eller Pixla', 'Kritiskt'],
137
+ ['Skrivna namn/adresser', 'Täck Helt eller Pixla', 'Hög'],
138
+ ['Telefonnummer', 'Pixla eller Täck', 'Hög'],
139
+ ['Medicinsk information', 'Täck Helt', 'Kritiskt'],
140
+ ['Synliga WiFi-lösenord', 'Pixla', 'Mellan']
141
+ ] },
142
+
143
+ { type: 'proscons', items: [
144
+ {
145
+ pro: 'Total integritet: 100% lokal bearbetning, inga servrar, ingen lagring',
146
+ con: 'Kräver en modern webbläsare med stöd för Canvas och WebGL'
147
+ },
148
+ {
149
+ pro: 'Automatisk ansiktsdetektering sparar manuell tid',
150
+ con: 'AI är inte perfekt - profilfoton eller delvis dolda ansikten kanske inte hittas'
151
+ },
152
+ {
153
+ pro: 'Tre metoder tillåter val mellan säkerhet och estetik',
154
+ con: 'Inga avancerade alternativ (smart warp, innehållsbaserad fyllning)'
155
+ },
156
+ {
157
+ pro: 'Helt gratis, ingen reklam, inga gränser',
158
+ con: 'Inte likvärdigt med professionell programvara som Photoshop'
159
+ }
160
+ ], proTitle: 'Fördelar', conTitle: 'Begränsningar' },
161
+
162
+ { type: 'diagnostic', variant: 'warning', title: 'Varning: Suddighet är INTE 100% säkert', icon: 'mdi:alert', badge: 'Säkerhet', html: 'Gaussisk suddighet är matematiskt omvändbar genom sofistikerade inversa algoritmer. Om informationen är KRITISK (juridiska dokument, identitet), använd <strong>Pixla eller Täck Helt</strong>. Suddighet är estetiskt bättre men mindre säkert.' },
163
+
164
+ { type: 'glossary', items: [
165
+ {
166
+ term: 'Pixling',
167
+ definition: 'Att minska upplösningen genom att dela upp området i enhetliga färgblock. Irreversibelt. Maximal säkerhet mot AI-ansiktsigenkänning.'
168
+ },
169
+ {
170
+ term: 'Gaussisk Suddighet',
171
+ definition: 'Matematisk utjämning baserad på normalfördelning. Teoretiskt omvändbar genom deconvolution, men praktiskt taget mycket svårt.'
172
+ },
173
+ {
174
+ term: 'Fast Täckning',
175
+ definition: 'Opakt block av enhetlig färg. Maximal säkerhet, maximal juridisk sekretess, mindre estetiskt elegant.'
176
+ },
177
+ {
178
+ term: 'TinyFaceDetector',
179
+ definition: 'Lättviktigt faltningsbaserat neuralt nätverk (CNN) för att detektera ansikten. Körs lokalt i webbläsaren utan behov av extern server.'
180
+ },
181
+ {
182
+ term: 'Privacy by Design (PbD)',
183
+ definition: 'Strategi där sekretess integreras från början i systemdesignen, inte läggs till senare. Vårt lokala tillvägagångssätt är Privacy by Design.'
184
+ }
185
+ ] },
186
+
187
+ { type: 'message', title: 'Sekretess i Din Kontroll', ariaLabel: 'Information om integritetsskydd', html: 'Vi lagrar eller bearbetar inte dina foton på fjärrservrar. Det finns inga spårningskakor. Ingen redigeringshistorik. Vi vet inte vad du döljer eftersom vi aldrig ser dina bilder. Full kontroll, full integritet, full frihet.' },
188
+
189
+ { type: 'title', text: 'Dela Säkert på Sociala Nätverk', level: 3 },
190
+ { type: 'paragraph', html: 'Innan du lägger upp ett foto på Internet, fråga dig själv: finns det information jag skulle föredra att inte vara offentlig? Barns ansikten, registreringsskyltar, adresser, dokumentnummer. En 2-minuters session i sekretessredigeraren nu undviker år av problem.' }
191
+ ];
192
+
193
+ const faqSchema: WithContext<FAQPage> = {
194
+ '@context': 'https://schema.org',
195
+ '@type': 'FAQPage',
196
+ mainEntity: faq.map((item) => ({
197
+ '@type': 'Question',
198
+ name: item.question,
199
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
200
+ })),
201
+ };
202
+
203
+ const howToSchema: WithContext<HowTo> = {
204
+ '@context': 'https://schema.org',
205
+ '@type': 'HowTo',
206
+ name: title,
207
+ description,
208
+ step: howTo.map((step) => ({
209
+ '@type': 'HowToStep',
210
+ name: step.name,
211
+ text: step.text,
212
+ })),
213
+ };
214
+
215
+ const appSchema: WithContext<SoftwareApplication> = {
216
+ '@context': 'https://schema.org',
217
+ '@type': 'SoftwareApplication',
218
+ name: title,
219
+ description,
220
+ applicationCategory: 'UtilitiesApplication',
221
+ operatingSystem: 'Web',
222
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
223
+ inLanguage: 'sv',
224
+ };
225
+
226
+ export const content: PrivacyBlurLocaleContent = {
227
+ slug,
228
+ title,
229
+ description,
230
+ ui,
231
+ seo,
232
+ faqTitle: "Vanliga Frågor",
233
+ faq,
234
+ bibliographyTitle: "Referenser",
235
+ bibliography,
236
+ howTo,
237
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
238
+ };