@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.
- 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/tests/slug_uniqueness.test.ts +81 -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,242 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ImageCompressorUI, ImageCompressorLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'online-gorsel-kompresor-kalite-kaybi-olmadan-dosya-boyutunu-dusur';
|
|
5
|
+
const title = 'Online Görsel Kompresör: Kalite kaybı olmadan boyutu düşürün';
|
|
6
|
+
const description = 'JPG, PNG ve WebP fotoğraflarınızı ücretsiz olarak optimize edin ve sıkıştırın. Web yükleme hızınızı yerel olarak artırmak için dosya boyutunu küçültün.';
|
|
7
|
+
|
|
8
|
+
const ui: ImageCompressorUI = {
|
|
9
|
+
dropTitle: "Görsel Optimizasyonu",
|
|
10
|
+
dropSubtitle: "Boyutlarını anında düşürmek için fotoğraflarınızı sürükleyin.",
|
|
11
|
+
settingsTitle: "Sıkıştırma Ayarları",
|
|
12
|
+
qualityLabel: "Görsel Kalite",
|
|
13
|
+
widthLabel: "Maksimum Genişlik (Piksel)",
|
|
14
|
+
convertToWebpLabel: "WebP\'ye Dönüştür",
|
|
15
|
+
compressionLabel: "Sıkıştırma",
|
|
16
|
+
compressBtn: "Görseli Sıkıştır",
|
|
17
|
+
processingLabel: "İşleniyor...",
|
|
18
|
+
resultsTitle: "Optimize Edilmiş Görseller",
|
|
19
|
+
originalSizeLabel: "Orijinal Boyut",
|
|
20
|
+
newSizeLabel: "Yeni Boyut",
|
|
21
|
+
reductionLabel: "Tasarruf",
|
|
22
|
+
downloadBtn: "İndir",
|
|
23
|
+
addMoreBtn: "Daha fazla ekle",
|
|
24
|
+
browseFilesBtn: "Dosyalara göz at",
|
|
25
|
+
processedFilesTitle: "İşlenen Dosyalar",
|
|
26
|
+
downloadAllBtn: "Hepsini İndir",
|
|
27
|
+
adjustThisImage: "Bu görseli ayarla",
|
|
28
|
+
downloadTitle: "İndir",
|
|
29
|
+
maxWidthLabel: "Maks genişlik (px)",
|
|
30
|
+
closeBtn: "Kapat",
|
|
31
|
+
totalSavingsLabel: "Toplam tasarruf",
|
|
32
|
+
noSavings: "Net tasarruf yok",
|
|
33
|
+
faqTitle: "Sıkça Sorulan Sorular",
|
|
34
|
+
bibliographyTitle: "Referanslar"
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const faq: ImageCompressorLocaleContent['faq'] = [
|
|
38
|
+
{
|
|
39
|
+
question: "Kayıpsız sıkıştırma nasıl çalışır?",
|
|
40
|
+
answer: "Gereksiz meta verileri kaldıran ve piksel kodlamasını optimize eden algoritmalar kullanıyoruz. WebP seçildiğinde, geleneksel formatlardan daha gelişmiş bir sıkıştırma teknolojisi kullanılır.",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
question: "Görsellerim herhangi bir sunucuya yükleniyor mu?",
|
|
44
|
+
answer: "Hayır. Tüm işlemler %100 tarayıcınızda (İstemci Tarafı) gerçekleşir. Fotoğraflarınız asla bilgisayarınızdan ayrılmaz, bu da mutlak gizliliği garanti eder.",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
question: "Neden WebP\'ye dönüştürmeliyim?",
|
|
48
|
+
answer: "WebP, web için modern standart formattır. JPG ve PNG\'den daha üstün kaliteyi %30\'a kadar daha az boyutla sunar, bu da sayfa yükleme süresini hızlandırır.",
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
const howTo: ImageCompressorLocaleContent['howTo'] = [
|
|
53
|
+
{
|
|
54
|
+
name: "Görseli yükleyin",
|
|
55
|
+
text: "Sıkıştırmak istediğiniz dosyayı (JPG, PNG veya WebP) yükleyin.",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: "Kaliteyi ayarlayın",
|
|
59
|
+
text: "Dosya boyutu ve görsel kalite arasındaki mükemmel dengeyi bulmak için kaydırıcıyı kullanın (önerilen: %75 85).",
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: "Yeniden boyutlandırın (isteğe bağlı)",
|
|
63
|
+
text: "Görsel çok büyükse, çözünürlüğünü düşürmek için maksimum bir genişlik belirleyebilirsiniz.",
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: "Sonucu indirin",
|
|
67
|
+
text: "Optimize edilmiş görselinizi kullanıma hazır bir şekilde almak için indir düğmesine basın.",
|
|
68
|
+
},
|
|
69
|
+
];
|
|
70
|
+
|
|
71
|
+
const bibliography: ImageCompressorLocaleContent['bibliography'] = [
|
|
72
|
+
{
|
|
73
|
+
name: "WebP: Web için Görsel Formatı",
|
|
74
|
+
url: "https://developers.google.com/speed/webp",
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: "SEO için görsel optimizasyonunun önemi",
|
|
78
|
+
url: "https://developers.google.com/search/docs/appearance/google-images",
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
|
|
82
|
+
const seo: ImageCompressorLocaleContent['seo'] = [
|
|
83
|
+
{
|
|
84
|
+
type: 'summary',
|
|
85
|
+
title: 'Profesyonel Web Görsel Optimizasyonu',
|
|
86
|
+
items: [
|
|
87
|
+
'Akıllı JPG, PNG ve WebP sıkıştırma',
|
|
88
|
+
'Görsel kaliteyi koruyarak boyutu %50-80 oranında düşürün',
|
|
89
|
+
'%100 yerel işleme - gizlilik garantili',
|
|
90
|
+
'Core Web Vitals\'ı ve SEO sıralamasını iyileştirin'
|
|
91
|
+
]
|
|
92
|
+
},
|
|
93
|
+
{ type: 'title', text: 'Görsel Optimizasyonu: Web Hızı ve Core Web Vitals', level: 2 },
|
|
94
|
+
{ type: 'paragraph', html: 'Dijital hız çağında, yavaş bir web sitesi kullanıcı kaybeder. Optimize edilmemiş görseller, bir web sayfasının toplam boyutunun %60-70\'ini oluşturur. Bunları optimize etmek, Google metriklerinizi (LCP, CLS) ve arama sonuçlarındaki sıralamanızı iyileştirmek için ilk adımdır.' },
|
|
95
|
+
|
|
96
|
+
{ type: 'stats', items: [
|
|
97
|
+
{ value: '%50-80', label: 'Tipik Boyut Azaltma', icon: 'mdi:trending-down' },
|
|
98
|
+
{ value: '%100', label: 'Yerel Gizlilik', icon: 'mdi:lock' },
|
|
99
|
+
{ value: '+%30', label: 'JPG\'den Daha Hızlı', icon: 'mdi:speedometer' }
|
|
100
|
+
], columns: 3 },
|
|
101
|
+
|
|
102
|
+
{ type: 'title', text: 'Sıkıştırma Formatlarının Açıklaması', level: 3 },
|
|
103
|
+
{ type: 'table', headers: ['Format', 'Sıkıştırma', 'Kullanım Durumları', 'Uyumluluk'], rows: [
|
|
104
|
+
['JPEG', 'Kayıplı %50-90', 'Kamera fotoğrafları, editoryal içerik', 'Evrensel (%100)'],
|
|
105
|
+
['PNG', 'Kayıpsız %30-50', 'Grafikler, logolar, şeffaflıklar', 'Evrensel (%100)'],
|
|
106
|
+
['WebP', 'Kayıplı/Kayıpsız %25-35 daha fazla', 'Modern web, sosyal ağlar', '%95 modern tarayıcılar'],
|
|
107
|
+
['AVIF', 'Kayıplı/Kayıpsız %20 iyileştirme', 'Yeni nesil web', 'Yalnızca yeni tarayıcılar']
|
|
108
|
+
] },
|
|
109
|
+
|
|
110
|
+
{ type: 'card', title: 'Neden WebP Gelecektir', html: 'Google, WebP\'yi özellikle web için geliştirdi. JPEG ve PNG\'ye göre üstün sıkıştırma sunarken görsel kaliteyi korur veya iyileştirir. Eşdeğer JPEG\'lerden %25-35 daha küçüktür. Modern tarayıcıların %95\'i bunu destekler.' },
|
|
111
|
+
|
|
112
|
+
{ type: 'title', text: 'Kayıplı vs Kayıpsız Sıkıştırma', level: 3 },
|
|
113
|
+
{ type: 'comparative', items: [
|
|
114
|
+
{
|
|
115
|
+
title: 'Kayıplı Sıkıştırma (Lossy)',
|
|
116
|
+
description: 'JPG, WebP - Algılanamaz görsel bilgileri kaldırır',
|
|
117
|
+
icon: 'mdi:compress',
|
|
118
|
+
points: [
|
|
119
|
+
'Orijinal boyutun %70-90\'ını azaltır',
|
|
120
|
+
'Kalite %75\'in üzerinde tutulursa insan gözü tarafından fark edilemez',
|
|
121
|
+
'Gerçekçi fotoğrafçılık için idealdir',
|
|
122
|
+
'Logolar veya keskin metinler için önerilmez'
|
|
123
|
+
],
|
|
124
|
+
highlight: true
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
title: 'Kayıpsız Sıkıştırma (Lossless)',
|
|
128
|
+
description: 'PNG, WebP kayıpsız - %100 görsel veriyi korur',
|
|
129
|
+
icon: 'mdi:shield',
|
|
130
|
+
points: [
|
|
131
|
+
'%20-50 oranında boyut azaltır',
|
|
132
|
+
'Mükemmel kalite, bozulma yok',
|
|
133
|
+
'Grafikler, logolar, şeffaflıklar için idealdir',
|
|
134
|
+
'Kayıplı sıkıştırmaya göre daha ağır dosyalar'
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
], columns: 2 },
|
|
138
|
+
|
|
139
|
+
{ type: 'title', text: 'SEO ve Dönüşüm Üzerindeki Etkisi', level: 3 },
|
|
140
|
+
{ type: 'list', items: [
|
|
141
|
+
'<strong>Core Web Vitals:</strong> Google yavaş siteleri cezalandırır. Optimize edilmiş görseller LCP (En Büyük İçerikli Boyama) değerini doğrudan iyileştirir.',
|
|
142
|
+
'<strong>Hemen Çıkma Oranı:</strong> Her saniyelik gecikme = %7 daha fazla hemen çıkma. Daha hızlı görseller = ayrılan daha az kullanıcı.',
|
|
143
|
+
'<strong>Arama Sıralaması:</strong> Hız bir sıralama faktörüdür. Görselleri optimize etmek sıralamayı yükseltir.',
|
|
144
|
+
'<strong>Dönüşüm:</strong> Daha hızlı yükleme süreleri = daha fazla dönüşüm. Araştırmalar, optimizasyon ile +%10 dönüşüm artışı göstermektedir.'
|
|
145
|
+
], icon: 'mdi:check' },
|
|
146
|
+
|
|
147
|
+
{ type: 'proscons', items: [
|
|
148
|
+
{
|
|
149
|
+
pro: 'Tam gizlilik: %100 yerel işleme, bulut sunucusu yok',
|
|
150
|
+
con: 'Canvas API destekli tarayıcı gerektirir (evrenseldir)'
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
pro: 'WebP, eşit kalitede JPEG\'den %25-35 daha küçüktür',
|
|
154
|
+
con: 'Eski Safari ve IE, WebP\'yi desteklemez (fallback mevcuttur)'
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
pro: 'Birden fazla görselin anında işlenmesi',
|
|
158
|
+
con: 'Çok büyük görseller (50MB+) bekleme süresi gerektirebilir'
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
pro: 'İsteğe bağlı yeniden boyutlandırma: sıkıştırmanın yanı sıra çözünürlüğü de düşürür',
|
|
162
|
+
con: 'Yeniden boyutlandırma bilgi kaybına neden olur - çözünürlüğü kaynakta optimize etmek daha iyidir'
|
|
163
|
+
}
|
|
164
|
+
], proTitle: 'Avantajlar', conTitle: 'Sınırlamalar' },
|
|
165
|
+
|
|
166
|
+
{ type: 'diagnostic', variant: 'warning', title: 'Dikkat: Aşırı Sıkıştırma Kaliteyi Bozar', icon: 'mdi:alert', badge: 'Kalite', html: 'Fotoğrafçılık için kaliteyi %75, editoryal içerik için %85\'in üzerinde tutun. Bunun altında, sıkıştırma kusurları (lekeler, bantlanma) görünür hale gelir. Küçük resimde iyi görünen bir görsel, büyük halde kötü görünebilir.' },
|
|
167
|
+
|
|
168
|
+
{ type: 'glossary', items: [
|
|
169
|
+
{
|
|
170
|
+
term: 'Kayıplı Sıkıştırma (Lossy)',
|
|
171
|
+
definition: 'İnsan gözünün \"gürültü\" olarak algıladığı görsel verileri kaldırır. Fotoğrafçılık için idealdir. JPEG, kayıplı WebP, HEIC kayıplıdır.'
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
term: 'Kayıpsız Sıkıştırma (Lossless)',
|
|
175
|
+
definition: 'Görsel bilgi kaybetmeden boyutu küçültür. PNG ve kayıpsız WebP. Grafikler, logolar, şeffaflıklar için idealdir.'
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
term: 'Core Web Vitals (Google)',
|
|
179
|
+
definition: 'Kullanıcı deneyimi metrikleri: LCP (yükleme hızı), FID (etkileşim gecikmesi), CLS (görsel kararlılık). SEO sıralamasını etkiler.'
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
term: 'WebP',
|
|
183
|
+
definition: 'Google tarafından geliştirilen format. JPEG\'den %25-35 daha küçüktür. Modern tarayıcıların %95\'i tarafından desteklenir (IE hariç hepsi).'
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
term: 'Sıkıştırma Kusurları (Artifacts)',
|
|
187
|
+
definition: 'Aşırı sıkıştırmanın neden olduğu görsel kusurlar: lekeler, renk bantlanması, bulanık kenarlar. %75 kalitenin üzerinde fark edilemez.'
|
|
188
|
+
}
|
|
189
|
+
] },
|
|
190
|
+
|
|
191
|
+
{ type: 'message', title: 'Profesyonel Web Optimizasyonu', ariaLabel: 'SEO için görsel optimizasyonu hakkında bilgiler', html: 'Bu teknik bir gösteriş değil: görselleri sıkıştırmak, kullanıcı deneyimine ve Google sıralamasına doğrudan bir yatırımdır. Mobilde her kilobayt önemlidir. Aracımız, eskiden profesyonel yazılım ($$$) gerektiren işi ücretsiz bir 3 tıklamalı işleme dönüştürür.' },
|
|
192
|
+
|
|
193
|
+
{ type: 'title', text: 'Modern Web İçin Hazır', level: 3 },
|
|
194
|
+
{ type: 'paragraph', html: 'Çevrimiçi varlığınızın hızlı, duyarlı ve aramada rekabetçi olması için akıllı sıkıştırma ve WebP formatını kullanın. Profesyonel kalite, minimum boyut, anında yükleme.' }
|
|
195
|
+
];
|
|
196
|
+
|
|
197
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
198
|
+
'@context': 'https://schema.org',
|
|
199
|
+
'@type': 'FAQPage',
|
|
200
|
+
mainEntity: faq.map((item) => ({
|
|
201
|
+
'@type': 'Question',
|
|
202
|
+
name: item.question,
|
|
203
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
204
|
+
})),
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
const howToSchema: WithContext<HowTo> = {
|
|
208
|
+
'@context': 'https://schema.org',
|
|
209
|
+
'@type': 'HowTo',
|
|
210
|
+
name: title,
|
|
211
|
+
description,
|
|
212
|
+
step: howTo.map((step) => ({
|
|
213
|
+
'@type': 'HowToStep',
|
|
214
|
+
name: step.name,
|
|
215
|
+
text: step.text,
|
|
216
|
+
})),
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
220
|
+
'@context': 'https://schema.org',
|
|
221
|
+
'@type': 'SoftwareApplication',
|
|
222
|
+
name: title,
|
|
223
|
+
description,
|
|
224
|
+
applicationCategory: 'UtilitiesApplication',
|
|
225
|
+
operatingSystem: 'Web',
|
|
226
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
227
|
+
inLanguage: 'tr',
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
export const content: ImageCompressorLocaleContent = {
|
|
231
|
+
slug,
|
|
232
|
+
title,
|
|
233
|
+
description,
|
|
234
|
+
ui,
|
|
235
|
+
seo,
|
|
236
|
+
faqTitle: "Sıkça Sorulan Sorular",
|
|
237
|
+
faq,
|
|
238
|
+
bibliographyTitle: "Referanslar",
|
|
239
|
+
bibliography,
|
|
240
|
+
howTo,
|
|
241
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
242
|
+
};
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ImageCompressorUI, ImageCompressorLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'online-image-compressor-reduce-file-size-no-quality-loss';
|
|
5
|
+
const title = '在线图像压缩工具:无损减小文件大小';
|
|
6
|
+
const description = '免费优化和压缩 JPG、PNG 和 WebP 照片。减小文件大小,在本地提高您的网页加载速度。';
|
|
7
|
+
|
|
8
|
+
const ui: ImageCompressorUI = {
|
|
9
|
+
dropTitle: "优化图像",
|
|
10
|
+
dropSubtitle: "拖动照片以立即减轻其重量。",
|
|
11
|
+
settingsTitle: "压缩设置",
|
|
12
|
+
qualityLabel: "视觉质量",
|
|
13
|
+
widthLabel: "最大宽度 (像素)",
|
|
14
|
+
convertToWebpLabel: "转换为 WebP",
|
|
15
|
+
compressionLabel: "压缩",
|
|
16
|
+
compressBtn: "压缩图像",
|
|
17
|
+
processingLabel: "处理中...",
|
|
18
|
+
resultsTitle: "优化后的图像",
|
|
19
|
+
originalSizeLabel: "原始大小",
|
|
20
|
+
newSizeLabel: "新大小",
|
|
21
|
+
reductionLabel: "节省",
|
|
22
|
+
downloadBtn: "下载",
|
|
23
|
+
addMoreBtn: "添加更多",
|
|
24
|
+
browseFilesBtn: "浏览文件",
|
|
25
|
+
processedFilesTitle: "已处理文件",
|
|
26
|
+
downloadAllBtn: "下载全部",
|
|
27
|
+
adjustThisImage: "调整此图像",
|
|
28
|
+
downloadTitle: "下载",
|
|
29
|
+
maxWidthLabel: "最大宽度 (px)",
|
|
30
|
+
closeBtn: "关闭",
|
|
31
|
+
totalSavingsLabel: "总节省",
|
|
32
|
+
noSavings: "无净节省",
|
|
33
|
+
faqTitle: "常见问题",
|
|
34
|
+
bibliographyTitle: "参考资料"
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const faq: ImageCompressorLocaleContent['faq'] = [
|
|
38
|
+
{
|
|
39
|
+
question: "无损压缩是如何工作的?",
|
|
40
|
+
answer: "我们使用的算法可以删除不必要的元数据并优化像素编码。选择 WebP 时,会使用比传统格式更先进的压缩技术。",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
question: "我的图像会被上传到任何服务器吗?",
|
|
44
|
+
answer: "不会。所有处理都 100% 发生在您的浏览器中(客户端)。您的照片绝不会离开您的计算机,确保绝对隐私。",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
question: "为什么要转换为 WebP?",
|
|
48
|
+
answer: "WebP 是现代网络标准格式。它提供的质量优于 JPG 和 PNG,且重量减轻高达 30%,从而加快了页面加载速度。",
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
const howTo: ImageCompressorLocaleContent['howTo'] = [
|
|
53
|
+
{
|
|
54
|
+
name: "上传图像",
|
|
55
|
+
text: "上传您要压缩的文件(JPG、PNG 或 WebP)。",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: "调整质量",
|
|
59
|
+
text: "使用滑块在文件大小和视觉质量之间找到完美的平衡(建议:75 85%)。",
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: "调整大小(可选)",
|
|
63
|
+
text: "如果图像非常大,您可以指定最大宽度以降低其分辨率。",
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: "下载结果",
|
|
67
|
+
text: "点击下载按钮,获取已准备好使用的优化图像。",
|
|
68
|
+
},
|
|
69
|
+
];
|
|
70
|
+
|
|
71
|
+
const bibliography: ImageCompressorLocaleContent['bibliography'] = [
|
|
72
|
+
{
|
|
73
|
+
name: "WebP:一种用于网络的图像格式",
|
|
74
|
+
url: "https://developers.google.com/speed/webp",
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: "图像优化对 SEO 的重要性",
|
|
78
|
+
url: "https://developers.google.com/search/docs/appearance/google-images",
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
|
|
82
|
+
const seo: ImageCompressorLocaleContent['seo'] = [
|
|
83
|
+
{
|
|
84
|
+
type: 'summary',
|
|
85
|
+
title: '专业网页图像优化',
|
|
86
|
+
items: [
|
|
87
|
+
'智能 JPG、PNG 和 WebP 压缩',
|
|
88
|
+
'在保持视觉质量的同时减重 50-80%',
|
|
89
|
+
'100% 本地处理 - 隐私保证',
|
|
90
|
+
'改善 Core Web Vitals 和 SEO 排名'
|
|
91
|
+
]
|
|
92
|
+
},
|
|
93
|
+
{ type: 'title', text: '图像优化:网络速度和 Core Web Vitals', level: 2 },
|
|
94
|
+
{ type: 'paragraph', html: '在数字即时的时代,缓慢的网页会失去用户。未优化的图像占网页总重量的 60-70%。优化它们是改善您的 Google 指标(LCP、CLS)和搜索结果排名的第一步。' },
|
|
95
|
+
|
|
96
|
+
{ type: 'stats', items: [
|
|
97
|
+
{ value: '50-80%', label: '典型减重比例', icon: 'mdi:trending-down' },
|
|
98
|
+
{ value: '100%', label: '本地隐私', icon: 'mdi:lock' },
|
|
99
|
+
{ value: '+30%', label: '比 JPG 更快', icon: 'mdi:speedometer' }
|
|
100
|
+
], columns: 3 },
|
|
101
|
+
|
|
102
|
+
{ type: 'title', text: '压缩格式详解', level: 3 },
|
|
103
|
+
{ type: 'table', headers: ['格式', '压缩方式', '使用案例', '兼容性'], rows: [
|
|
104
|
+
['JPEG', '有损 50-90%', '相机照片、编辑内容', '通用 (100%)'],
|
|
105
|
+
['PNG', '无损 30-50%', '图形、徽标、透明度', '通用 (100%)'],
|
|
106
|
+
['WebP', '有损/无损 提升 25-35%', '现代网页、社交网络', '95% 现代浏览器'],
|
|
107
|
+
['AVIF', '有损/无损 提升 20%', '下一代网页', '仅限新版本浏览器']
|
|
108
|
+
] },
|
|
109
|
+
|
|
110
|
+
{ type: 'card', title: '为什么 WebP 是未来', html: 'Google 专门为网络开发了 WebP。它提供优于 JPEG 和 PNG 的压缩,同时保持或提高视觉质量。它比同等的 JPEG 小 25-35%。现代浏览器对它的支持率达到 95%。' },
|
|
111
|
+
|
|
112
|
+
{ type: 'title', text: '有损压缩 vs 无损压缩', level: 3 },
|
|
113
|
+
{ type: 'comparative', items: [
|
|
114
|
+
{
|
|
115
|
+
title: '有损压缩',
|
|
116
|
+
description: 'JPG, WebP - 删除感觉不到的视觉信息',
|
|
117
|
+
icon: 'mdi:compress',
|
|
118
|
+
points: [
|
|
119
|
+
'减少原始重量的 70-90%',
|
|
120
|
+
'如果质量保持在 75% 以上,肉眼无法察觉',
|
|
121
|
+
'写实摄影的理想选择',
|
|
122
|
+
'不建议用于徽标或清晰文本'
|
|
123
|
+
],
|
|
124
|
+
highlight: true
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
title: '无损压缩',
|
|
128
|
+
description: 'PNG, WebP 无损 - 保持 100% 视觉数据',
|
|
129
|
+
icon: 'mdi:shield',
|
|
130
|
+
points: [
|
|
131
|
+
'减重 20-50%',
|
|
132
|
+
'画质完美,无降级',
|
|
133
|
+
'图形、徽标、透明度的理想选择',
|
|
134
|
+
'文件比有损压缩更重'
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
], columns: 2 },
|
|
138
|
+
|
|
139
|
+
{ type: 'title', text: '对 SEO 和转化率的影响', level: 3 },
|
|
140
|
+
{ type: 'list', items: [
|
|
141
|
+
'<strong>Core Web Vitals:</strong> Google 会惩罚速度慢的网站。优化的图像直接改善 LCP(最大内容绘制)。',
|
|
142
|
+
'<strong>跳出率:</strong> 每秒延迟 = 跳出率增加 7%。更快的图像 = 离开的用户更少。',
|
|
143
|
+
'<strong>搜索排名:</strong> 速度是一个排名因素。优化图像可以提升排名。',
|
|
144
|
+
'<strong>转化率:</strong> 加载速度越快 = 转化率越高。研究表明,优化后转化率可提高 10%。'
|
|
145
|
+
], icon: 'mdi:check' },
|
|
146
|
+
|
|
147
|
+
{ type: 'proscons', items: [
|
|
148
|
+
{
|
|
149
|
+
pro: '绝对隐私:100% 本地处理,无云端服务器',
|
|
150
|
+
con: '需要支持 Canvas API 的浏览器(通用标准)'
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
pro: '在同等质量下,WebP 比 JPEG 小 25-35%',
|
|
154
|
+
con: '旧版 Safari 和 IE 不支持 WebP(提供回退方案)'
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
pro: '多图像即时处理',
|
|
158
|
+
con: '极大图像(>50MB)可能需要等待'
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
pro: '可选调整大小:在压缩的同时降低分辨率',
|
|
162
|
+
con: '调整大小会丢失信息 - 最好从源头优化分辨率'
|
|
163
|
+
}
|
|
164
|
+
], proTitle: '优势', conTitle: '局限性' },
|
|
165
|
+
|
|
166
|
+
{ type: 'tip', title: '数字安全提示', html: '在任何社交网络发帖<strong>之前先清理</strong>您的照片。即使您删除了帖子,元数据也可能已被搜索引擎或存档编入索引。预防胜于治疗。养成习惯:<br><br><em>照片 → 清除 EXIF/压缩 → 发布</em>' },
|
|
167
|
+
|
|
168
|
+
{ type: 'diagnostic', variant: 'warning', title: '注意:过度压缩会导致降级', icon: 'mdi:alert', badge: '质量', html: '摄影保持质量 >75%,编辑内容保持质量 >85%。在此之下,压缩伪影(斑点、色带)会变得明显。而在缩略图中看起来不错的图像在大图中可能看起来很糟。' },
|
|
169
|
+
|
|
170
|
+
{ type: 'glossary', items: [
|
|
171
|
+
{
|
|
172
|
+
term: '有损压缩',
|
|
173
|
+
definition: '删除人眼视为“噪声”的视觉数据。摄影的理想选择。JPEG、有损 WebP、HEIC 均属于有损压缩。'
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
term: '无损压缩',
|
|
177
|
+
definition: '减小尺寸而不丢失视觉信息。PNG 和无损 WebP。图形、徽标、透明度的理想选择。'
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
term: 'Core Web Vitals (Google)',
|
|
181
|
+
definition: '用户体验指标:LCP(加载速度)、FID(交互延迟)、CLS(视觉稳定性)。影响 SEO 排名。'
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
term: 'WebP',
|
|
185
|
+
definition: '由 Google 开发的格式。比 JPEG 小 25-35%。95% 的现代浏览器(IE 除外)均支持。'
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
term: '压缩伪影',
|
|
189
|
+
definition: '由过度压缩引起的视觉缺陷:斑点、色彩带、边缘模糊。画质 >75% 时肉眼不可见。'
|
|
190
|
+
}
|
|
191
|
+
] },
|
|
192
|
+
|
|
193
|
+
{ type: 'message', title: '专业网页优化', ariaLabel: '关于图像优化 SEO 的信息', html: '这不仅仅是技术虚荣:压缩图像是对用户体验和 Google 排名的直接投资。每 1 KB 对移动设备都至关重要。我们的工具将过去需要专业软件 ($$$) 的工作变成了只需点击 3 次的免费过程。' },
|
|
194
|
+
|
|
195
|
+
{ type: 'title', text: '为现代网络做好准备', level: 3 },
|
|
196
|
+
{ type: 'paragraph', html: '使用智能压缩和 WebP 格式,使您的在线形象在搜索中快速、响应灵敏且具竞争力。专业品质,最小重量,即时加载。' }
|
|
197
|
+
];
|
|
198
|
+
|
|
199
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
200
|
+
'@context': 'https://schema.org',
|
|
201
|
+
'@type': 'FAQPage',
|
|
202
|
+
mainEntity: faq.map((item) => ({
|
|
203
|
+
'@type': 'Question',
|
|
204
|
+
name: item.question,
|
|
205
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
206
|
+
})),
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
const howToSchema: WithContext<HowTo> = {
|
|
210
|
+
'@context': 'https://schema.org',
|
|
211
|
+
'@type': 'HowTo',
|
|
212
|
+
name: title,
|
|
213
|
+
description,
|
|
214
|
+
step: howTo.map((step) => ({
|
|
215
|
+
'@type': 'HowToStep',
|
|
216
|
+
name: step.name,
|
|
217
|
+
text: step.text,
|
|
218
|
+
})),
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
222
|
+
'@context': 'https://schema.org',
|
|
223
|
+
'@type': 'SoftwareApplication',
|
|
224
|
+
name: title,
|
|
225
|
+
description,
|
|
226
|
+
applicationCategory: 'UtilitiesApplication',
|
|
227
|
+
operatingSystem: 'Web',
|
|
228
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
229
|
+
inLanguage: 'zh',
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
export const content: ImageCompressorLocaleContent = {
|
|
233
|
+
slug,
|
|
234
|
+
title,
|
|
235
|
+
description,
|
|
236
|
+
ui,
|
|
237
|
+
seo,
|
|
238
|
+
faqTitle: "常见问题",
|
|
239
|
+
faq,
|
|
240
|
+
bibliographyTitle: "参考资料",
|
|
241
|
+
bibliography,
|
|
242
|
+
howTo,
|
|
243
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
244
|
+
};
|
|
@@ -33,10 +33,6 @@ export interface ImageCompressorUI {
|
|
|
33
33
|
|
|
34
34
|
export type ImageCompressorLocaleContent = ToolLocaleContent<ImageCompressorUI>;
|
|
35
35
|
|
|
36
|
-
import { content as es } from './i18n/es';
|
|
37
|
-
import { content as en } from './i18n/en';
|
|
38
|
-
import { content as fr } from './i18n/fr';
|
|
39
|
-
|
|
40
36
|
export const imageCompressor: AudiovisualToolEntry<ImageCompressorUI> = {
|
|
41
37
|
id: 'compresor-imagenes',
|
|
42
38
|
icons: {
|
|
@@ -44,9 +40,21 @@ export const imageCompressor: AudiovisualToolEntry<ImageCompressorUI> = {
|
|
|
44
40
|
fg: 'mdi:file-image-outline',
|
|
45
41
|
},
|
|
46
42
|
i18n: {
|
|
47
|
-
es: async () => es as unknown as ImageCompressorLocaleContent,
|
|
48
|
-
en: async () => en as unknown as ImageCompressorLocaleContent,
|
|
49
|
-
fr: async () => fr as unknown as ImageCompressorLocaleContent,
|
|
43
|
+
es: async () => (await import('./i18n/es')).content as unknown as ImageCompressorLocaleContent,
|
|
44
|
+
en: async () => (await import('./i18n/en')).content as unknown as ImageCompressorLocaleContent,
|
|
45
|
+
fr: async () => (await import('./i18n/fr')).content as unknown as ImageCompressorLocaleContent,
|
|
46
|
+
de: async () => (await import('./i18n/de')).content as unknown as ImageCompressorLocaleContent,
|
|
47
|
+
it: async () => (await import('./i18n/it')).content as unknown as ImageCompressorLocaleContent,
|
|
48
|
+
pt: async () => (await import('./i18n/pt')).content as unknown as ImageCompressorLocaleContent,
|
|
49
|
+
id: async () => (await import('./i18n/id')).content as unknown as ImageCompressorLocaleContent,
|
|
50
|
+
ja: async () => (await import('./i18n/ja')).content as unknown as ImageCompressorLocaleContent,
|
|
51
|
+
ko: async () => (await import('./i18n/ko')).content as unknown as ImageCompressorLocaleContent,
|
|
52
|
+
nl: async () => (await import('./i18n/nl')).content as unknown as ImageCompressorLocaleContent,
|
|
53
|
+
pl: async () => (await import('./i18n/pl')).content as unknown as ImageCompressorLocaleContent,
|
|
54
|
+
ru: async () => (await import('./i18n/ru')).content as unknown as ImageCompressorLocaleContent,
|
|
55
|
+
sv: async () => (await import('./i18n/sv')).content as unknown as ImageCompressorLocaleContent,
|
|
56
|
+
tr: async () => (await import('./i18n/tr')).content as unknown as ImageCompressorLocaleContent,
|
|
57
|
+
zh: async () => (await import('./i18n/zh')).content as unknown as ImageCompressorLocaleContent,
|
|
50
58
|
},
|
|
51
59
|
};
|
|
52
60
|
|