@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.
- package/package.json +59 -58
- package/src/category/i18n/de.ts +198 -0
- package/src/category/i18n/fr.ts +1 -1
- 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/tests/schemas_fulfillment.test.ts +23 -0
- package/src/tests/title_quality.test.ts +55 -0
- package/src/tool/chromaticLens/i18n/de.ts +246 -0
- package/src/tool/chromaticLens/i18n/en.ts +1 -1
- package/src/tool/chromaticLens/i18n/es.ts +1 -1
- package/src/tool/chromaticLens/i18n/fr.ts +1 -1
- 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/en.ts +1 -1
- package/src/tool/collageMaker/i18n/es.ts +1 -1
- package/src/tool/collageMaker/i18n/fr.ts +1 -1
- 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/en.ts +2 -2
- package/src/tool/exifCleaner/i18n/es.ts +2 -2
- package/src/tool/exifCleaner/i18n/fr.ts +4 -4
- 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 +2 -2
- package/src/tool/imageCompressor/i18n/es.ts +2 -2
- 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/en.ts +2 -2
- package/src/tool/printQualityCalculator/i18n/es.ts +3 -3
- package/src/tool/printQualityCalculator/i18n/fr.ts +3 -3
- 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/en.ts +1 -1
- package/src/tool/privacyBlur/i18n/es.ts +1 -1
- package/src/tool/privacyBlur/i18n/fr.ts +1 -1
- 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/en.ts +1 -1
- package/src/tool/subtitleSync/i18n/es.ts +1 -1
- package/src/tool/subtitleSync/i18n/fr.ts +8 -8
- 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/en.ts +1 -1
- package/src/tool/tvDistance/i18n/es.ts +1 -1
- package/src/tool/tvDistance/i18n/fr.ts +1 -1
- 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/en.ts +1 -1
- package/src/tool/videoFrameExtractor/i18n/es.ts +1 -1
- package/src/tool/videoFrameExtractor/i18n/fr.ts +1 -1
- 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-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: "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
|
+
'3つの編集ツール:モザイク、ぼかし、塗りつぶし',
|
|
69
|
+
'AIによる自動顔検出(TinyFaceDetector)',
|
|
70
|
+
'100% ローカル処理 - 写真がブラウザの外に出ることはありません',
|
|
71
|
+
'透かしなし、制限なし、完全無料'
|
|
72
|
+
]
|
|
73
|
+
},
|
|
74
|
+
{ type: 'title', text: 'デジタル・プライバシー:視覚データの守り方', level: 2 },
|
|
75
|
+
{ type: 'paragraph', html: 'SNSの時代において、無防備に写真を共有することは機密性の高い個人情報を露出させるリスクを伴います。当ツールでは、インターネットにアップロードする前に、重要な情報(顔、ナンバープレート、名前、住所)を隠すことができ、プライバシーを完全にコントロール下に置くことができます。' },
|
|
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: '3つの加工メソッドの解説', 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: '3つのメソッドから安全性と美観のバランスを選択可能',
|
|
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: 'モザイク (Pixelation)',
|
|
167
|
+
definition: 'エリアを均一な色のブロックに分割して解像度を下げる手法。不可逆。AIによる顔認識に対する最大の防御策。'
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
term: 'ガウスぼかし (Gaussian Blur)',
|
|
171
|
+
definition: '正規分布に基づいた数学的な平滑化。理論上は逆演算(デコンボリューション)で復元可能ですが、実際には非常に困難です。'
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
term: '塗りつぶし (Solid Cover)',
|
|
175
|
+
definition: '均一な色の不透明なブロック。最大の安全性と法的なプライバシーを確保しますが、見た目の優雅さには欠けます。'
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
term: 'TinyFaceDetector',
|
|
179
|
+
definition: '顔検出用の軽量な畳み込みニューラルネットワーク(CNN)。外部サーバーなしでブラウザ内で動作します。'
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
term: 'Privacy by Design (PbD)',
|
|
183
|
+
definition: 'システムの設計段階からプライバシーを統合する手法。当ツールのローカル処理アプローチはまさにこれに該当します。'
|
|
184
|
+
}
|
|
185
|
+
] },
|
|
186
|
+
|
|
187
|
+
{ type: 'message', title: 'あなたのコントロール下にあるプライバシー', ariaLabel: 'プライバシー保護に関する情報', html: '私たちはあなたの写真をリモートサーバーに保存も処理もしません。追跡用クッキーも、編集履歴もありません。あなたが何を隠したのか、私たちは知ることができません。完全なコントロール、完全なプライバシー、完全な自由を提供します。' },
|
|
188
|
+
|
|
189
|
+
{ type: 'title', text: 'SNSで安全にシェアするために', 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: 'ja',
|
|
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-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: "프라이버시 설계(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
|
+
'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: '포토샵과 같은 전문 소프트웨어의 대체용은 아님'
|
|
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: '모자이크 (Pixelation)',
|
|
167
|
+
definition: '영역을 균일한 색상 블록으로 나누어 해상도를 낮추는 방식입니다. 비가역적이며 AI 얼굴 인식에 대한 최대 방어 수단입니다.'
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
term: '가우시안 블러 (Gaussian Blur)',
|
|
171
|
+
definition: '정규 분포에 기반한 수학적 평활화 기법입니다. 이론적으로는 복구가 가능하지만 실제로는 매우 어렵습니다.'
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
term: '색 채우기 (Solid Cover)',
|
|
175
|
+
definition: '균일한 색상의 불투명 블록입니다. 최고의 보안과 법적 프라이버시를 제공하지만 시각적으로는 투박할 수 있습니다.'
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
term: 'TinyFaceDetector',
|
|
179
|
+
definition: '얼굴 감지를 위한 경량 합성곱 신경망(CNN)입니다. 외부 서버 없이 브라우저 내에서 직접 실행됩니다.'
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
term: '프라이버시 설계 (Privacy by Design, PbD)',
|
|
183
|
+
definition: '프라이버시를 나중에 추가하는 것이 아니라 시스템 설계 단계부터 통합하는 접근 방식입니다. 당사의 로컬 처리 방식이 이에 해당합니다.'
|
|
184
|
+
}
|
|
185
|
+
] },
|
|
186
|
+
|
|
187
|
+
{ type: 'message', title: '사용자가 제어하는 프라이버시', ariaLabel: '개인정보 보호 정보', html: '당사는 사용자의 사진을 외부 서버에 저장하거나 처리하지 않습니다. 추적용 쿠키도, 편집 내역도 없습니다. 당사는 사용자의 이미지를 볼 수 없으므로 무엇을 숨겼는지 알지 못합니다. 완전한 통제, 완전한 프라이버시, 완전한 자유를 누리세요.' },
|
|
188
|
+
|
|
189
|
+
{ type: 'title', text: 'SNS에 안전하게 공유하기', 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: 'ko',
|
|
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
|
+
};
|