@jjlmoya/utils-audiovisual 1.6.0 → 1.8.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 (175) hide show
  1. package/package.json +59 -58
  2. package/src/category/i18n/de.ts +198 -0
  3. package/src/category/i18n/fr.ts +1 -1
  4. package/src/category/i18n/id.ts +198 -0
  5. package/src/category/i18n/it.ts +198 -0
  6. package/src/category/i18n/ja.ts +198 -0
  7. package/src/category/i18n/ko.ts +198 -0
  8. package/src/category/i18n/nl.ts +198 -0
  9. package/src/category/i18n/pl.ts +198 -0
  10. package/src/category/i18n/pt.ts +198 -0
  11. package/src/category/i18n/ru.ts +198 -0
  12. package/src/category/i18n/sv.ts +198 -0
  13. package/src/category/i18n/tr.ts +198 -0
  14. package/src/category/i18n/zh.ts +198 -0
  15. package/src/category/index.ts +31 -3
  16. package/src/tests/i18n_coverage.test.ts +36 -0
  17. package/src/tests/schemas_fulfillment.test.ts +23 -0
  18. package/src/tests/title_quality.test.ts +55 -0
  19. package/src/tool/chromaticLens/i18n/de.ts +246 -0
  20. package/src/tool/chromaticLens/i18n/en.ts +1 -1
  21. package/src/tool/chromaticLens/i18n/es.ts +1 -1
  22. package/src/tool/chromaticLens/i18n/fr.ts +1 -1
  23. package/src/tool/chromaticLens/i18n/id.ts +246 -0
  24. package/src/tool/chromaticLens/i18n/it.ts +246 -0
  25. package/src/tool/chromaticLens/i18n/ja.ts +246 -0
  26. package/src/tool/chromaticLens/i18n/ko.ts +246 -0
  27. package/src/tool/chromaticLens/i18n/nl.ts +246 -0
  28. package/src/tool/chromaticLens/i18n/pl.ts +246 -0
  29. package/src/tool/chromaticLens/i18n/pt.ts +246 -0
  30. package/src/tool/chromaticLens/i18n/ru.ts +246 -0
  31. package/src/tool/chromaticLens/i18n/sv.ts +246 -0
  32. package/src/tool/chromaticLens/i18n/tr.ts +246 -0
  33. package/src/tool/chromaticLens/i18n/zh.ts +246 -0
  34. package/src/tool/chromaticLens/index.ts +15 -7
  35. package/src/tool/collageMaker/i18n/de.ts +233 -0
  36. package/src/tool/collageMaker/i18n/en.ts +1 -1
  37. package/src/tool/collageMaker/i18n/es.ts +1 -1
  38. package/src/tool/collageMaker/i18n/fr.ts +1 -1
  39. package/src/tool/collageMaker/i18n/id.ts +233 -0
  40. package/src/tool/collageMaker/i18n/it.ts +233 -0
  41. package/src/tool/collageMaker/i18n/ja.ts +233 -0
  42. package/src/tool/collageMaker/i18n/ko.ts +233 -0
  43. package/src/tool/collageMaker/i18n/nl.ts +233 -0
  44. package/src/tool/collageMaker/i18n/pl.ts +233 -0
  45. package/src/tool/collageMaker/i18n/pt.ts +233 -0
  46. package/src/tool/collageMaker/i18n/ru.ts +233 -0
  47. package/src/tool/collageMaker/i18n/sv.ts +233 -0
  48. package/src/tool/collageMaker/i18n/tr.ts +233 -0
  49. package/src/tool/collageMaker/i18n/zh.ts +233 -0
  50. package/src/tool/collageMaker/index.ts +15 -6
  51. package/src/tool/exifCleaner/i18n/de.ts +277 -0
  52. package/src/tool/exifCleaner/i18n/en.ts +2 -2
  53. package/src/tool/exifCleaner/i18n/es.ts +2 -2
  54. package/src/tool/exifCleaner/i18n/fr.ts +4 -4
  55. package/src/tool/exifCleaner/i18n/id.ts +277 -0
  56. package/src/tool/exifCleaner/i18n/it.ts +277 -0
  57. package/src/tool/exifCleaner/i18n/ja.ts +277 -0
  58. package/src/tool/exifCleaner/i18n/ko.ts +277 -0
  59. package/src/tool/exifCleaner/i18n/nl.ts +277 -0
  60. package/src/tool/exifCleaner/i18n/pl.ts +277 -0
  61. package/src/tool/exifCleaner/i18n/pt.ts +277 -0
  62. package/src/tool/exifCleaner/i18n/ru.ts +277 -0
  63. package/src/tool/exifCleaner/i18n/sv.ts +277 -0
  64. package/src/tool/exifCleaner/i18n/tr.ts +277 -0
  65. package/src/tool/exifCleaner/i18n/zh.ts +277 -0
  66. package/src/tool/exifCleaner/index.ts +16 -8
  67. package/src/tool/imageCompressor/i18n/de.ts +242 -0
  68. package/src/tool/imageCompressor/i18n/en.ts +2 -2
  69. package/src/tool/imageCompressor/i18n/es.ts +2 -2
  70. package/src/tool/imageCompressor/i18n/id.ts +242 -0
  71. package/src/tool/imageCompressor/i18n/it.ts +242 -0
  72. package/src/tool/imageCompressor/i18n/ja.ts +242 -0
  73. package/src/tool/imageCompressor/i18n/ko.ts +242 -0
  74. package/src/tool/imageCompressor/i18n/nl.ts +242 -0
  75. package/src/tool/imageCompressor/i18n/pl.ts +242 -0
  76. package/src/tool/imageCompressor/i18n/pt.ts +242 -0
  77. package/src/tool/imageCompressor/i18n/ru.ts +242 -0
  78. package/src/tool/imageCompressor/i18n/sv.ts +242 -0
  79. package/src/tool/imageCompressor/i18n/tr.ts +242 -0
  80. package/src/tool/imageCompressor/i18n/zh.ts +244 -0
  81. package/src/tool/imageCompressor/index.ts +15 -7
  82. package/src/tool/printQualityCalculator/i18n/de.ts +261 -0
  83. package/src/tool/printQualityCalculator/i18n/en.ts +2 -2
  84. package/src/tool/printQualityCalculator/i18n/es.ts +3 -3
  85. package/src/tool/printQualityCalculator/i18n/fr.ts +3 -3
  86. package/src/tool/printQualityCalculator/i18n/id.ts +261 -0
  87. package/src/tool/printQualityCalculator/i18n/it.ts +261 -0
  88. package/src/tool/printQualityCalculator/i18n/ja.ts +261 -0
  89. package/src/tool/printQualityCalculator/i18n/ko.ts +261 -0
  90. package/src/tool/printQualityCalculator/i18n/nl.ts +261 -0
  91. package/src/tool/printQualityCalculator/i18n/pl.ts +261 -0
  92. package/src/tool/printQualityCalculator/i18n/pt.ts +261 -0
  93. package/src/tool/printQualityCalculator/i18n/ru.ts +261 -0
  94. package/src/tool/printQualityCalculator/i18n/sv.ts +261 -0
  95. package/src/tool/printQualityCalculator/i18n/tr.ts +261 -0
  96. package/src/tool/printQualityCalculator/i18n/zh.ts +261 -0
  97. package/src/tool/printQualityCalculator/index.ts +15 -7
  98. package/src/tool/privacyBlur/i18n/de.ts +238 -0
  99. package/src/tool/privacyBlur/i18n/en.ts +1 -1
  100. package/src/tool/privacyBlur/i18n/es.ts +1 -1
  101. package/src/tool/privacyBlur/i18n/fr.ts +1 -1
  102. package/src/tool/privacyBlur/i18n/id.ts +238 -0
  103. package/src/tool/privacyBlur/i18n/it.ts +238 -0
  104. package/src/tool/privacyBlur/i18n/ja.ts +238 -0
  105. package/src/tool/privacyBlur/i18n/ko.ts +238 -0
  106. package/src/tool/privacyBlur/i18n/nl.ts +238 -0
  107. package/src/tool/privacyBlur/i18n/pl.ts +238 -0
  108. package/src/tool/privacyBlur/i18n/pt.ts +238 -0
  109. package/src/tool/privacyBlur/i18n/ru.ts +238 -0
  110. package/src/tool/privacyBlur/i18n/sv.ts +238 -0
  111. package/src/tool/privacyBlur/i18n/tr.ts +238 -0
  112. package/src/tool/privacyBlur/i18n/zh.ts +238 -0
  113. package/src/tool/privacyBlur/index.ts +15 -7
  114. package/src/tool/subtitleSync/i18n/de.ts +241 -0
  115. package/src/tool/subtitleSync/i18n/en.ts +1 -1
  116. package/src/tool/subtitleSync/i18n/es.ts +1 -1
  117. package/src/tool/subtitleSync/i18n/fr.ts +8 -8
  118. package/src/tool/subtitleSync/i18n/id.ts +241 -0
  119. package/src/tool/subtitleSync/i18n/it.ts +241 -0
  120. package/src/tool/subtitleSync/i18n/ja.ts +241 -0
  121. package/src/tool/subtitleSync/i18n/ko.ts +241 -0
  122. package/src/tool/subtitleSync/i18n/nl.ts +241 -0
  123. package/src/tool/subtitleSync/i18n/pl.ts +241 -0
  124. package/src/tool/subtitleSync/i18n/pt.ts +241 -0
  125. package/src/tool/subtitleSync/i18n/ru.ts +241 -0
  126. package/src/tool/subtitleSync/i18n/sv.ts +241 -0
  127. package/src/tool/subtitleSync/i18n/tr.ts +241 -0
  128. package/src/tool/subtitleSync/i18n/zh.ts +241 -0
  129. package/src/tool/subtitleSync/index.ts +15 -7
  130. package/src/tool/timelapseCalculator/i18n/de.ts +169 -0
  131. package/src/tool/timelapseCalculator/i18n/fr.ts +2 -2
  132. package/src/tool/timelapseCalculator/i18n/id.ts +169 -0
  133. package/src/tool/timelapseCalculator/i18n/it.ts +169 -0
  134. package/src/tool/timelapseCalculator/i18n/ja.ts +169 -0
  135. package/src/tool/timelapseCalculator/i18n/ko.ts +169 -0
  136. package/src/tool/timelapseCalculator/i18n/nl.ts +169 -0
  137. package/src/tool/timelapseCalculator/i18n/pl.ts +169 -0
  138. package/src/tool/timelapseCalculator/i18n/pt.ts +169 -0
  139. package/src/tool/timelapseCalculator/i18n/ru.ts +169 -0
  140. package/src/tool/timelapseCalculator/i18n/sv.ts +169 -0
  141. package/src/tool/timelapseCalculator/i18n/tr.ts +169 -0
  142. package/src/tool/timelapseCalculator/i18n/zh.ts +169 -0
  143. package/src/tool/timelapseCalculator/index.ts +16 -8
  144. package/src/tool/tvDistance/i18n/de.ts +223 -0
  145. package/src/tool/tvDistance/i18n/en.ts +1 -1
  146. package/src/tool/tvDistance/i18n/es.ts +1 -1
  147. package/src/tool/tvDistance/i18n/fr.ts +1 -1
  148. package/src/tool/tvDistance/i18n/id.ts +223 -0
  149. package/src/tool/tvDistance/i18n/it.ts +223 -0
  150. package/src/tool/tvDistance/i18n/ja.ts +223 -0
  151. package/src/tool/tvDistance/i18n/ko.ts +223 -0
  152. package/src/tool/tvDistance/i18n/nl.ts +223 -0
  153. package/src/tool/tvDistance/i18n/pl.ts +223 -0
  154. package/src/tool/tvDistance/i18n/pt.ts +223 -0
  155. package/src/tool/tvDistance/i18n/ru.ts +223 -0
  156. package/src/tool/tvDistance/i18n/sv.ts +223 -0
  157. package/src/tool/tvDistance/i18n/tr.ts +223 -0
  158. package/src/tool/tvDistance/i18n/zh.ts +223 -0
  159. package/src/tool/tvDistance/index.ts +15 -7
  160. package/src/tool/videoFrameExtractor/i18n/de.ts +235 -0
  161. package/src/tool/videoFrameExtractor/i18n/en.ts +1 -1
  162. package/src/tool/videoFrameExtractor/i18n/es.ts +1 -1
  163. package/src/tool/videoFrameExtractor/i18n/fr.ts +1 -1
  164. package/src/tool/videoFrameExtractor/i18n/id.ts +235 -0
  165. package/src/tool/videoFrameExtractor/i18n/it.ts +235 -0
  166. package/src/tool/videoFrameExtractor/i18n/ja.ts +235 -0
  167. package/src/tool/videoFrameExtractor/i18n/ko.ts +235 -0
  168. package/src/tool/videoFrameExtractor/i18n/nl.ts +235 -0
  169. package/src/tool/videoFrameExtractor/i18n/pl.ts +235 -0
  170. package/src/tool/videoFrameExtractor/i18n/pt.ts +235 -0
  171. package/src/tool/videoFrameExtractor/i18n/ru.ts +235 -0
  172. package/src/tool/videoFrameExtractor/i18n/sv.ts +235 -0
  173. package/src/tool/videoFrameExtractor/i18n/tr.ts +235 -0
  174. package/src/tool/videoFrameExtractor/i18n/zh.ts +235 -0
  175. 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 = '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
+ };
@@ -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-pikselleme-bulaniklastirma-yuzleri-fotograflar';
5
+ const title = 'Çevrimiçi Gizlilik Editörü: Fotoğraflardaki Yüzleri Pikselle ve Gizle';
6
+ const description = 'Fotoğraflarınızın hassas bölgelerini sansürleyerek kimliğinizi koruyun. Yüzleri pikselleyin, belgeleri bulanıklaştırın veya özel bilgileri %100 yerel olarak kapatın.';
7
+
8
+ const ui: PrivacyBlurUI = {
9
+ toolPixel: "Pikselle",
10
+ toolBlur: "Bulanıklaştır",
11
+ toolSolid: "Kapat",
12
+ intensityLabel: "Yoğunluk",
13
+ undoButton: "Geri Al",
14
+ downloadButton: "Kaydet",
15
+ dropTitle: "Gizlilik Editörü",
16
+ dropSubtitle: "Görselinizi buraya sürükleyin veya başlamak için tıklayın",
17
+ privacySecureLabel: "%100 Yerel",
18
+ offlineLabel: "Çevrimdışı",
19
+ autoDetectFaces: "Otomatik Algıla",
20
+ loadingModels: "Modeller yükleniyor...",
21
+ noFacesDetected: "Otomatik olarak yüz algılanamadı.",
22
+ faqTitle: "Sıkça Sorulan Sorular",
23
+ bibliographyTitle: "Referanslar"
24
+ };
25
+
26
+ const faq: PrivacyBlurLocaleContent['faq'] = [
27
+ {
28
+ question: "Fotoğraflarım herhangi bir sunucuya yükleniyor mu?",
29
+ answer: "Hayır. Gizlilik editörü tamamen tarayıcınızda çalışır. Pikseller yerel olarak değiştirilir ve cihazınızın dışına hiçbir şey gönderilmez.",
30
+ },
31
+ {
32
+ question: "Otomatik yüz algılama nasıl çalışır?",
33
+ answer: "Harici bir bağlantıya ihtiyaç duymadan yüz özelliklerini belirlemek için tarayıcınızda çalışan hafif bir sinir ağı (TinyFaceDetector) kullanıyoruz.",
34
+ },
35
+ ];
36
+
37
+ const howTo: PrivacyBlurLocaleContent['howTo'] = [
38
+ {
39
+ name: "Fotoğrafınızı yükleyin",
40
+ text: "Gizlemek istediğiniz hassas bilgileri içeren görseli sürükleyin veya seçin.",
41
+ },
42
+ {
43
+ name: "Aracı seçin",
44
+ text: "İhtiyacınız olan gizlilik düzeyine bağlı olarak pikselleme, bulanıklaştırma veya sağlam kapatma arasında seçim yapın.",
45
+ },
46
+ {
47
+ name: "Alanı işaretleyin",
48
+ text: "Korumak istediğiniz bölgenin (yüzler, plakalar, isimler vb.) üzerine tıklayıp sürükleyin.",
49
+ },
50
+ {
51
+ name: "Sonucu kaydedin",
52
+ text: "Orijinal verilerin erişilemez olduğu güvencesiyle işlenmiş görseli indirin.",
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: 'Gizlilik Editörü: Pikselle, Bulanıklaştır ve Gizle',
67
+ items: [
68
+ 'Üç düzenleme aracı: Pikselleme, Bulanıklaştırma, Sağlam Kapatma',
69
+ 'Yapay Zeka ile otomatik yüz algılama (TinyFaceDetector)',
70
+ '%100 yerel işleme - fotoğraflarınız asla tarayıcıdan ayrılmaz',
71
+ 'Filigran yok, sınır yok, tamamen ücretsiz'
72
+ ]
73
+ },
74
+ { type: 'title', text: 'Dijital Gizlilik: Görsel Verilerinizi Nasıl Korursunuz?', level: 2 },
75
+ { type: 'paragraph', html: 'Sosyal medya çağında, fotoğrafları kontrolsüz bir şekilde paylaşmak hassas kişisel verileri ifşa edebilir. Aracımız, fotoğraflarınızı internete yüklemeden önce kritik bilgileri (yüzler, plakalar, isimler, adresler) gizlemenize olanak tanıyarak gizliliğinizin tam kontrolünüz altında kalmasını sağlar.' },
76
+
77
+ { type: 'stats', items: [
78
+ { value: '3', label: 'Gizleme Yöntemi', icon: 'mdi:tools' },
79
+ { value: '%100', label: 'Yerel Gizlilik', icon: 'mdi:shield-check' },
80
+ { value: 'AI', label: 'Yüz Algılama', icon: 'mdi:brain' }
81
+ ], columns: 3 },
82
+
83
+ { type: 'title', text: 'Üç Gizleme Yöntemi Açıklandı', level: 3 },
84
+ { type: 'comparative', items: [
85
+ {
86
+ title: 'Pikselleme',
87
+ description: 'Alanı karelere böler, tanınması imkansızdır',
88
+ icon: 'mdi:blur',
89
+ points: [
90
+ 'Maksimum geri dönülemez karartma',
91
+ 'Yüz tanımaya karşı daha güvenli',
92
+ 'Görünür, bir şeyin gizlendiği bellidir',
93
+ 'İdeal: halka açık fotoğraflardaki yüzler'
94
+ ]
95
+ },
96
+ {
97
+ title: 'Bulanıklaştırma (Blur)',
98
+ description: 'Gauss Yumuşatma - daha doğal görünüm',
99
+ icon: 'mdi:blur-off',
100
+ points: [
101
+ 'Daha zarif görsel görünüm',
102
+ 'Bazı ton uyumlarını korur',
103
+ 'Matematiksel olarak geri döndürülebilir (teorik olarak)',
104
+ 'İdeal: daha az hassas bilgiler'
105
+ ],
106
+ highlight: true
107
+ },
108
+ {
109
+ title: 'Sağlam Kapatma',
110
+ description: 'Opak renk bloğu - maksimum gizlilik',
111
+ icon: 'mdi:rectangle',
112
+ points: [
113
+ 'Görünür, belirgin gizleme',
114
+ 'Maksimum yasal güvenlik/gizlilik',
115
+ 'Görsel kompozisyonu değiştirir',
116
+ 'İdeal: belgeler, hassas veriler'
117
+ ]
118
+ }
119
+ ], columns: 3 },
120
+
121
+ { type: 'title', text: 'Yapay Zeka ile Otomatik Yüz Algılama', level: 3 },
122
+ { type: 'paragraph', html: 'Aracımız, yüzleri otomatik olarak tanımlamak için doğrudan tarayıcınızda çalışan kompakt bir sinir ağı olan TinyFaceDetector\'ı kullanır:' },
123
+ { type: 'list', items: [
124
+ '<strong>%100 Yerel:</strong> Yapay zeka modeli uzak sunucularda değil, GPU/CPU\'nuzda çalışır.',
125
+ '<strong>İnternet Gerekmez:</strong> İlk indirmeden sonra tamamen çevrimdışı çalışır.',
126
+ '<strong>Gizlilik Garantili:</strong> Yüzleri kimse görmez: ne Google, ne OpenAI, ne de biz.',
127
+ '<strong>Tek Tıkla Otomatik:</strong> Yüzleri algılar ve tek tıkla gizlemeyi seçmenize olanak tanır.'
128
+ ], icon: 'mdi:check' },
129
+
130
+ { type: 'card', title: 'Privacy by Design', html: 'Görüntüleri tarayıcınızın yerel GPU ve CPU\'sunu kullanarak işleyerek, orijinal fotoğrafların cihazınızdan asla ayrılmamasını garanti ediyoruz. Fikrinizi değiştirseniz bile hiçbir şey iletilmemiştir. Bu, dijital gizliliğin maksimum standardıdır.' },
131
+
132
+ { type: 'title', text: 'Gizlilik Kullanım Durumları', level: 3 },
133
+ { type: 'table', headers: ['Hassas Bilgi', 'Önerilen Yöntem', 'Aciliyet'], rows: [
134
+ ['İnsan yüzleri', 'Pikselle veya Bulanıklaştır', 'Kritik'],
135
+ ['Araç plakaları', 'Pikselle (geri dönülemez)', 'Kritik'],
136
+ ['Kimlik belgeleri', 'Sağlam Kapatma veya Pikselle', 'Kritik'],
137
+ ['Yazılı isimler/adresler', 'Sağlam Kapatma veya Pikselle', 'Yüksek'],
138
+ ['Telefon numaraları', 'Pikselle veya Kapat', 'Yüksek'],
139
+ ['Tıbbi bilgiler', 'Sağlam Kapatma', 'Kritik'],
140
+ ['Görünür WiFi sinyalleri', 'Pikselle', 'Orta']
141
+ ] },
142
+
143
+ { type: 'proscons', items: [
144
+ {
145
+ pro: 'Tam gizlilik: %100 yerel işleme, sunucu yok, depolama yok',
146
+ con: 'Canvas ve WebGL destekli modern tarayıcı gerektirir'
147
+ },
148
+ {
149
+ pro: 'Otomatik yüz algılama manuel zamandan tasarruf sağlar',
150
+ con: 'Yapay zeka mükemmel değildir - profil veya kısmi yüzler algılanmayabilir'
151
+ },
152
+ {
153
+ pro: 'Üç yöntem, güvenlik ve estetik arasında seçim yapmaya olanak tanır',
154
+ con: 'Gelişmiş seçenekler (akıllı deformasyon, bağlam doldurma) yok'
155
+ },
156
+ {
157
+ pro: 'Tamamen ücretsiz, reklam yok, sınır yok',
158
+ con: 'Photoshop gibi profesyonel yazılımlara eşdeğer değildir'
159
+ }
160
+ ], proTitle: 'Avantajlar', conTitle: 'Sınırlamalar' },
161
+
162
+ { type: 'diagnostic', variant: 'warning', title: 'Uyarı: Bulanıklaştırma %100 Güvenli DEĞİLDİR', icon: 'mdi:alert', badge: 'Güvenlik', html: 'Gauss bulanıklığı, gelişmiş ters algoritmalar aracılığıyla matematiksel olarak geri döndürülebilir. Bilgi KRİTİKSE (yasal belgeler, kimlik), <strong>Pikselleme veya Sağlam Kapatma</strong> kullanın. Bulanıklaştırma estetik olarak daha iyidir ancak daha az güvenlidir.' },
163
+
164
+ { type: 'glossary', items: [
165
+ {
166
+ term: 'Pikselleme',
167
+ definition: 'Alanı tek tip renk bloklarına bölerek çözünürlüğü düşürmek. Geri dönülemez. Yapay zeka yüz tanımasına karşı maksimum güvenlik.'
168
+ },
169
+ {
170
+ term: 'Gauss Bulanıklığı',
171
+ definition: 'Normal dağılıma dayalı matematiksel yumuşatma. Teorik olarak dekonvolüsyon yoluyla geri döndürülebilir ancak pratikte çok zordur.'
172
+ },
173
+ {
174
+ term: 'Sağlam Kapatma',
175
+ definition: 'Tek tip renkte opak blok. Maksimum güvenlik, maksimum yasal gizlilik, görsel olarak daha az zarif.'
176
+ },
177
+ {
178
+ term: 'TinyFaceDetector',
179
+ definition: 'Yüzleri algılamak için hafif evrişimli sinir ağı (CNN). Harici bir sunucuya ihtiyaç duymadan tarayıcıda yerel olarak çalışır.'
180
+ },
181
+ {
182
+ term: 'Privacy by Design (PbD)',
183
+ definition: 'Gizliliğin sisteme sonradan eklenmek yerine sistem tasarımından itibaren entegre edildiği yaklaşım. Yerel yaklaşımımız Tasarım Yoluyla Gizliliktir.'
184
+ }
185
+ ] },
186
+
187
+ { type: 'message', title: 'Gizlilik Kontrolünüzde', ariaLabel: 'Gizlilik koruması hakkında bilgi', html: 'Fotoğraflarınızı uzak sunucularda saklamıyor veya işlemiyoruz. İzleme çerezleri yok. Düzenleme geçmişi yok. Görsellerinizi asla görmediğimiz için neyi gizlediğinizi bilmiyoruz. Tam kontrol, tam gizlilik, tam özgürlük.' },
188
+
189
+ { type: 'title', text: 'Sosyal Ağlarda Güvenle Paylaşın', level: 3 },
190
+ { type: 'paragraph', html: 'İnternette herhangi bir fotoğraf paylaşmadan önce kendinize sorun: herkese açık olmamasını tercih edeceğim bilgiler var mı? Çocukların yüzleri, plakalar, adresler, belge numaraları. Şimdi yapılacak 2 dakikalık bir gizlilik oturumu, yıllarca sürecek sorunları önler.' }
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: 'tr',
224
+ };
225
+
226
+ export const content: PrivacyBlurLocaleContent = {
227
+ slug,
228
+ title,
229
+ description,
230
+ ui,
231
+ seo,
232
+ faqTitle: "Sıkça Sorulan Sorular",
233
+ faq,
234
+ bibliographyTitle: "Referanslar",
235
+ bibliography,
236
+ howTo,
237
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
238
+ };