@jjlmoya/utils-audiovisual 1.7.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/package.json +2 -1
  2. package/src/category/i18n/de.ts +198 -0
  3. package/src/category/i18n/id.ts +198 -0
  4. package/src/category/i18n/it.ts +198 -0
  5. package/src/category/i18n/ja.ts +198 -0
  6. package/src/category/i18n/ko.ts +198 -0
  7. package/src/category/i18n/nl.ts +198 -0
  8. package/src/category/i18n/pl.ts +198 -0
  9. package/src/category/i18n/pt.ts +198 -0
  10. package/src/category/i18n/ru.ts +198 -0
  11. package/src/category/i18n/sv.ts +198 -0
  12. package/src/category/i18n/tr.ts +198 -0
  13. package/src/category/i18n/zh.ts +198 -0
  14. package/src/category/index.ts +31 -3
  15. package/src/tests/i18n_coverage.test.ts +36 -0
  16. package/src/tests/slug_uniqueness.test.ts +81 -0
  17. package/src/tool/chromaticLens/i18n/de.ts +246 -0
  18. package/src/tool/chromaticLens/i18n/id.ts +246 -0
  19. package/src/tool/chromaticLens/i18n/it.ts +246 -0
  20. package/src/tool/chromaticLens/i18n/ja.ts +246 -0
  21. package/src/tool/chromaticLens/i18n/ko.ts +246 -0
  22. package/src/tool/chromaticLens/i18n/nl.ts +246 -0
  23. package/src/tool/chromaticLens/i18n/pl.ts +246 -0
  24. package/src/tool/chromaticLens/i18n/pt.ts +246 -0
  25. package/src/tool/chromaticLens/i18n/ru.ts +246 -0
  26. package/src/tool/chromaticLens/i18n/sv.ts +246 -0
  27. package/src/tool/chromaticLens/i18n/tr.ts +246 -0
  28. package/src/tool/chromaticLens/i18n/zh.ts +246 -0
  29. package/src/tool/chromaticLens/index.ts +15 -7
  30. package/src/tool/collageMaker/i18n/de.ts +233 -0
  31. package/src/tool/collageMaker/i18n/id.ts +233 -0
  32. package/src/tool/collageMaker/i18n/it.ts +233 -0
  33. package/src/tool/collageMaker/i18n/ja.ts +233 -0
  34. package/src/tool/collageMaker/i18n/ko.ts +233 -0
  35. package/src/tool/collageMaker/i18n/nl.ts +233 -0
  36. package/src/tool/collageMaker/i18n/pl.ts +233 -0
  37. package/src/tool/collageMaker/i18n/pt.ts +233 -0
  38. package/src/tool/collageMaker/i18n/ru.ts +233 -0
  39. package/src/tool/collageMaker/i18n/sv.ts +233 -0
  40. package/src/tool/collageMaker/i18n/tr.ts +233 -0
  41. package/src/tool/collageMaker/i18n/zh.ts +233 -0
  42. package/src/tool/collageMaker/index.ts +15 -6
  43. package/src/tool/exifCleaner/i18n/de.ts +277 -0
  44. package/src/tool/exifCleaner/i18n/fr.ts +1 -1
  45. package/src/tool/exifCleaner/i18n/id.ts +277 -0
  46. package/src/tool/exifCleaner/i18n/it.ts +277 -0
  47. package/src/tool/exifCleaner/i18n/ja.ts +277 -0
  48. package/src/tool/exifCleaner/i18n/ko.ts +277 -0
  49. package/src/tool/exifCleaner/i18n/nl.ts +277 -0
  50. package/src/tool/exifCleaner/i18n/pl.ts +277 -0
  51. package/src/tool/exifCleaner/i18n/pt.ts +277 -0
  52. package/src/tool/exifCleaner/i18n/ru.ts +277 -0
  53. package/src/tool/exifCleaner/i18n/sv.ts +277 -0
  54. package/src/tool/exifCleaner/i18n/tr.ts +277 -0
  55. package/src/tool/exifCleaner/i18n/zh.ts +277 -0
  56. package/src/tool/exifCleaner/index.ts +16 -8
  57. package/src/tool/imageCompressor/i18n/de.ts +242 -0
  58. package/src/tool/imageCompressor/i18n/en.ts +1 -1
  59. package/src/tool/imageCompressor/i18n/es.ts +1 -1
  60. package/src/tool/imageCompressor/i18n/id.ts +242 -0
  61. package/src/tool/imageCompressor/i18n/it.ts +242 -0
  62. package/src/tool/imageCompressor/i18n/ja.ts +242 -0
  63. package/src/tool/imageCompressor/i18n/ko.ts +242 -0
  64. package/src/tool/imageCompressor/i18n/nl.ts +242 -0
  65. package/src/tool/imageCompressor/i18n/pl.ts +242 -0
  66. package/src/tool/imageCompressor/i18n/pt.ts +242 -0
  67. package/src/tool/imageCompressor/i18n/ru.ts +242 -0
  68. package/src/tool/imageCompressor/i18n/sv.ts +242 -0
  69. package/src/tool/imageCompressor/i18n/tr.ts +242 -0
  70. package/src/tool/imageCompressor/i18n/zh.ts +244 -0
  71. package/src/tool/imageCompressor/index.ts +15 -7
  72. package/src/tool/printQualityCalculator/i18n/de.ts +261 -0
  73. package/src/tool/printQualityCalculator/i18n/fr.ts +1 -1
  74. package/src/tool/printQualityCalculator/i18n/id.ts +261 -0
  75. package/src/tool/printQualityCalculator/i18n/it.ts +261 -0
  76. package/src/tool/printQualityCalculator/i18n/ja.ts +261 -0
  77. package/src/tool/printQualityCalculator/i18n/ko.ts +261 -0
  78. package/src/tool/printQualityCalculator/i18n/nl.ts +261 -0
  79. package/src/tool/printQualityCalculator/i18n/pl.ts +261 -0
  80. package/src/tool/printQualityCalculator/i18n/pt.ts +261 -0
  81. package/src/tool/printQualityCalculator/i18n/ru.ts +261 -0
  82. package/src/tool/printQualityCalculator/i18n/sv.ts +261 -0
  83. package/src/tool/printQualityCalculator/i18n/tr.ts +261 -0
  84. package/src/tool/printQualityCalculator/i18n/zh.ts +261 -0
  85. package/src/tool/printQualityCalculator/index.ts +15 -7
  86. package/src/tool/privacyBlur/i18n/de.ts +238 -0
  87. package/src/tool/privacyBlur/i18n/id.ts +238 -0
  88. package/src/tool/privacyBlur/i18n/it.ts +238 -0
  89. package/src/tool/privacyBlur/i18n/ja.ts +238 -0
  90. package/src/tool/privacyBlur/i18n/ko.ts +238 -0
  91. package/src/tool/privacyBlur/i18n/nl.ts +238 -0
  92. package/src/tool/privacyBlur/i18n/pl.ts +238 -0
  93. package/src/tool/privacyBlur/i18n/pt.ts +238 -0
  94. package/src/tool/privacyBlur/i18n/ru.ts +238 -0
  95. package/src/tool/privacyBlur/i18n/sv.ts +238 -0
  96. package/src/tool/privacyBlur/i18n/tr.ts +238 -0
  97. package/src/tool/privacyBlur/i18n/zh.ts +238 -0
  98. package/src/tool/privacyBlur/index.ts +15 -7
  99. package/src/tool/subtitleSync/i18n/de.ts +241 -0
  100. package/src/tool/subtitleSync/i18n/fr.ts +5 -5
  101. package/src/tool/subtitleSync/i18n/id.ts +241 -0
  102. package/src/tool/subtitleSync/i18n/it.ts +241 -0
  103. package/src/tool/subtitleSync/i18n/ja.ts +241 -0
  104. package/src/tool/subtitleSync/i18n/ko.ts +241 -0
  105. package/src/tool/subtitleSync/i18n/nl.ts +241 -0
  106. package/src/tool/subtitleSync/i18n/pl.ts +241 -0
  107. package/src/tool/subtitleSync/i18n/pt.ts +241 -0
  108. package/src/tool/subtitleSync/i18n/ru.ts +241 -0
  109. package/src/tool/subtitleSync/i18n/sv.ts +241 -0
  110. package/src/tool/subtitleSync/i18n/tr.ts +241 -0
  111. package/src/tool/subtitleSync/i18n/zh.ts +241 -0
  112. package/src/tool/subtitleSync/index.ts +15 -7
  113. package/src/tool/timelapseCalculator/i18n/de.ts +169 -0
  114. package/src/tool/timelapseCalculator/i18n/fr.ts +2 -2
  115. package/src/tool/timelapseCalculator/i18n/id.ts +169 -0
  116. package/src/tool/timelapseCalculator/i18n/it.ts +169 -0
  117. package/src/tool/timelapseCalculator/i18n/ja.ts +169 -0
  118. package/src/tool/timelapseCalculator/i18n/ko.ts +169 -0
  119. package/src/tool/timelapseCalculator/i18n/nl.ts +169 -0
  120. package/src/tool/timelapseCalculator/i18n/pl.ts +169 -0
  121. package/src/tool/timelapseCalculator/i18n/pt.ts +169 -0
  122. package/src/tool/timelapseCalculator/i18n/ru.ts +169 -0
  123. package/src/tool/timelapseCalculator/i18n/sv.ts +169 -0
  124. package/src/tool/timelapseCalculator/i18n/tr.ts +169 -0
  125. package/src/tool/timelapseCalculator/i18n/zh.ts +169 -0
  126. package/src/tool/timelapseCalculator/index.ts +16 -8
  127. package/src/tool/tvDistance/i18n/de.ts +223 -0
  128. package/src/tool/tvDistance/i18n/id.ts +223 -0
  129. package/src/tool/tvDistance/i18n/it.ts +223 -0
  130. package/src/tool/tvDistance/i18n/ja.ts +223 -0
  131. package/src/tool/tvDistance/i18n/ko.ts +223 -0
  132. package/src/tool/tvDistance/i18n/nl.ts +223 -0
  133. package/src/tool/tvDistance/i18n/pl.ts +223 -0
  134. package/src/tool/tvDistance/i18n/pt.ts +223 -0
  135. package/src/tool/tvDistance/i18n/ru.ts +223 -0
  136. package/src/tool/tvDistance/i18n/sv.ts +223 -0
  137. package/src/tool/tvDistance/i18n/tr.ts +223 -0
  138. package/src/tool/tvDistance/i18n/zh.ts +223 -0
  139. package/src/tool/tvDistance/index.ts +15 -7
  140. package/src/tool/videoFrameExtractor/i18n/de.ts +235 -0
  141. package/src/tool/videoFrameExtractor/i18n/id.ts +235 -0
  142. package/src/tool/videoFrameExtractor/i18n/it.ts +235 -0
  143. package/src/tool/videoFrameExtractor/i18n/ja.ts +235 -0
  144. package/src/tool/videoFrameExtractor/i18n/ko.ts +235 -0
  145. package/src/tool/videoFrameExtractor/i18n/nl.ts +235 -0
  146. package/src/tool/videoFrameExtractor/i18n/pl.ts +235 -0
  147. package/src/tool/videoFrameExtractor/i18n/pt.ts +235 -0
  148. package/src/tool/videoFrameExtractor/i18n/ru.ts +235 -0
  149. package/src/tool/videoFrameExtractor/i18n/sv.ts +235 -0
  150. package/src/tool/videoFrameExtractor/i18n/tr.ts +235 -0
  151. package/src/tool/videoFrameExtractor/i18n/zh.ts +235 -0
  152. package/src/tool/videoFrameExtractor/index.ts +16 -8
@@ -0,0 +1,242 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ImageCompressorUI, ImageCompressorLocaleContent } from '../index';
3
+
4
+ const slug = 'kompresor-obrazow-online-zmniejsz-rozmiar-pliku-bez-utraty-jakosci';
5
+ const title = 'Kompresor Obrazów Online: Zmniejsz wagę bez utraty jakości';
6
+ const description = 'Optymalizuj i kompresuj swoje zdjęcia JPG, PNG i WebP za darmo. Zmniejsz rozmiar plików, aby lokalnie przyspieszyć ładowanie Twojej strony internetowej.';
7
+
8
+ const ui: ImageCompressorUI = {
9
+ dropTitle: "Optymalizuj Obrazy",
10
+ dropSubtitle: "Przeciągnij zdjęcia, aby natychmiast zmniejszyć ich wagę.",
11
+ settingsTitle: "Ustawienia Kompresji",
12
+ qualityLabel: "Jakość Wizualna",
13
+ widthLabel: "Maksymalna Szerokość (Piksele)",
14
+ convertToWebpLabel: "Konwertuj na WebP",
15
+ compressionLabel: "Kompresja",
16
+ compressBtn: "Kompresuj Obraz",
17
+ processingLabel: "Przetwarzanie...",
18
+ resultsTitle: "Zoptymalizowane Obrazy",
19
+ originalSizeLabel: "Oryginalny Rozmiar",
20
+ newSizeLabel: "Nowy Rozmiar",
21
+ reductionLabel: "Oszczędność",
22
+ downloadBtn: "Pobierz",
23
+ addMoreBtn: "Dodaj więcej",
24
+ browseFilesBtn: "Przeglądaj pliki",
25
+ processedFilesTitle: "Przetworzone Pliki",
26
+ downloadAllBtn: "Pobierz Wszystkie",
27
+ adjustThisImage: "Dostosuj ten obraz",
28
+ downloadTitle: "Pobierz",
29
+ maxWidthLabel: "Maks. szerokość (px)",
30
+ closeBtn: "Zamknij",
31
+ totalSavingsLabel: "Całkowita oszczędność",
32
+ noSavings: "Brak oszczędności netto",
33
+ faqTitle: "Często Zadawane Pytania",
34
+ bibliographyTitle: "Referencje"
35
+ };
36
+
37
+ const faq: ImageCompressorLocaleContent['faq'] = [
38
+ {
39
+ question: "Jak działa kompresja bezstratna?",
40
+ answer: "Używamy algorytmów, które usuwają niepotrzebne metadane i optymalizują kodowanie pikseli. Przy wyborze formatu WebP stosowana jest bardziej zaawansowana technologia kompresji niż w tradycyjnych formatach.",
41
+ },
42
+ {
43
+ question: "Czy moje obrazy są przesyłane na jakikolwiek serwer?",
44
+ answer: "Nie. Całe przetwarzanie odbywa się w 100% w Twojej przeglądarce (Client-Side). Twoje zdjęcia nigdy nie opuszczają Twojego komputera, co gwarantuje całkowitą prywatność.",
45
+ },
46
+ {
47
+ question: "Dlaczego warto konwertować na WebP?",
48
+ answer: "WebP to nowoczesny standardowy format dla internetu. Oferuje wyższą jakość niż JPG i PNG przy wadze mniejszej nawet o 30%, co przyspiesza czas ładowania strony.",
49
+ },
50
+ ];
51
+
52
+ const howTo: ImageCompressorLocaleContent['howTo'] = [
53
+ {
54
+ name: "Prześlij obraz",
55
+ text: "Prześlij plik, który chcesz skompresować (JPG, PNG lub WebP).",
56
+ },
57
+ {
58
+ name: "Dostosuj jakość",
59
+ text: "Użyj suwaka, aby znaleźć idealną równowagę między rozmiarem pliku a jakością wizualną (zalecane: 75 85%).",
60
+ },
61
+ {
62
+ name: "Zmień rozmiar (opcjonalnie)",
63
+ text: "Jeśli obraz jest bardzo duży, możesz określić maksymalną szerokość, aby zmniejszyć jego rozdzielczość.",
64
+ },
65
+ {
66
+ name: "Pobierz wynik",
67
+ text: "Naciśnij przycisk pobierania, aby otrzymać zoptymalizowany obraz gotowy do użycia.",
68
+ },
69
+ ];
70
+
71
+ const bibliography: ImageCompressorLocaleContent['bibliography'] = [
72
+ {
73
+ name: "WebP: Format obrazu dla sieci",
74
+ url: "https://developers.google.com/speed/webp",
75
+ },
76
+ {
77
+ name: "Znaczenie optymalizacji obrazów dla 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: 'Profesjonalna Optymalizacja Obrazów Web',
86
+ items: [
87
+ 'Inteligentna kompresja JPG, PNG i WebP',
88
+ 'Zmniejsz wagę o 50-80% zachowując jakość wizualną',
89
+ '100% lokalne przetwarzanie - gwarancja prywatności',
90
+ 'Popraw Core Web Vitals i pozycjonowanie SEO'
91
+ ]
92
+ },
93
+ { type: 'title', text: 'Optymalizacja Obrazów: Szybkość sieci i Core Web Vitals', level: 2 },
94
+ { type: 'paragraph', html: 'W erze cyfrowej natychmiastowości wolna strona internetowa traci użytkowników. Niezoptymalizowane obrazy stanowią 60-70% całkowitej wagi strony internetowej. Ich optymalizacja to pierwszy krok do poprawy metryk Google (LCP, CLS) i Twojego pozycjonowania w wynikach wyszukiwania.' },
95
+
96
+ { type: 'stats', items: [
97
+ { value: '50-80%', label: 'Typowa Redukcja Wagi', icon: 'mdi:trending-down' },
98
+ { value: '100%', label: 'Lokalna Prywatność', icon: 'mdi:lock' },
99
+ { value: '+30%', label: 'Szybciej niż JPG', icon: 'mdi:speedometer' }
100
+ ], columns: 3 },
101
+
102
+ { type: 'title', text: 'Objaśnienie Formatów Kompresji', level: 3 },
103
+ { type: 'table', headers: ['Format', 'Kompresja', 'Zastosowania', 'Kompatybilność'], rows: [
104
+ ['JPEG', 'Stratna 50-90%', 'Zdjęcia z aparatu, treści redakcyjne', 'Uniwersalna (100%)'],
105
+ ['PNG', 'Bezstratna 30-50%', 'Grafiki, logo, przezroczystości', 'Uniwersalna (100%)'],
106
+ ['WebP', 'Stratna/Bezstratna 25-35% więcej', 'Nowoczesna sieć, sieci społecznościowe', '95% nowoczesnych przeglądarek'],
107
+ ['AVIF', 'Stratna/Bezstratna 20% poprawy', 'Sieć nowej generacji', 'Tylko nowe przeglądarki']
108
+ ] },
109
+
110
+ { type: 'card', title: 'Dlaczego WebP to Przyszłość', html: 'Google opracowało format WebP specjalnie dla sieci. Oferuje on lepszą kompresję niż JPEG i PNG, zachowując lub poprawiając jakość wizualną. Jest o 25-35% mniejszy niż odpowiedniki JPEG. Nowoczesne przeglądarki wspierają go w 95%.' },
111
+
112
+ { type: 'title', text: 'Kompresja Stratna vs Bezstratna', level: 3 },
113
+ { type: 'comparative', items: [
114
+ {
115
+ title: 'Kompresja Stratna (Lossy)',
116
+ description: 'JPG, WebP - Usuwa niedostrzegalne informacje wizualne',
117
+ icon: 'mdi:compress',
118
+ points: [
119
+ 'Redukuje 70-90% oryginalnej wagi',
120
+ 'Niedostrzegalna dla ludzkiego oka, jeśli jakość jest utrzymana powyżej 75%',
121
+ 'Idealna dla realistycznej fotografii',
122
+ 'Niezalecana dla logo lub ostrego tekstu'
123
+ ],
124
+ highlight: true
125
+ },
126
+ {
127
+ title: 'Kompresja Bezstratna (Lossless)',
128
+ description: 'PNG, WebP lossless - Zachowuje 100% danych wizualnych',
129
+ icon: 'mdi:shield',
130
+ points: [
131
+ 'Redukuje 20-50% wagi',
132
+ 'Doskonała jakość, brak degradacji',
133
+ 'Idealna dla grafik, logo, przezroczystości',
134
+ 'Pliki cięższe niż w kompresji stratnej'
135
+ ]
136
+ }
137
+ ], columns: 2 },
138
+
139
+ { type: 'title', text: 'Wpływ na SEO i Konwersję', level: 3 },
140
+ { type: 'list', items: [
141
+ '<strong>Core Web Vitals:</strong> Google karze wolne strony. Zoptymalizowane obrazy bezpośrednio poprawiają wskaźnik LCP (Largest Contentful Paint).',
142
+ '<strong>Współczynnik Odrzuceń:</strong> Każda sekunda opóźnienia = 7% więcej odrzuceń. Szybsze obrazy = mniej użytkowników, którzy opuszczają stronę.',
143
+ '<strong>Ranking wyszukiwania:</strong> Szybkość jest czynnikiem rankingowym. Optymalizacja obrazów zwiększa pozycjonowanie.',
144
+ '<strong>Konwersja:</strong> Szybszy czas ładowania = więcej konwersji. Badania pokazują wzrost konwersji o 10% dzięki optymalizacji.'
145
+ ], icon: 'mdi:check' },
146
+
147
+ { type: 'proscons', items: [
148
+ {
149
+ pro: 'Całkowita prywatność: 100% lokalnego przetwarzania, brak serwerów w chmurze',
150
+ con: 'Wymaga przeglądarki z obsługą Canvas API (jest to standard)'
151
+ },
152
+ {
153
+ pro: 'WebP jest o 25-35% mniejszy niż JPEG przy tej samej jakości',
154
+ con: 'Stare wersje Safari i IE nie obsługują WebP (dostępny jest fallback)'
155
+ },
156
+ {
157
+ pro: 'Natychmiastowe przetwarzanie wielu obrazów',
158
+ con: 'Bardzo duże obrazy (>50MB) mogą wymagać oczekiwania'
159
+ },
160
+ {
161
+ pro: 'Opcjonalna zmiana rozmiaru: zmniejsza zarówno rozdzielczość, jak i kompresję',
162
+ con: 'Zmiana rozmiaru powoduje utratę informacji - lepiej optymalizować rozdzielczość u źródła'
163
+ }
164
+ ], proTitle: 'Zalety', conTitle: 'Ograniczenia' },
165
+
166
+ { type: 'diagnostic', variant: 'warning', title: 'Uwaga: Nadmierna Kompresja Pogarsza Jakość', icon: 'mdi:alert', badge: 'Jakość', html: 'Utrzymuj jakość powyżej 75% dla fotografii i powyżej 85% dla treści redakcyjnych. Poniżej tych wartości artefakty kompresji (plamy, bandowanie) stają się widoczne. Obraz, który wygląda dobrze jako miniatura, może wyglądać źle w powiększeniu.' },
167
+
168
+ { type: 'glossary', items: [
169
+ {
170
+ term: 'Kompresja Stratna (Lossy)',
171
+ definition: 'Usuwa dane wizualne, które ludzkie oko postrzega jako „szum”. Idealna dla fotografii. JPEG, stratny WebP, HEIC są kompresjami stratnymi.'
172
+ },
173
+ {
174
+ term: 'Kompresja Bezstratna (Lossless)',
175
+ definition: 'Zmniejsza rozmiar bez utraty informacji wizualnych. PNG i bezstratny WebP. Idealna dla grafik, logo, przezroczystości.'
176
+ },
177
+ {
178
+ term: 'Core Web Vitals (Google)',
179
+ definition: 'Wskaźniki doświadczenia użytkownika: LCP (szybkość ładowania), FID (opóźnienie interakcji), CLS (stabilność wizualna). Wpływają na pozycjonowanie SEO.'
180
+ },
181
+ {
182
+ term: 'WebP',
183
+ definition: 'Format opracowany przez Google. O 25-35% mniejszy niż JPEG. Obsługiwany przez 95% nowoczesnych przeglądarek (wszystkie poza IE).'
184
+ },
185
+ {
186
+ term: 'Artefakty Kompresji',
187
+ definition: 'Wady wizualne spowodowane nadmierną kompresją: plamy, bandowanie kolorów, rozmyte krawędzie. Niedostrzegalne przy jakości powyżej 75%.'
188
+ }
189
+ ] },
190
+
191
+ { type: 'message', title: 'Profesjonalna Optymalizacja Internetowa', ariaLabel: 'Informacja o optymalizacji obrazów dla SEO', html: 'To nie jest techniczna fanaberia: kompresja obrazów to bezpośrednia inwestycja w doświadczenie użytkownika i ranking Google. Każdy kilobajt liczy się na urządzeniach mobilnych. Nasze narzędzie zamienia to, co kiedyś wymagało profesjonalnego oprogramowania ($$$), w darmowy proces zajmujący 3 kliknięcia.' },
192
+
193
+ { type: 'title', text: 'Przygotowany na Nowoczesną Sieć', level: 3 },
194
+ { type: 'paragraph', html: 'Korzystaj z inteligentnej kompresji i formatu WebP, aby Twoja obecność online była szybka, responsywna i konkurencyjna w wyszukiwaniu. Profesjonalna jakość, minimalna waga, błyskawiczne ładowanie.' }
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: 'pl',
228
+ };
229
+
230
+ export const content: ImageCompressorLocaleContent = {
231
+ slug,
232
+ title,
233
+ description,
234
+ ui,
235
+ seo,
236
+ faqTitle: "Często Zadawane Pytania",
237
+ faq,
238
+ bibliographyTitle: "Referencje",
239
+ bibliography,
240
+ howTo,
241
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
242
+ };
@@ -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 = 'compressor-imagens-online-reduzir-tamanho-sem-perder-qualidade';
5
+ const title = 'Compressor de Imagens Online: Reduza o peso sem perder qualidade';
6
+ const description = 'Otimize e comprima as suas fotos JPG, PNG e WebP gratuitamente. Reduza o tamanho do ficheiro para melhorar a velocidade de carregamento do seu site localmente.';
7
+
8
+ const ui: ImageCompressorUI = {
9
+ dropTitle: "Otimizar Imagens",
10
+ dropSubtitle: "Arraste as suas fotos para reduzir o seu peso instantaneamente.",
11
+ settingsTitle: "Definições de Compressão",
12
+ qualityLabel: "Qualidade Visual",
13
+ widthLabel: "Largura Máxima (Píxeis)",
14
+ convertToWebpLabel: "Converter para WebP",
15
+ compressionLabel: "Compressão",
16
+ compressBtn: "Comprimir Imagem",
17
+ processingLabel: "A processar...",
18
+ resultsTitle: "Imagens Otimizadas",
19
+ originalSizeLabel: "Tamanho Original",
20
+ newSizeLabel: "Novo Tamanho",
21
+ reductionLabel: "Poupança",
22
+ downloadBtn: "Descarregar",
23
+ addMoreBtn: "Adicionar mais",
24
+ browseFilesBtn: "Procurar ficheiros",
25
+ processedFilesTitle: "Ficheiros Processados",
26
+ downloadAllBtn: "Descarregar Tudo",
27
+ adjustThisImage: "Ajustar esta imagem",
28
+ downloadTitle: "Download",
29
+ maxWidthLabel: "Largura máx (px)",
30
+ closeBtn: "Fechar",
31
+ totalSavingsLabel: "Poupança total",
32
+ noSavings: "Sem poupança líquida",
33
+ faqTitle: "Perguntas Frequentes",
34
+ bibliographyTitle: "Referências"
35
+ };
36
+
37
+ const faq: ImageCompressorLocaleContent['faq'] = [
38
+ {
39
+ question: "Como funciona a compressão sem perda?",
40
+ answer: "Utilizamos algoritmos que removem metadados desnecessários e otimizam a codificação dos píxeis. Ao escolher WebP, é utilizada uma tecnologia de compressão mais avançada do que os formatos tradicionais.",
41
+ },
42
+ {
43
+ question: "As minhas imagens são carregadas para algum servidor?",
44
+ answer: "Não. Todo o processamento ocorre 100% no seu navegador (Client-Side). As suas fotos nunca saem do seu computador, garantindo privacidade absoluta.",
45
+ },
46
+ {
47
+ question: "Por que devo converter para WebP?",
48
+ answer: "WebP é o formato padrão moderno para a web. Oferece uma qualidade superior ao JPG e PNG com um peso até 30% menor, o que acelera o tempo de carregamento da página.",
49
+ },
50
+ ];
51
+
52
+ const howTo: ImageCompressorLocaleContent['howTo'] = [
53
+ {
54
+ name: "Carregue a imagem",
55
+ text: "Carregue o ficheiro que deseja comprimir (JPG, PNG ou WebP).",
56
+ },
57
+ {
58
+ name: "Ajuste a qualidade",
59
+ text: "Utilize o seletor para encontrar o equilíbrio perfeito entre o tamanho do ficheiro e a qualidade visual (recomendado: 75 85%).",
60
+ },
61
+ {
62
+ name: "Redimensione (opcional)",
63
+ text: "Se a imagem for muito grande, pode especificar uma largura máxima para reduzir a sua resolução.",
64
+ },
65
+ {
66
+ name: "Descarregue o resultado",
67
+ text: "Prima o botão de download para obter a sua imagem otimizada pronta a usar.",
68
+ },
69
+ ];
70
+
71
+ const bibliography: ImageCompressorLocaleContent['bibliography'] = [
72
+ {
73
+ name: "WebP: Um formato de imagem para a Web",
74
+ url: "https://developers.google.com/speed/webp",
75
+ },
76
+ {
77
+ name: "A importância da otimização de imagens para 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: 'Otimização Profissional de Imagens Web',
86
+ items: [
87
+ 'Compressão inteligente de JPG, PNG e WebP',
88
+ 'Reduza o peso em 50-80% mantendo a qualidade visual',
89
+ 'Processamento 100% local - privacidade garantida',
90
+ 'Melhore o Core Web Vitals e o posicionamento SEO'
91
+ ]
92
+ },
93
+ { type: 'title', text: 'Otimização de Imagens: Velocidade Web e Core Web Vitals', level: 2 },
94
+ { type: 'paragraph', html: 'Na era do imediatismo digital, um site lento perde utilizadores. Imagens não otimizadas representam 60-70% do peso total de uma página web. Otimizá-las é o primeiro passo para melhorar as suas métricas do Google (LCP, CLS) e o seu posicionamento nos resultados de pesquisa.' },
95
+
96
+ { type: 'stats', items: [
97
+ { value: '50-80%', label: 'Redução de Peso Típica', icon: 'mdi:trending-down' },
98
+ { value: '100%', label: 'Privacidade Local', icon: 'mdi:lock' },
99
+ { value: '+30%', label: 'Mais rápido que o JPG', icon: 'mdi:speedometer' }
100
+ ], columns: 3 },
101
+
102
+ { type: 'title', text: 'Formatos de Compressão Explicados', level: 3 },
103
+ { type: 'table', headers: ['Formato', 'Compressão', 'Casos de Uso', 'Compatibilidade'], rows: [
104
+ ['JPEG', 'Lossy 50-90%', 'Fotos de câmara, conteúdo editorial', 'Universal (100%)'],
105
+ ['PNG', 'Lossless 30-50%', 'Gráficos, logótipos, transparências', 'Universal (100%)'],
106
+ ['WebP', 'Lossy/Lossless 25-35% mais', 'Web moderna, redes sociais', '95% dos navegadores modernos'],
107
+ ['AVIF', 'Lossy/Lossless melhoria de 20%', 'Web de próxima geração', 'Apenas novos navegadores']
108
+ ] },
109
+
110
+ { type: 'card', title: 'Por que o WebP é o Futuro', html: 'A Google desenvolveu o WebP especificamente para a web. Oferece uma compressão superior ao JPEG e PNG, mantendo ou melhorando a qualidade visual. É 25-35% menor que os equivalentes JPEG. Os navegadores modernos suportam-no em 95%.' },
111
+
112
+ { type: 'title', text: 'Compressão Lossy vs Lossless', level: 3 },
113
+ { type: 'comparative', items: [
114
+ {
115
+ title: 'Compressão Lossy',
116
+ description: 'JPG, WebP - Remove informação visual impercetível',
117
+ icon: 'mdi:compress',
118
+ points: [
119
+ 'Reduz 70-90% do peso original',
120
+ 'Impercetível ao olho humano se a qualidade for mantida >75%',
121
+ 'Ideal para fotografia realista',
122
+ 'Não recomendado para logótipos ou texto nítido'
123
+ ],
124
+ highlight: true
125
+ },
126
+ {
127
+ title: 'Compressão Lossless',
128
+ description: 'PNG, WebP lossless - Mantém 100% dos dados visuais',
129
+ icon: 'mdi:shield',
130
+ points: [
131
+ 'Reduz 20-50% do peso',
132
+ 'Qualidade perfeita, sem degradação',
133
+ 'Ideal para gráficos, logótipos, transparências',
134
+ 'Ficheiros mais pesados que em Lossy'
135
+ ]
136
+ }
137
+ ], columns: 2 },
138
+
139
+ { type: 'title', text: 'Impacto no SEO e na Conversão', level: 3 },
140
+ { type: 'list', items: [
141
+ '<strong>Core Web Vitals:</strong> O Google penaliza sites lentos. Imagens otimizadas melhoram o LCP (Largest Contentful Paint) diretamente.',
142
+ '<strong>Taxa de Rejeição:</strong> Cada segundo de atraso = 7% mais rejeição. Imagens mais rápidas = menos utilizadores que abandonam o site.',
143
+ '<strong>Ranking de Pesquisa:</strong> A velocidade é um fator de posicionamento. Otimizar imagens impulsiona o posicionamento.',
144
+ '<strong>Conversão:</strong> Tempos de carregamento mais rápidos = mais conversões. Estudos mostram +10% de conversão com a otimização.'
145
+ ], icon: 'mdi:check' },
146
+
147
+ { type: 'proscons', items: [
148
+ {
149
+ pro: 'Privacidade total: processamento 100% local, sem servidores na nuvem',
150
+ con: 'Requer navegador com suporte para Canvas API (é universal)'
151
+ },
152
+ {
153
+ pro: 'WebP é 25-35% menor que o JPEG com igual qualidade',
154
+ con: 'Versões antigas do Safari e IE não suportam WebP (fallback disponível)'
155
+ },
156
+ {
157
+ pro: 'Processamento instantâneo de múltiplas imagens',
158
+ con: 'Imagens muito grandes (>50MB) podem exigir tempo de espera'
159
+ },
160
+ {
161
+ pro: 'Redimensionamento opcional: reduz a resolução bem como a compressão',
162
+ con: 'Redimensionar perde informação - melhor otimizar a resolução na fonte'
163
+ }
164
+ ], proTitle: 'Vantagens', conTitle: 'Limitações' },
165
+
166
+ { type: 'diagnostic', variant: 'warning', title: 'Cuidado: Compressão Excessiva Degrada', icon: 'mdi:alert', badge: 'Qualidade', html: 'Mantenha a qualidade >75% para fotografia e >85% para conteúdo editorial. Abaixo disso, os artefactos de compressão (manchas, riscas) tornam-se visíveis. Uma imagem que parece boa em miniatura pode parecer má em tamanho grande.' },
167
+
168
+ { type: 'glossary', items: [
169
+ {
170
+ term: 'Compressão Lossy',
171
+ definition: 'Remove dados visuais que o olho humano percebe como \"ruído\". Ideal para fotografia. JPEG, WebP lossy, HEIC são lossy.'
172
+ },
173
+ {
174
+ term: 'Compressão Lossless',
175
+ definition: 'Reduz o tamanho sem perder informação visual. PNG e WebP lossless. Ideal para gráficos, logótipos, transparências.'
176
+ },
177
+ {
178
+ term: 'Core Web Vitals (Google)',
179
+ definition: 'Métricas de experiência do utilizador: LCP (velocidade de carregamento), FID (latência de interação), CLS (estabilidade visual). Afetam o ranking SEO.'
180
+ },
181
+ {
182
+ term: 'WebP',
183
+ definition: 'Formato desenvolvido pela Google. 25-35% menor que o JPEG. Suportado por 95% dos navegadores modernos (todos exceto IE).'
184
+ },
185
+ {
186
+ term: 'Artefactos de Compressão',
187
+ definition: 'Defeitos visuais causados por compressão excessiva: manchas, riscas de cor, contornos desfocados. Impercetíveis com qualidade >75%.'
188
+ }
189
+ ] },
190
+
191
+ { type: 'message', title: 'Otimização Web Profissional', ariaLabel: 'Informação sobre otimização de imagens para SEO', html: 'Não é vaidade técnica: comprimir imagens é um investimento direto na experiência do utilizador e no ranking do Google. Cada kilobyte conta no telemóvel. A nossa ferramenta transforma o que antes exigia software profissional ($$$) num processo gratuito de 3 cliques.' },
192
+
193
+ { type: 'title', text: 'Preparado para a Web Moderna', level: 3 },
194
+ { type: 'paragraph', html: 'Utilize compressão inteligente e o formato WebP para que a sua presença online seja rápida, responsiva e competitiva na pesquisa. Qualidade profissional, peso mínimo, carregamento instantâneo.' }
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: 'pt',
228
+ };
229
+
230
+ export const content: ImageCompressorLocaleContent = {
231
+ slug,
232
+ title,
233
+ description,
234
+ ui,
235
+ seo,
236
+ faqTitle: "Perguntas Frequentes",
237
+ faq,
238
+ bibliographyTitle: "Referências",
239
+ bibliography,
240
+ howTo,
241
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
242
+ };