@jjlmoya/utils-audiovisual 1.6.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/package.json +59 -58
  2. package/src/category/i18n/de.ts +198 -0
  3. package/src/category/i18n/fr.ts +1 -1
  4. package/src/category/i18n/id.ts +198 -0
  5. package/src/category/i18n/it.ts +198 -0
  6. package/src/category/i18n/ja.ts +198 -0
  7. package/src/category/i18n/ko.ts +198 -0
  8. package/src/category/i18n/nl.ts +198 -0
  9. package/src/category/i18n/pl.ts +198 -0
  10. package/src/category/i18n/pt.ts +198 -0
  11. package/src/category/i18n/ru.ts +198 -0
  12. package/src/category/i18n/sv.ts +198 -0
  13. package/src/category/i18n/tr.ts +198 -0
  14. package/src/category/i18n/zh.ts +198 -0
  15. package/src/category/index.ts +31 -3
  16. package/src/tests/i18n_coverage.test.ts +36 -0
  17. package/src/tests/schemas_fulfillment.test.ts +23 -0
  18. package/src/tests/title_quality.test.ts +55 -0
  19. package/src/tool/chromaticLens/i18n/de.ts +246 -0
  20. package/src/tool/chromaticLens/i18n/en.ts +1 -1
  21. package/src/tool/chromaticLens/i18n/es.ts +1 -1
  22. package/src/tool/chromaticLens/i18n/fr.ts +1 -1
  23. package/src/tool/chromaticLens/i18n/id.ts +246 -0
  24. package/src/tool/chromaticLens/i18n/it.ts +246 -0
  25. package/src/tool/chromaticLens/i18n/ja.ts +246 -0
  26. package/src/tool/chromaticLens/i18n/ko.ts +246 -0
  27. package/src/tool/chromaticLens/i18n/nl.ts +246 -0
  28. package/src/tool/chromaticLens/i18n/pl.ts +246 -0
  29. package/src/tool/chromaticLens/i18n/pt.ts +246 -0
  30. package/src/tool/chromaticLens/i18n/ru.ts +246 -0
  31. package/src/tool/chromaticLens/i18n/sv.ts +246 -0
  32. package/src/tool/chromaticLens/i18n/tr.ts +246 -0
  33. package/src/tool/chromaticLens/i18n/zh.ts +246 -0
  34. package/src/tool/chromaticLens/index.ts +15 -7
  35. package/src/tool/collageMaker/i18n/de.ts +233 -0
  36. package/src/tool/collageMaker/i18n/en.ts +1 -1
  37. package/src/tool/collageMaker/i18n/es.ts +1 -1
  38. package/src/tool/collageMaker/i18n/fr.ts +1 -1
  39. package/src/tool/collageMaker/i18n/id.ts +233 -0
  40. package/src/tool/collageMaker/i18n/it.ts +233 -0
  41. package/src/tool/collageMaker/i18n/ja.ts +233 -0
  42. package/src/tool/collageMaker/i18n/ko.ts +233 -0
  43. package/src/tool/collageMaker/i18n/nl.ts +233 -0
  44. package/src/tool/collageMaker/i18n/pl.ts +233 -0
  45. package/src/tool/collageMaker/i18n/pt.ts +233 -0
  46. package/src/tool/collageMaker/i18n/ru.ts +233 -0
  47. package/src/tool/collageMaker/i18n/sv.ts +233 -0
  48. package/src/tool/collageMaker/i18n/tr.ts +233 -0
  49. package/src/tool/collageMaker/i18n/zh.ts +233 -0
  50. package/src/tool/collageMaker/index.ts +15 -6
  51. package/src/tool/exifCleaner/i18n/de.ts +277 -0
  52. package/src/tool/exifCleaner/i18n/en.ts +2 -2
  53. package/src/tool/exifCleaner/i18n/es.ts +2 -2
  54. package/src/tool/exifCleaner/i18n/fr.ts +4 -4
  55. package/src/tool/exifCleaner/i18n/id.ts +277 -0
  56. package/src/tool/exifCleaner/i18n/it.ts +277 -0
  57. package/src/tool/exifCleaner/i18n/ja.ts +277 -0
  58. package/src/tool/exifCleaner/i18n/ko.ts +277 -0
  59. package/src/tool/exifCleaner/i18n/nl.ts +277 -0
  60. package/src/tool/exifCleaner/i18n/pl.ts +277 -0
  61. package/src/tool/exifCleaner/i18n/pt.ts +277 -0
  62. package/src/tool/exifCleaner/i18n/ru.ts +277 -0
  63. package/src/tool/exifCleaner/i18n/sv.ts +277 -0
  64. package/src/tool/exifCleaner/i18n/tr.ts +277 -0
  65. package/src/tool/exifCleaner/i18n/zh.ts +277 -0
  66. package/src/tool/exifCleaner/index.ts +16 -8
  67. package/src/tool/imageCompressor/i18n/de.ts +242 -0
  68. package/src/tool/imageCompressor/i18n/en.ts +2 -2
  69. package/src/tool/imageCompressor/i18n/es.ts +2 -2
  70. package/src/tool/imageCompressor/i18n/id.ts +242 -0
  71. package/src/tool/imageCompressor/i18n/it.ts +242 -0
  72. package/src/tool/imageCompressor/i18n/ja.ts +242 -0
  73. package/src/tool/imageCompressor/i18n/ko.ts +242 -0
  74. package/src/tool/imageCompressor/i18n/nl.ts +242 -0
  75. package/src/tool/imageCompressor/i18n/pl.ts +242 -0
  76. package/src/tool/imageCompressor/i18n/pt.ts +242 -0
  77. package/src/tool/imageCompressor/i18n/ru.ts +242 -0
  78. package/src/tool/imageCompressor/i18n/sv.ts +242 -0
  79. package/src/tool/imageCompressor/i18n/tr.ts +242 -0
  80. package/src/tool/imageCompressor/i18n/zh.ts +244 -0
  81. package/src/tool/imageCompressor/index.ts +15 -7
  82. package/src/tool/printQualityCalculator/i18n/de.ts +261 -0
  83. package/src/tool/printQualityCalculator/i18n/en.ts +2 -2
  84. package/src/tool/printQualityCalculator/i18n/es.ts +3 -3
  85. package/src/tool/printQualityCalculator/i18n/fr.ts +3 -3
  86. package/src/tool/printQualityCalculator/i18n/id.ts +261 -0
  87. package/src/tool/printQualityCalculator/i18n/it.ts +261 -0
  88. package/src/tool/printQualityCalculator/i18n/ja.ts +261 -0
  89. package/src/tool/printQualityCalculator/i18n/ko.ts +261 -0
  90. package/src/tool/printQualityCalculator/i18n/nl.ts +261 -0
  91. package/src/tool/printQualityCalculator/i18n/pl.ts +261 -0
  92. package/src/tool/printQualityCalculator/i18n/pt.ts +261 -0
  93. package/src/tool/printQualityCalculator/i18n/ru.ts +261 -0
  94. package/src/tool/printQualityCalculator/i18n/sv.ts +261 -0
  95. package/src/tool/printQualityCalculator/i18n/tr.ts +261 -0
  96. package/src/tool/printQualityCalculator/i18n/zh.ts +261 -0
  97. package/src/tool/printQualityCalculator/index.ts +15 -7
  98. package/src/tool/privacyBlur/i18n/de.ts +238 -0
  99. package/src/tool/privacyBlur/i18n/en.ts +1 -1
  100. package/src/tool/privacyBlur/i18n/es.ts +1 -1
  101. package/src/tool/privacyBlur/i18n/fr.ts +1 -1
  102. package/src/tool/privacyBlur/i18n/id.ts +238 -0
  103. package/src/tool/privacyBlur/i18n/it.ts +238 -0
  104. package/src/tool/privacyBlur/i18n/ja.ts +238 -0
  105. package/src/tool/privacyBlur/i18n/ko.ts +238 -0
  106. package/src/tool/privacyBlur/i18n/nl.ts +238 -0
  107. package/src/tool/privacyBlur/i18n/pl.ts +238 -0
  108. package/src/tool/privacyBlur/i18n/pt.ts +238 -0
  109. package/src/tool/privacyBlur/i18n/ru.ts +238 -0
  110. package/src/tool/privacyBlur/i18n/sv.ts +238 -0
  111. package/src/tool/privacyBlur/i18n/tr.ts +238 -0
  112. package/src/tool/privacyBlur/i18n/zh.ts +238 -0
  113. package/src/tool/privacyBlur/index.ts +15 -7
  114. package/src/tool/subtitleSync/i18n/de.ts +241 -0
  115. package/src/tool/subtitleSync/i18n/en.ts +1 -1
  116. package/src/tool/subtitleSync/i18n/es.ts +1 -1
  117. package/src/tool/subtitleSync/i18n/fr.ts +8 -8
  118. package/src/tool/subtitleSync/i18n/id.ts +241 -0
  119. package/src/tool/subtitleSync/i18n/it.ts +241 -0
  120. package/src/tool/subtitleSync/i18n/ja.ts +241 -0
  121. package/src/tool/subtitleSync/i18n/ko.ts +241 -0
  122. package/src/tool/subtitleSync/i18n/nl.ts +241 -0
  123. package/src/tool/subtitleSync/i18n/pl.ts +241 -0
  124. package/src/tool/subtitleSync/i18n/pt.ts +241 -0
  125. package/src/tool/subtitleSync/i18n/ru.ts +241 -0
  126. package/src/tool/subtitleSync/i18n/sv.ts +241 -0
  127. package/src/tool/subtitleSync/i18n/tr.ts +241 -0
  128. package/src/tool/subtitleSync/i18n/zh.ts +241 -0
  129. package/src/tool/subtitleSync/index.ts +15 -7
  130. package/src/tool/timelapseCalculator/i18n/de.ts +169 -0
  131. package/src/tool/timelapseCalculator/i18n/fr.ts +2 -2
  132. package/src/tool/timelapseCalculator/i18n/id.ts +169 -0
  133. package/src/tool/timelapseCalculator/i18n/it.ts +169 -0
  134. package/src/tool/timelapseCalculator/i18n/ja.ts +169 -0
  135. package/src/tool/timelapseCalculator/i18n/ko.ts +169 -0
  136. package/src/tool/timelapseCalculator/i18n/nl.ts +169 -0
  137. package/src/tool/timelapseCalculator/i18n/pl.ts +169 -0
  138. package/src/tool/timelapseCalculator/i18n/pt.ts +169 -0
  139. package/src/tool/timelapseCalculator/i18n/ru.ts +169 -0
  140. package/src/tool/timelapseCalculator/i18n/sv.ts +169 -0
  141. package/src/tool/timelapseCalculator/i18n/tr.ts +169 -0
  142. package/src/tool/timelapseCalculator/i18n/zh.ts +169 -0
  143. package/src/tool/timelapseCalculator/index.ts +16 -8
  144. package/src/tool/tvDistance/i18n/de.ts +223 -0
  145. package/src/tool/tvDistance/i18n/en.ts +1 -1
  146. package/src/tool/tvDistance/i18n/es.ts +1 -1
  147. package/src/tool/tvDistance/i18n/fr.ts +1 -1
  148. package/src/tool/tvDistance/i18n/id.ts +223 -0
  149. package/src/tool/tvDistance/i18n/it.ts +223 -0
  150. package/src/tool/tvDistance/i18n/ja.ts +223 -0
  151. package/src/tool/tvDistance/i18n/ko.ts +223 -0
  152. package/src/tool/tvDistance/i18n/nl.ts +223 -0
  153. package/src/tool/tvDistance/i18n/pl.ts +223 -0
  154. package/src/tool/tvDistance/i18n/pt.ts +223 -0
  155. package/src/tool/tvDistance/i18n/ru.ts +223 -0
  156. package/src/tool/tvDistance/i18n/sv.ts +223 -0
  157. package/src/tool/tvDistance/i18n/tr.ts +223 -0
  158. package/src/tool/tvDistance/i18n/zh.ts +223 -0
  159. package/src/tool/tvDistance/index.ts +15 -7
  160. package/src/tool/videoFrameExtractor/i18n/de.ts +235 -0
  161. package/src/tool/videoFrameExtractor/i18n/en.ts +1 -1
  162. package/src/tool/videoFrameExtractor/i18n/es.ts +1 -1
  163. package/src/tool/videoFrameExtractor/i18n/fr.ts +1 -1
  164. package/src/tool/videoFrameExtractor/i18n/id.ts +235 -0
  165. package/src/tool/videoFrameExtractor/i18n/it.ts +235 -0
  166. package/src/tool/videoFrameExtractor/i18n/ja.ts +235 -0
  167. package/src/tool/videoFrameExtractor/i18n/ko.ts +235 -0
  168. package/src/tool/videoFrameExtractor/i18n/nl.ts +235 -0
  169. package/src/tool/videoFrameExtractor/i18n/pl.ts +235 -0
  170. package/src/tool/videoFrameExtractor/i18n/pt.ts +235 -0
  171. package/src/tool/videoFrameExtractor/i18n/ru.ts +235 -0
  172. package/src/tool/videoFrameExtractor/i18n/sv.ts +235 -0
  173. package/src/tool/videoFrameExtractor/i18n/tr.ts +235 -0
  174. package/src/tool/videoFrameExtractor/i18n/zh.ts +235 -0
  175. package/src/tool/videoFrameExtractor/index.ts +16 -8
@@ -0,0 +1,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
+ };
@@ -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 = 'onlayn-kompressor-izobrazheniy-umenshit-razmer-bez-poteri-kachestva';
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% в вашем браузере (Client-Side). Ваши фотографии никогда не покидают ваш компьютер, что гарантирует абсолютную конфиденциальность.",
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, сохраняя или улучшая визуальное качество. Он на 25-35% меньше эквивалентов JPEG. Современные браузеры поддерживают его на 95%.' },
111
+
112
+ { type: 'title', text: 'Сжатие с потерями и без потерь', level: 3 },
113
+ { type: 'comparative', items: [
114
+ {
115
+ title: 'Сжатие с потерями (Lossy)',
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: 'Сжатие без потерь (Lossless)',
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 (Largest Contentful Paint).',
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 на 25-35% меньше, чем JPEG при равном качестве',
154
+ con: 'Старые версии Safari и IE не поддерживают WebP (доступен фолбек)'
155
+ },
156
+ {
157
+ pro: 'Мгновенная обработка нескольких изображений',
158
+ con: 'Очень большие изображения (>50 МБ) могут потребовать времени ожидания'
159
+ },
160
+ {
161
+ pro: 'Опциональное изменение размера: уменьшает как разрешение, так и сжатие',
162
+ con: 'Изменение размера приводит к потере информации — лучше оптимизировать разрешение в источнике'
163
+ }
164
+ ], proTitle: 'Преимущества', conTitle: 'Ограничения' },
165
+
166
+ { type: 'diagnostic', variant: 'warning', title: 'Осторожно: чрезмерное сжатие портит качество', icon: 'mdi:alert', badge: 'Качество', html: 'Сохраняйте качество >75% для фотографий и >85% для редакционного контента. Ниже этих значений становятся заметны артефакты сжатия (пятна, полосы). Изображение, которое хорошо выглядит в миниатюре, может выглядеть плохо в большом размере.' },
167
+
168
+ { type: 'glossary', items: [
169
+ {
170
+ term: 'Сжатие с потерями (Lossy)',
171
+ definition: 'Удаляет визуальные данные, которые человеческий глаз воспринимает как «шум». Идеально для фотографий. JPEG, WebP с потерями, HEIC являются форматами с потерями.'
172
+ },
173
+ {
174
+ term: 'Сжатие без потерь (Lossless)',
175
+ definition: 'Уменьшает размер без потери визуальной информации. PNG и WebP без потерь. Идеально для графики, логотипов, прозрачности.'
176
+ },
177
+ {
178
+ term: 'Core Web Vitals (Google)',
179
+ definition: 'Метрики пользовательского опыта: LCP (скорость загрузки), FID (задержка взаимодействия), CLS (визуальная стабильность). Влияют на SEO-рейтинг.'
180
+ },
181
+ {
182
+ term: 'WebP',
183
+ definition: 'Формат, разработанный Google. На 25-35% меньше, чем JPEG. Поддерживается 95% современных браузеров (все, кроме IE).'
184
+ },
185
+ {
186
+ term: 'Артефакты сжатия',
187
+ definition: 'Визуальные дефекты, вызванные чрезмерным сжатием: пятна, цветовые полосы, размытые края. Незаметны при качестве >75%.'
188
+ }
189
+ ] },
190
+
191
+ { type: 'message', title: 'Профессиональная веб оптимизация', ariaLabel: 'Информация об оптимизации изображений для SEO', html: 'Это не техническая прихоть: сжатие изображений — это прямая инвестиция в пользовательский опыт и рейтинг в Google. На мобильных устройствах важен каждый килобайт. Наш инструмент превращает то, что раньше требовало профессионального ПО ($$$), в бесплатный процесс в 3 клика.' },
192
+
193
+ { type: 'title', text: 'Готовы к современному вебу', level: 3 },
194
+ { type: 'paragraph', html: 'Используйте интеллектуальное сжатие и формат WebP, чтобы ваше онлайн-присутствие было быстрым, адаптивным и конкурентоспособным в поиске. Профессиональное качество, минимальный вес, мгновенная загрузка.' }
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: 'ru',
228
+ };
229
+
230
+ export const content: ImageCompressorLocaleContent = {
231
+ slug,
232
+ title,
233
+ description,
234
+ ui,
235
+ seo,
236
+ faqTitle: "Часто задаваемые вопросы",
237
+ faq,
238
+ bibliographyTitle: "Ссылки",
239
+ bibliography,
240
+ howTo,
241
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
242
+ };