@jjlmoya/utils-audiovisual 1.7.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.
- package/package.json +2 -1
- package/src/category/i18n/de.ts +198 -0
- package/src/category/i18n/id.ts +198 -0
- package/src/category/i18n/it.ts +198 -0
- package/src/category/i18n/ja.ts +198 -0
- package/src/category/i18n/ko.ts +198 -0
- package/src/category/i18n/nl.ts +198 -0
- package/src/category/i18n/pl.ts +198 -0
- package/src/category/i18n/pt.ts +198 -0
- package/src/category/i18n/ru.ts +198 -0
- package/src/category/i18n/sv.ts +198 -0
- package/src/category/i18n/tr.ts +198 -0
- package/src/category/i18n/zh.ts +198 -0
- package/src/category/index.ts +31 -3
- package/src/tests/i18n_coverage.test.ts +36 -0
- package/src/tool/chromaticLens/i18n/de.ts +246 -0
- package/src/tool/chromaticLens/i18n/id.ts +246 -0
- package/src/tool/chromaticLens/i18n/it.ts +246 -0
- package/src/tool/chromaticLens/i18n/ja.ts +246 -0
- package/src/tool/chromaticLens/i18n/ko.ts +246 -0
- package/src/tool/chromaticLens/i18n/nl.ts +246 -0
- package/src/tool/chromaticLens/i18n/pl.ts +246 -0
- package/src/tool/chromaticLens/i18n/pt.ts +246 -0
- package/src/tool/chromaticLens/i18n/ru.ts +246 -0
- package/src/tool/chromaticLens/i18n/sv.ts +246 -0
- package/src/tool/chromaticLens/i18n/tr.ts +246 -0
- package/src/tool/chromaticLens/i18n/zh.ts +246 -0
- package/src/tool/chromaticLens/index.ts +15 -7
- package/src/tool/collageMaker/i18n/de.ts +233 -0
- package/src/tool/collageMaker/i18n/id.ts +233 -0
- package/src/tool/collageMaker/i18n/it.ts +233 -0
- package/src/tool/collageMaker/i18n/ja.ts +233 -0
- package/src/tool/collageMaker/i18n/ko.ts +233 -0
- package/src/tool/collageMaker/i18n/nl.ts +233 -0
- package/src/tool/collageMaker/i18n/pl.ts +233 -0
- package/src/tool/collageMaker/i18n/pt.ts +233 -0
- package/src/tool/collageMaker/i18n/ru.ts +233 -0
- package/src/tool/collageMaker/i18n/sv.ts +233 -0
- package/src/tool/collageMaker/i18n/tr.ts +233 -0
- package/src/tool/collageMaker/i18n/zh.ts +233 -0
- package/src/tool/collageMaker/index.ts +15 -6
- package/src/tool/exifCleaner/i18n/de.ts +277 -0
- package/src/tool/exifCleaner/i18n/fr.ts +1 -1
- package/src/tool/exifCleaner/i18n/id.ts +277 -0
- package/src/tool/exifCleaner/i18n/it.ts +277 -0
- package/src/tool/exifCleaner/i18n/ja.ts +277 -0
- package/src/tool/exifCleaner/i18n/ko.ts +277 -0
- package/src/tool/exifCleaner/i18n/nl.ts +277 -0
- package/src/tool/exifCleaner/i18n/pl.ts +277 -0
- package/src/tool/exifCleaner/i18n/pt.ts +277 -0
- package/src/tool/exifCleaner/i18n/ru.ts +277 -0
- package/src/tool/exifCleaner/i18n/sv.ts +277 -0
- package/src/tool/exifCleaner/i18n/tr.ts +277 -0
- package/src/tool/exifCleaner/i18n/zh.ts +277 -0
- package/src/tool/exifCleaner/index.ts +16 -8
- package/src/tool/imageCompressor/i18n/de.ts +242 -0
- package/src/tool/imageCompressor/i18n/en.ts +1 -1
- package/src/tool/imageCompressor/i18n/es.ts +1 -1
- package/src/tool/imageCompressor/i18n/id.ts +242 -0
- package/src/tool/imageCompressor/i18n/it.ts +242 -0
- package/src/tool/imageCompressor/i18n/ja.ts +242 -0
- package/src/tool/imageCompressor/i18n/ko.ts +242 -0
- package/src/tool/imageCompressor/i18n/nl.ts +242 -0
- package/src/tool/imageCompressor/i18n/pl.ts +242 -0
- package/src/tool/imageCompressor/i18n/pt.ts +242 -0
- package/src/tool/imageCompressor/i18n/ru.ts +242 -0
- package/src/tool/imageCompressor/i18n/sv.ts +242 -0
- package/src/tool/imageCompressor/i18n/tr.ts +242 -0
- package/src/tool/imageCompressor/i18n/zh.ts +244 -0
- package/src/tool/imageCompressor/index.ts +15 -7
- package/src/tool/printQualityCalculator/i18n/de.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/fr.ts +1 -1
- package/src/tool/printQualityCalculator/i18n/id.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/it.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/ja.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/ko.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/nl.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/pl.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/pt.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/ru.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/sv.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/tr.ts +261 -0
- package/src/tool/printQualityCalculator/i18n/zh.ts +261 -0
- package/src/tool/printQualityCalculator/index.ts +15 -7
- package/src/tool/privacyBlur/i18n/de.ts +238 -0
- package/src/tool/privacyBlur/i18n/id.ts +238 -0
- package/src/tool/privacyBlur/i18n/it.ts +238 -0
- package/src/tool/privacyBlur/i18n/ja.ts +238 -0
- package/src/tool/privacyBlur/i18n/ko.ts +238 -0
- package/src/tool/privacyBlur/i18n/nl.ts +238 -0
- package/src/tool/privacyBlur/i18n/pl.ts +238 -0
- package/src/tool/privacyBlur/i18n/pt.ts +238 -0
- package/src/tool/privacyBlur/i18n/ru.ts +238 -0
- package/src/tool/privacyBlur/i18n/sv.ts +238 -0
- package/src/tool/privacyBlur/i18n/tr.ts +238 -0
- package/src/tool/privacyBlur/i18n/zh.ts +238 -0
- package/src/tool/privacyBlur/index.ts +15 -7
- package/src/tool/subtitleSync/i18n/de.ts +241 -0
- package/src/tool/subtitleSync/i18n/fr.ts +5 -5
- package/src/tool/subtitleSync/i18n/id.ts +241 -0
- package/src/tool/subtitleSync/i18n/it.ts +241 -0
- package/src/tool/subtitleSync/i18n/ja.ts +241 -0
- package/src/tool/subtitleSync/i18n/ko.ts +241 -0
- package/src/tool/subtitleSync/i18n/nl.ts +241 -0
- package/src/tool/subtitleSync/i18n/pl.ts +241 -0
- package/src/tool/subtitleSync/i18n/pt.ts +241 -0
- package/src/tool/subtitleSync/i18n/ru.ts +241 -0
- package/src/tool/subtitleSync/i18n/sv.ts +241 -0
- package/src/tool/subtitleSync/i18n/tr.ts +241 -0
- package/src/tool/subtitleSync/i18n/zh.ts +241 -0
- package/src/tool/subtitleSync/index.ts +15 -7
- package/src/tool/timelapseCalculator/i18n/de.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/fr.ts +2 -2
- package/src/tool/timelapseCalculator/i18n/id.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/it.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/ja.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/ko.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/nl.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/pl.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/pt.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/ru.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/sv.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/tr.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/zh.ts +169 -0
- package/src/tool/timelapseCalculator/index.ts +16 -8
- package/src/tool/tvDistance/i18n/de.ts +223 -0
- package/src/tool/tvDistance/i18n/id.ts +223 -0
- package/src/tool/tvDistance/i18n/it.ts +223 -0
- package/src/tool/tvDistance/i18n/ja.ts +223 -0
- package/src/tool/tvDistance/i18n/ko.ts +223 -0
- package/src/tool/tvDistance/i18n/nl.ts +223 -0
- package/src/tool/tvDistance/i18n/pl.ts +223 -0
- package/src/tool/tvDistance/i18n/pt.ts +223 -0
- package/src/tool/tvDistance/i18n/ru.ts +223 -0
- package/src/tool/tvDistance/i18n/sv.ts +223 -0
- package/src/tool/tvDistance/i18n/tr.ts +223 -0
- package/src/tool/tvDistance/i18n/zh.ts +223 -0
- package/src/tool/tvDistance/index.ts +15 -7
- package/src/tool/videoFrameExtractor/i18n/de.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/id.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/it.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/ja.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/ko.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/nl.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/pl.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/pt.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/ru.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/sv.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/tr.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/zh.ts +235 -0
- 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-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
|
+
};
|
|
@@ -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-pixelate-blur-faces-photos';
|
|
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: "隐私设计 (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
|
+
'使用 AI 进行自动脸部检测 (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: 'AI', label: '脸部检测', icon: 'mdi:brain' }
|
|
81
|
+
], columns: 3 },
|
|
82
|
+
|
|
83
|
+
{ type: 'title', text: '三种隐藏方法说明', level: 3 },
|
|
84
|
+
{ type: 'comparative', items: [
|
|
85
|
+
{
|
|
86
|
+
title: '马赛克 (Pixelate)',
|
|
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: '色块覆盖 (Solid)',
|
|
110
|
+
description: '不透明色块 - 最高隐私级别',
|
|
111
|
+
icon: 'mdi:rectangle',
|
|
112
|
+
points: [
|
|
113
|
+
'可见、明显的隐藏',
|
|
114
|
+
'最高的法律安全性/隐私性',
|
|
115
|
+
'改变视觉构图',
|
|
116
|
+
'理想场景:文档、敏感数据'
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
], columns: 3 },
|
|
120
|
+
|
|
121
|
+
{ type: 'title', text: '使用 AI 进行自动脸部检测', level: 3 },
|
|
122
|
+
{ type: 'paragraph', html: '我们的工具使用 TinyFaceDetector,这是一个直接在您的浏览器中运行的小型神经网络,用于自动识别脸部:' },
|
|
123
|
+
{ type: 'list', items: [
|
|
124
|
+
'<strong>100% 本地:</strong> AI 模型在您的 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: '通过使用您浏览器的本地 GPU 和 CPU 处理图像,我们保证原始照片永远不会离开您的设备。即使您改变主意,也不会传输任何内容。这是数字隐私的最高标准。' },
|
|
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: 'AI 并不完美 - 侧脸或部分脸部可能无法被检测到'
|
|
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: '通过将区域划分为统一的颜色块来降低分辨率。不可逆。针对 AI 人脸识别的最大安全性。'
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
term: '高斯模糊',
|
|
171
|
+
definition: '基于正态分布的数学平滑。理论上可以通过反卷积还原,但实际上非常困难。'
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
term: '色块覆盖',
|
|
175
|
+
definition: '均匀颜色的不透明块。最高的安全性,最高的法律隐私性,视觉上不够雅致。'
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
term: 'TinyFaceDetector',
|
|
179
|
+
definition: '用于检测脸部的轻量级卷积神经网络 (CNN)。在浏览器中本地运行,无需外部服务器。'
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
term: '隐私设计 (PbD)',
|
|
183
|
+
definition: '一种在系统设计之初就整合隐私的方法,而不是后来才添加。我们的本地处理方法正是隐私设计。'
|
|
184
|
+
}
|
|
185
|
+
] },
|
|
186
|
+
|
|
187
|
+
{ type: 'message', title: '隐私由您掌控', ariaLabel: '关于隐私保护的信息', html: '我们不在远程服务器上存储或处理您的照片。没有跟踪 Cookie。没有编辑历史记录。我们不知道您隐藏了什么,因为我们从未看到您的图像。完全控制、完全隐私、完全自由。' },
|
|
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: 'zh',
|
|
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
|
+
};
|
|
@@ -22,10 +22,6 @@ export interface PrivacyBlurUI {
|
|
|
22
22
|
|
|
23
23
|
export type PrivacyBlurLocaleContent = ToolLocaleContent<PrivacyBlurUI>;
|
|
24
24
|
|
|
25
|
-
import { content as es } from './i18n/es';
|
|
26
|
-
import { content as en } from './i18n/en';
|
|
27
|
-
import { content as fr } from './i18n/fr';
|
|
28
|
-
|
|
29
25
|
export const privacyBlur: AudiovisualToolEntry<PrivacyBlurUI> = {
|
|
30
26
|
id: 'editor-privacidad',
|
|
31
27
|
icons: {
|
|
@@ -33,9 +29,21 @@ export const privacyBlur: AudiovisualToolEntry<PrivacyBlurUI> = {
|
|
|
33
29
|
fg: 'mdi:blur',
|
|
34
30
|
},
|
|
35
31
|
i18n: {
|
|
36
|
-
es: async () => es as unknown as PrivacyBlurLocaleContent,
|
|
37
|
-
en: async () => en as unknown as PrivacyBlurLocaleContent,
|
|
38
|
-
fr: async () => fr as unknown as PrivacyBlurLocaleContent,
|
|
32
|
+
es: async () => (await import('./i18n/es')).content as unknown as PrivacyBlurLocaleContent,
|
|
33
|
+
en: async () => (await import('./i18n/en')).content as unknown as PrivacyBlurLocaleContent,
|
|
34
|
+
fr: async () => (await import('./i18n/fr')).content as unknown as PrivacyBlurLocaleContent,
|
|
35
|
+
de: async () => (await import('./i18n/de')).content as unknown as PrivacyBlurLocaleContent,
|
|
36
|
+
it: async () => (await import('./i18n/it')).content as unknown as PrivacyBlurLocaleContent,
|
|
37
|
+
pt: async () => (await import('./i18n/pt')).content as unknown as PrivacyBlurLocaleContent,
|
|
38
|
+
id: async () => (await import('./i18n/id')).content as unknown as PrivacyBlurLocaleContent,
|
|
39
|
+
ja: async () => (await import('./i18n/ja')).content as unknown as PrivacyBlurLocaleContent,
|
|
40
|
+
ko: async () => (await import('./i18n/ko')).content as unknown as PrivacyBlurLocaleContent,
|
|
41
|
+
nl: async () => (await import('./i18n/nl')).content as unknown as PrivacyBlurLocaleContent,
|
|
42
|
+
pl: async () => (await import('./i18n/pl')).content as unknown as PrivacyBlurLocaleContent,
|
|
43
|
+
ru: async () => (await import('./i18n/ru')).content as unknown as PrivacyBlurLocaleContent,
|
|
44
|
+
sv: async () => (await import('./i18n/sv')).content as unknown as PrivacyBlurLocaleContent,
|
|
45
|
+
tr: async () => (await import('./i18n/tr')).content as unknown as PrivacyBlurLocaleContent,
|
|
46
|
+
zh: async () => (await import('./i18n/zh')).content as unknown as PrivacyBlurLocaleContent,
|
|
39
47
|
},
|
|
40
48
|
};
|
|
41
49
|
|