@jjlmoya/utils-audiovisual 1.2.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 +60 -0
- package/src/category/i18n/en.ts +198 -0
- package/src/category/i18n/es.ts +198 -0
- package/src/category/i18n/fr.ts +198 -0
- package/src/category/index.ts +17 -0
- package/src/category/seo.astro +15 -0
- package/src/components/PreviewNavSidebar.astro +116 -0
- package/src/components/PreviewToolbar.astro +143 -0
- package/src/data.ts +4 -0
- package/src/env.d.ts +5 -0
- package/src/index.ts +32 -0
- package/src/layouts/PreviewLayout.astro +117 -0
- package/src/pages/[locale]/[slug].astro +146 -0
- package/src/pages/[locale].astro +251 -0
- package/src/pages/index.astro +4 -0
- package/src/tests/faq_count.test.ts +19 -0
- package/src/tests/locale_completeness.test.ts +42 -0
- package/src/tests/mocks/astro_mock.js +2 -0
- package/src/tests/no_h1_in_components.test.ts +48 -0
- package/src/tests/seo_length.test.ts +22 -0
- package/src/tests/tool_validation.test.ts +17 -0
- package/src/tool/chromaticLens/bibliography.astro +17 -0
- package/src/tool/chromaticLens/component.astro +178 -0
- package/src/tool/chromaticLens/i18n/en.ts +246 -0
- package/src/tool/chromaticLens/i18n/es.ts +244 -0
- package/src/tool/chromaticLens/i18n/fr.ts +244 -0
- package/src/tool/chromaticLens/index.ts +43 -0
- package/src/tool/chromaticLens/logic.ts +87 -0
- package/src/tool/chromaticLens/seo.astro +15 -0
- package/src/tool/chromaticLens/style.css +308 -0
- package/src/tool/chromaticLens/ui.ts +109 -0
- package/src/tool/collageMaker/bibliography.astro +17 -0
- package/src/tool/collageMaker/component.astro +302 -0
- package/src/tool/collageMaker/i18n/en.ts +233 -0
- package/src/tool/collageMaker/i18n/es.ts +231 -0
- package/src/tool/collageMaker/i18n/fr.ts +231 -0
- package/src/tool/collageMaker/index.ts +51 -0
- package/src/tool/collageMaker/logic.ts +134 -0
- package/src/tool/collageMaker/seo.astro +15 -0
- package/src/tool/collageMaker/style.css +386 -0
- package/src/tool/exifCleaner/bibliography.astro +18 -0
- package/src/tool/exifCleaner/component.astro +162 -0
- package/src/tool/exifCleaner/i18n/en.ts +277 -0
- package/src/tool/exifCleaner/i18n/es.ts +277 -0
- package/src/tool/exifCleaner/i18n/fr.ts +277 -0
- package/src/tool/exifCleaner/index.ts +57 -0
- package/src/tool/exifCleaner/logic.ts +135 -0
- package/src/tool/exifCleaner/seo.astro +18 -0
- package/src/tool/exifCleaner/style.css +289 -0
- package/src/tool/exifCleaner/ui.ts +117 -0
- package/src/tool/imageCompressor/bibliography.astro +17 -0
- package/src/tool/imageCompressor/component.astro +262 -0
- package/src/tool/imageCompressor/i18n/en.ts +232 -0
- package/src/tool/imageCompressor/i18n/es.ts +230 -0
- package/src/tool/imageCompressor/i18n/fr.ts +230 -0
- package/src/tool/imageCompressor/index.ts +50 -0
- package/src/tool/imageCompressor/logic.ts +79 -0
- package/src/tool/imageCompressor/seo.astro +15 -0
- package/src/tool/imageCompressor/style.css +503 -0
- package/src/tool/printQualityCalculator/bibliography.astro +18 -0
- package/src/tool/printQualityCalculator/component.astro +318 -0
- package/src/tool/printQualityCalculator/i18n/en.ts +247 -0
- package/src/tool/printQualityCalculator/i18n/es.ts +245 -0
- package/src/tool/printQualityCalculator/i18n/fr.ts +245 -0
- package/src/tool/printQualityCalculator/index.ts +56 -0
- package/src/tool/printQualityCalculator/logic.ts +53 -0
- package/src/tool/printQualityCalculator/seo.astro +18 -0
- package/src/tool/printQualityCalculator/style.css +491 -0
- package/src/tool/printQualityCalculator/ui.ts +122 -0
- package/src/tool/privacyBlur/bibliography.astro +17 -0
- package/src/tool/privacyBlur/component.astro +230 -0
- package/src/tool/privacyBlur/i18n/en.ts +238 -0
- package/src/tool/privacyBlur/i18n/es.ts +236 -0
- package/src/tool/privacyBlur/i18n/fr.ts +236 -0
- package/src/tool/privacyBlur/index.ts +49 -0
- package/src/tool/privacyBlur/logic.ts +249 -0
- package/src/tool/privacyBlur/seo.astro +15 -0
- package/src/tool/privacyBlur/style.css +332 -0
- package/src/tool/privacyBlur/ui.ts +124 -0
- package/src/tool/subtitleSync/bibliography.astro +17 -0
- package/src/tool/subtitleSync/component.astro +187 -0
- package/src/tool/subtitleSync/i18n/en.ts +241 -0
- package/src/tool/subtitleSync/i18n/es.ts +241 -0
- package/src/tool/subtitleSync/i18n/fr.ts +241 -0
- package/src/tool/subtitleSync/index.ts +49 -0
- package/src/tool/subtitleSync/logic.ts +91 -0
- package/src/tool/subtitleSync/seo.astro +15 -0
- package/src/tool/subtitleSync/style.css +325 -0
- package/src/tool/subtitleSync/ui.ts +152 -0
- package/src/tool/timelapseCalculator/bibliography.astro +15 -0
- package/src/tool/timelapseCalculator/component.astro +148 -0
- package/src/tool/timelapseCalculator/i18n/en.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/es.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/fr.ts +169 -0
- package/src/tool/timelapseCalculator/index.ts +52 -0
- package/src/tool/timelapseCalculator/logic.ts +46 -0
- package/src/tool/timelapseCalculator/seo.astro +18 -0
- package/src/tool/timelapseCalculator/style.css +285 -0
- package/src/tool/tvDistance/bibliography.astro +17 -0
- package/src/tool/tvDistance/component.astro +178 -0
- package/src/tool/tvDistance/i18n/en.ts +223 -0
- package/src/tool/tvDistance/i18n/es.ts +223 -0
- package/src/tool/tvDistance/i18n/fr.ts +223 -0
- package/src/tool/tvDistance/index.ts +49 -0
- package/src/tool/tvDistance/logic.ts +47 -0
- package/src/tool/tvDistance/seo.astro +15 -0
- package/src/tool/tvDistance/style.css +435 -0
- package/src/tool/tvDistance/ui.ts +66 -0
- package/src/tool/videoFrameExtractor/bibliography.astro +17 -0
- package/src/tool/videoFrameExtractor/component.astro +285 -0
- package/src/tool/videoFrameExtractor/i18n/en.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/es.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/fr.ts +235 -0
- package/src/tool/videoFrameExtractor/index.ts +53 -0
- package/src/tool/videoFrameExtractor/logic.ts +49 -0
- package/src/tool/videoFrameExtractor/seo.astro +15 -0
- package/src/tool/videoFrameExtractor/style.css +426 -0
- package/src/tool/videoFrameExtractor/ui.ts +179 -0
- package/src/tools.ts +25 -0
- package/src/types.ts +72 -0
|
@@ -0,0 +1,232 @@
|
|
|
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 = 'Online Image Compressor - Reduce weight without losing quality';
|
|
6
|
+
const description = 'Optimize and compress your JPG, PNG, and WebP photos for free. Reduce file size to improve your web loading speed locally.';
|
|
7
|
+
|
|
8
|
+
const ui: ImageCompressorUI = {
|
|
9
|
+
dropTitle: "Optimize Images",
|
|
10
|
+
dropSubtitle: "Drag your photos to reduce their weight instantly.",
|
|
11
|
+
settingsTitle: "Compression Settings",
|
|
12
|
+
qualityLabel: "Visual Quality",
|
|
13
|
+
widthLabel: "Maximum Width (Pixels)",
|
|
14
|
+
convertToWebpLabel: "Convert to WebP (Recommended)",
|
|
15
|
+
compressBtn: "Compress Image",
|
|
16
|
+
processingLabel: "Processing...",
|
|
17
|
+
resultsTitle: "Optimized Images",
|
|
18
|
+
originalSizeLabel: "Original Size",
|
|
19
|
+
newSizeLabel: "New Size",
|
|
20
|
+
reductionLabel: "Savings",
|
|
21
|
+
downloadBtn: "Download",
|
|
22
|
+
addMoreBtn: "Add more",
|
|
23
|
+
faqTitle: "Frequently Asked Questions",
|
|
24
|
+
bibliographyTitle: "References"
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const faq: ImageCompressorLocaleContent['faq'] = [
|
|
28
|
+
{
|
|
29
|
+
question: "How does lossless compression work?",
|
|
30
|
+
answer: "We use algorithms that remove unnecessary metadata and optimize pixel encoding. When choosing WebP, a more advanced compression technology than traditional formats is used.",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: "Are my images uploaded to any server?",
|
|
34
|
+
answer: "No. All processing happens 100% in your browser (Client-Side). Your photos never leave your computer, guaranteeing absolute privacy.",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
question: "Why should I convert to WebP?",
|
|
38
|
+
answer: "WebP is the modern standard format for the web. It offers superior quality to JPG and PNG with a weight up to 30% less, which speeds up page loading time.",
|
|
39
|
+
},
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
const howTo: ImageCompressorLocaleContent['howTo'] = [
|
|
43
|
+
{
|
|
44
|
+
name: "Upload the image",
|
|
45
|
+
text: "Upload the file you want to compress (JPG, PNG, or WebP).",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: "Adjust quality",
|
|
49
|
+
text: "Use the slider to find the perfect balance between file size and visual quality (recommended: 75-85%).",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: "Resize (optional)",
|
|
53
|
+
text: "If the image is very large, you can specify a maximum width to reduce its resolution.",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: "Download the result",
|
|
57
|
+
text: "Press the download button to get your optimized image ready to use.",
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
const bibliography: ImageCompressorLocaleContent['bibliography'] = [
|
|
62
|
+
{
|
|
63
|
+
name: "WebP: An Image Format for the Web",
|
|
64
|
+
url: "https://developers.google.com/speed/webp",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: "The importance of image optimization for SEO",
|
|
68
|
+
url: "https://developers.google.com/search/docs/appearance/google-images",
|
|
69
|
+
},
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
const seo: ImageCompressorLocaleContent['seo'] = [
|
|
73
|
+
{
|
|
74
|
+
type: 'summary',
|
|
75
|
+
title: 'Professional Web Image Optimization',
|
|
76
|
+
items: [
|
|
77
|
+
'Intelligent JPG, PNG, and WebP compression',
|
|
78
|
+
'Reduce weight 50-80% maintaining visual quality',
|
|
79
|
+
'100% local processing - privacy guaranteed',
|
|
80
|
+
'Improve Core Web Vitals and SEO positioning'
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
{ type: 'title', text: 'Image Optimization: Web Speed and Core Web Vitals', level: 2 },
|
|
84
|
+
{ type: 'paragraph', html: 'In the era of digital immediacy, a slow web loses users. Unoptimized images represent 60-70% of the total weight of a web page. Optimizing them is the first step to improve your Google metrics (LCP, CLS) and your positioning in search results.' },
|
|
85
|
+
|
|
86
|
+
{ type: 'stats', items: [
|
|
87
|
+
{ value: '50-80%', label: 'Typical Weight Reduction', icon: 'mdi:trending-down' },
|
|
88
|
+
{ value: '100%', label: 'Local Privacy', icon: 'mdi:lock' },
|
|
89
|
+
{ value: '+30%', label: 'Faster than JPG', icon: 'mdi:speedometer' }
|
|
90
|
+
], columns: 3 },
|
|
91
|
+
|
|
92
|
+
{ type: 'title', text: 'Compression Formats Explained', level: 3 },
|
|
93
|
+
{ type: 'table', headers: ['Format', 'Compression', 'Use Cases', 'Compatibility'], rows: [
|
|
94
|
+
['JPEG', 'Lossy 50-90%', 'Camera photos, editorial content', 'Universal (100%)'],
|
|
95
|
+
['PNG', 'Lossless 30-50%', 'Graphics, logos, transparencies', 'Universal (100%)'],
|
|
96
|
+
['WebP', 'Lossy/Lossless 25-35% more', 'Modern web, social networks', '95% modern browsers'],
|
|
97
|
+
['AVIF', 'Lossy/Lossless 20% improvement', 'Next-generation web', 'New browsers only']
|
|
98
|
+
] },
|
|
99
|
+
|
|
100
|
+
{ type: 'card', title: 'Why WebP is the Future', html: 'Google developed WebP specifically for the web. It offers superior compression to JPEG and PNG, maintaining or improving visual quality. It is 25-35% smaller than JPEG equivalents. Modern browsers support it at 95%.' },
|
|
101
|
+
|
|
102
|
+
{ type: 'title', text: 'Lossy vs Lossless Compression', level: 3 },
|
|
103
|
+
{ type: 'comparative', items: [
|
|
104
|
+
{
|
|
105
|
+
title: 'Lossy Compression',
|
|
106
|
+
description: 'JPG, WebP - Removes imperceptible visual information',
|
|
107
|
+
icon: 'mdi:compress',
|
|
108
|
+
points: [
|
|
109
|
+
'Reduces 70-90% of original weight',
|
|
110
|
+
'Imperceptible to the human eye if quality is maintained >75%',
|
|
111
|
+
'Ideal for realistic photography',
|
|
112
|
+
'Not recommended for logos or sharp text'
|
|
113
|
+
],
|
|
114
|
+
highlight: true
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
title: 'Lossless Compression',
|
|
118
|
+
description: 'PNG, WebP lossless - Maintains 100% visual data',
|
|
119
|
+
icon: 'mdi:shield',
|
|
120
|
+
points: [
|
|
121
|
+
'Reduces 20-50% of weight',
|
|
122
|
+
'Perfect quality, no degradation',
|
|
123
|
+
'Ideal for graphics, logos, transparencies',
|
|
124
|
+
'Heavier files than Lossy'
|
|
125
|
+
]
|
|
126
|
+
}
|
|
127
|
+
], columns: 2 },
|
|
128
|
+
|
|
129
|
+
{ type: 'title', text: 'Impact on SEO and Conversion', level: 3 },
|
|
130
|
+
{ type: 'list', items: [
|
|
131
|
+
'<strong>Core Web Vitals:</strong> Google penalizes slow sites. Optimized images improve LCP (Largest Contentful Paint) directly.',
|
|
132
|
+
'<strong>Bounce Rate:</strong> Every second of delay = 7% more bounce. Faster images = fewer users who leave.',
|
|
133
|
+
'<strong>Search Ranking:</strong> Speed is a ranking factor. Optimizing images boosts positioning.',
|
|
134
|
+
'<strong>Conversion:</strong> Faster loading times = more conversions. Studies show +10% conversion with optimization.'
|
|
135
|
+
], icon: 'mdi:check' },
|
|
136
|
+
|
|
137
|
+
{ type: 'proscons', items: [
|
|
138
|
+
{
|
|
139
|
+
pro: 'Total privacy: 100% local processing, no cloud servers',
|
|
140
|
+
con: 'Requires browser with Canvas API support (it is universal)'
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
pro: 'WebP is 25-35% smaller than JPEG with equal quality',
|
|
144
|
+
con: 'Old Safari and IE do not support WebP (fallback available)'
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
pro: 'Instant processing of multiple images',
|
|
148
|
+
con: 'Very large images (>50MB) may require waiting'
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
pro: 'Optional resizing: reduces resolution as well as compression',
|
|
152
|
+
con: 'Resizing loses information - better to optimize resolution at source'
|
|
153
|
+
}
|
|
154
|
+
], proTitle: 'Advantages', conTitle: 'Limitations' },
|
|
155
|
+
|
|
156
|
+
{ type: 'diagnostic', variant: 'warning', title: 'Caution: Excessive Compression Degrades', icon: 'mdi:alert', badge: 'Quality', html: 'Maintain quality >75% for photography and >85% for editorial content. Below that, compression artifacts (spots, banding) become visible. An image that looks good in thumbnail may look bad large.' },
|
|
157
|
+
|
|
158
|
+
{ type: 'glossary', items: [
|
|
159
|
+
{
|
|
160
|
+
term: 'Lossy Compression',
|
|
161
|
+
definition: 'Removes visual data that the human eye perceives as "noise". Ideal for photography. JPEG, lossy WebP, HEIC are lossy.'
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
term: 'Lossless Compression',
|
|
165
|
+
definition: 'Reduces size without losing visual information. PNG and lossless WebP. Ideal for graphics, logos, transparencies.'
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
term: 'Core Web Vitals (Google)',
|
|
169
|
+
definition: 'User experience metrics: LCP (loading speed), FID (interaction latency), CLS (visual stability). Affect SEO ranking.'
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
term: 'WebP',
|
|
173
|
+
definition: 'Format developed by Google. 25-35% smaller than JPEG. Supported by 95% of modern browsers (all except IE).'
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
term: 'Compression Artifacts',
|
|
177
|
+
definition: 'Visual defects caused by excessive compression: spots, color banding, fuzzy edges. Imperceptible <75% quality.'
|
|
178
|
+
}
|
|
179
|
+
] },
|
|
180
|
+
|
|
181
|
+
{ type: 'message', title: 'Professional Web Optimization', ariaLabel: 'Information about image optimization for SEO', html: 'It\'s not technical vanity: compressing images is a direct investment in user experience and ranking in Google. Every kilobyte counts on mobile. Our tool turns what used to require professional software ($$$) into a free 3-click process.' },
|
|
182
|
+
|
|
183
|
+
{ type: 'title', text: 'Prepared for the Modern Web', level: 3 },
|
|
184
|
+
{ type: 'paragraph', html: 'Use intelligent compression and WebP format so that your online presence is fast, responsive, and competitive in search. Professional quality, minimum weight, instant loading.' }
|
|
185
|
+
];
|
|
186
|
+
|
|
187
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
188
|
+
'@context': 'https://schema.org',
|
|
189
|
+
'@type': 'FAQPage',
|
|
190
|
+
mainEntity: faq.map((item) => ({
|
|
191
|
+
'@type': 'Question',
|
|
192
|
+
name: item.question,
|
|
193
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
194
|
+
})),
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
const howToSchema: WithContext<HowTo> = {
|
|
198
|
+
'@context': 'https://schema.org',
|
|
199
|
+
'@type': 'HowTo',
|
|
200
|
+
name: title,
|
|
201
|
+
description,
|
|
202
|
+
step: howTo.map((step) => ({
|
|
203
|
+
'@type': 'HowToStep',
|
|
204
|
+
name: step.name,
|
|
205
|
+
text: step.text,
|
|
206
|
+
})),
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
210
|
+
'@context': 'https://schema.org',
|
|
211
|
+
'@type': 'SoftwareApplication',
|
|
212
|
+
name: title,
|
|
213
|
+
description,
|
|
214
|
+
applicationCategory: 'UtilitiesApplication',
|
|
215
|
+
operatingSystem: 'Web',
|
|
216
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
217
|
+
inLanguage: 'en',
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
export const content: ImageCompressorLocaleContent = {
|
|
221
|
+
slug,
|
|
222
|
+
title,
|
|
223
|
+
description,
|
|
224
|
+
ui,
|
|
225
|
+
seo,
|
|
226
|
+
faqTitle: "Frequently Asked Questions",
|
|
227
|
+
faq,
|
|
228
|
+
bibliographyTitle: "References",
|
|
229
|
+
bibliography,
|
|
230
|
+
howTo,
|
|
231
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
232
|
+
};
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ImageCompressorUI, ImageCompressorLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'compresor-imagenes';
|
|
5
|
+
const title = 'Compresor de Imágenes Online - Reduce el peso sin perder calidad';
|
|
6
|
+
const description = 'Optimiza y comprime tus fotos JPG, PNG y WebP de forma gratuita. Reduce el tamaño de archivo para mejorar la velocidad de carga de tu web de forma local.';
|
|
7
|
+
|
|
8
|
+
const ui: ImageCompressorUI = {
|
|
9
|
+
dropTitle: "Optimizar Imágenes",
|
|
10
|
+
dropSubtitle: "Arrastra tus fotos para reducir su peso instantáneamente.",
|
|
11
|
+
settingsTitle: "Ajustes de Compresión",
|
|
12
|
+
qualityLabel: "Calidad Visual",
|
|
13
|
+
widthLabel: "Ancho Máximo (Píxeles)",
|
|
14
|
+
convertToWebpLabel: "Convertir a WebP (Recomendado)",
|
|
15
|
+
compressBtn: "Comprimir Imagen",
|
|
16
|
+
processingLabel: "Procesando...",
|
|
17
|
+
resultsTitle: "Imágenes Optimizadas",
|
|
18
|
+
originalSizeLabel: "Tamaño Original",
|
|
19
|
+
newSizeLabel: "Nuevo Tamaño",
|
|
20
|
+
reductionLabel: "Ahorro",
|
|
21
|
+
downloadBtn: "Descargar",
|
|
22
|
+
addMoreBtn: "Añadir más"
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const faq: ImageCompressorLocaleContent['faq'] = [
|
|
26
|
+
{
|
|
27
|
+
question: "¿Cómo funciona la compresión sin pérdida?",
|
|
28
|
+
answer: "Utilizamos algoritmos que eliminan metadatos innecesarios y optimizan la codificación de los píxeles. Al elegir WebP, se utiliza una tecnología de compresión más avanzada que la de los formatos tradicionales.",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
question: "¿Mis imágenes se suben a algún servidor?",
|
|
32
|
+
answer: "No. Todo el procesamiento ocurre 100% en tu navegador (Client-Side). Tus fotos nunca salen de tu ordenador, garantizando privacidad absoluta.",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
question: "¿Por qué debería convertir a WebP?",
|
|
36
|
+
answer: "WebP es el formato estándar moderno para la web. Ofrece una calidad superior a JPG y PNG con un peso hasta un 30% menor, lo que acelera el tiempo de carga de las páginas.",
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
const howTo: ImageCompressorLocaleContent['howTo'] = [
|
|
41
|
+
{
|
|
42
|
+
name: "Carga la imagen",
|
|
43
|
+
text: "Sube el archivo que desees comprimir (JPG, PNG o WebP).",
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: "Ajusta la calidad",
|
|
47
|
+
text: "Usa el deslizador para encontrar el equilibrio perfecto entre peso de archivo y calidad visual (recomendado: 75-85%).",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: "Redimensiona (opcional)",
|
|
51
|
+
text: "Si la imagen es muy grande, puedes indicar un ancho máximo para reducir su resolución.",
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: "Descarga el resultado",
|
|
55
|
+
text: "Pulsa el botón de descargar para obtener tu imagen optimizada lista para usar.",
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
|
|
59
|
+
const bibliography: ImageCompressorLocaleContent['bibliography'] = [
|
|
60
|
+
{
|
|
61
|
+
name: "WebP: An Image Format for the Web",
|
|
62
|
+
url: "https://developers.google.com/speed/webp",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: "La importancia de la optimización de imágenes para SEO",
|
|
66
|
+
url: "https://developers.google.com/search/docs/appearance/google-images",
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
const seo: ImageCompressorLocaleContent['seo'] = [
|
|
71
|
+
{
|
|
72
|
+
type: 'summary',
|
|
73
|
+
title: 'Optimización Profesional de Imágenes Web',
|
|
74
|
+
items: [
|
|
75
|
+
'Compresión inteligente JPG, PNG y WebP',
|
|
76
|
+
'Reduce peso 50-80% manteniendo calidad visual',
|
|
77
|
+
'Procesamiento 100% local - privacidad garantizada',
|
|
78
|
+
'Mejora Core Web Vitals y posicionamiento SEO'
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
{ type: 'title', text: 'Optimización de Imágenes: Velocidad Web y Core Web Vitals', level: 2 },
|
|
82
|
+
{ type: 'paragraph', html: 'En la era de la inmediatez digital, una web lenta pierde usuarios. Las imágenes sin optimizar representan el 60-70% del peso total de una página web. Optimizarlas es el primer paso para mejorar tus métricas Google (LCP, CLS) y tu posicionamiento en resultados de búsqueda.' },
|
|
83
|
+
|
|
84
|
+
{ type: 'stats', items: [
|
|
85
|
+
{ value: '50-80%', label: 'Reducción Típica de Peso', icon: 'mdi:trending-down' },
|
|
86
|
+
{ value: '100%', label: 'Privacidad Local', icon: 'mdi:lock' },
|
|
87
|
+
{ value: '+30%', label: 'Más Rápido que JPG', icon: 'mdi:speedometer' }
|
|
88
|
+
], columns: 3 },
|
|
89
|
+
|
|
90
|
+
{ type: 'title', text: 'Formatos de Compresión Explicados', level: 3 },
|
|
91
|
+
{ type: 'table', headers: ['Formato', 'Compresión', 'Casos de Uso', 'Compatibilidad'], rows: [
|
|
92
|
+
['JPEG', 'Lossy 50-90%', 'Fotos de cámara, contenido editorial', 'Universal (100%)'],
|
|
93
|
+
['PNG', 'Lossless 30-50%', 'Gráficos, logos, transparencias', 'Universal (100%)'],
|
|
94
|
+
['WebP', 'Lossy/Lossless 25-35% más', 'Web moderna, redes sociales', '95% navegadores modernos'],
|
|
95
|
+
['AVIF', 'Lossy/Lossless mejora 20%', 'Siguiente generación web', 'Navegadores nuevos solo']
|
|
96
|
+
] },
|
|
97
|
+
|
|
98
|
+
{ type: 'card', title: 'Por qué WebP es el Futuro', html: 'Google desarrolló WebP específicamente para la web. Ofrece compresión superior a JPEG y PNG, manteniendo o mejorando la calidad visual. Es 25-35% más pequeño que equivalentes en JPEG. Los navegadores modernos lo soportan al 95%.' },
|
|
99
|
+
|
|
100
|
+
{ type: 'title', text: 'Compresión Con Pérdida vs Sin Pérdida', level: 3 },
|
|
101
|
+
{ type: 'comparative', items: [
|
|
102
|
+
{
|
|
103
|
+
title: 'Compresión Con Pérdida (Lossy)',
|
|
104
|
+
description: 'JPG, WebP - Reduce información visual imperceptible',
|
|
105
|
+
icon: 'mdi:compress',
|
|
106
|
+
points: [
|
|
107
|
+
'Reduce 70-90% del peso original',
|
|
108
|
+
'Imperceptible al ojo humano si se mantiene >75% calidad',
|
|
109
|
+
'Ideal para fotografía realista',
|
|
110
|
+
'No recomendado para logos o texto nítido'
|
|
111
|
+
],
|
|
112
|
+
highlight: true
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
title: 'Compresión Sin Pérdida (Lossless)',
|
|
116
|
+
description: 'PNG, WebP lossless - Mantiene 100% de datos visuales',
|
|
117
|
+
icon: 'mdi:shield',
|
|
118
|
+
points: [
|
|
119
|
+
'Reduce 20-50% del peso',
|
|
120
|
+
'Calidad perfecta, sin degradación',
|
|
121
|
+
'Ideal para gráficos, logos, transparencias',
|
|
122
|
+
'Archivos más pesados que Lossy'
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
], columns: 2 },
|
|
126
|
+
|
|
127
|
+
{ type: 'title', text: 'Impacto en SEO y Conversión', level: 3 },
|
|
128
|
+
{ type: 'list', items: [
|
|
129
|
+
'<strong>Core Web Vitals:</strong> Google penaliza sitios lentos. Imágenes optimizadas mejoran LCP (Largest Contentful Paint) directamente.',
|
|
130
|
+
'<strong>Tasa de Rebote:</strong> Cada segundo de retraso = 7% más rebote. Imágenes más rápidas = menos usuarios que se van.',
|
|
131
|
+
'<strong>Ranking de Búsqueda:</strong> Velocidad es factor de ranking. Optimizar imágenes impulsa posicionamiento.',
|
|
132
|
+
'<strong>Conversión:</strong> Tiempos de carga más rápidos = más conversiones. Estudios muestran +10% conversión con optimización.'
|
|
133
|
+
], icon: 'mdi:check' },
|
|
134
|
+
|
|
135
|
+
{ type: 'proscons', items: [
|
|
136
|
+
{
|
|
137
|
+
pro: 'Privacidad total: procesamiento 100% local, sin servidores en la nube',
|
|
138
|
+
con: 'Requiere navegador con soporte Canvas API (es universal)'
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
pro: 'WebP es 25-35% más pequeño que JPEG con igual calidad',
|
|
142
|
+
con: 'Safari e IE viejos no soportan WebP (fallback disponible)'
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
pro: 'Procesamiento instantáneo de múltiples imágenes',
|
|
146
|
+
con: 'Imágenes muy grandes (>50MB) pueden requerir espera'
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
pro: 'Redimensionamiento opcional: reduce resolución además de compresión',
|
|
150
|
+
con: 'Redimensionar pierde información - mejor optimizar resolución en origen'
|
|
151
|
+
}
|
|
152
|
+
], proTitle: 'Ventajas', conTitle: 'Limitaciones' },
|
|
153
|
+
|
|
154
|
+
{ type: 'diagnostic', variant: 'warning', title: 'Cuidado: Compresión Excesiva Degrada', icon: 'mdi:alert', badge: 'Calidad', html: 'Mantén calidad >75% para fotografía y >85% para contenido editorial. Por debajo, los artefactos de compresión (motas, bandas) se hacen visibles. Una imagen que se ve bien en thumbnail puede verse mal en grande.' },
|
|
155
|
+
|
|
156
|
+
{ type: 'glossary', items: [
|
|
157
|
+
{
|
|
158
|
+
term: 'Compresión Lossy',
|
|
159
|
+
definition: 'Elimina datos visuales que el ojo humano percibe como "ruido". Ideal para fotografía. JPEG, WebP lossy, HEIC son lossy.'
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
term: 'Compresión Lossless',
|
|
163
|
+
definition: 'Reduce tamaño sin perder información visual. PNG y WebP lossless. Ideal para gráficos, logos, transparencias.'
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
term: 'Core Web Vitals (Google)',
|
|
167
|
+
definition: 'Métricas de experiencia de usuario: LCP (velocidad carga), FID (latencia interacción), CLS (estabilidad visual). Afectan ranking SEO.'
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
term: 'WebP',
|
|
171
|
+
definition: 'Formato desarrollado por Google. 25-35% más pequeño que JPEG. Soportado por 95% navegadores modernos (todos excepto IE).'
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
term: 'Artefactos de Compresión',
|
|
175
|
+
definition: 'Defectos visuales causados por compresión excesiva: motas, bandas de color, bordes borrosos. Imperceptibles <75% calidad.'
|
|
176
|
+
}
|
|
177
|
+
] },
|
|
178
|
+
|
|
179
|
+
{ type: 'message', title: 'Optimización Web Profesional', ariaLabel: 'Información sobre optimización de imágenes para SEO', html: 'No es vanidad técnica: comprimir imágenes es una inversión directa en experiencia de usuario y ranking en Google. Cada kilobyte cuenta en móviles. Nuestra herramienta convierte lo que antes requería software profesional ($$$) en un proceso gratuito de 3 clics.' },
|
|
180
|
+
|
|
181
|
+
{ type: 'title', text: 'Preparado para la Web Moderna', level: 3 },
|
|
182
|
+
{ type: 'paragraph', html: 'Utiliza compresión inteligente y formato WebP para que tu presencia online sea rápida, responsiva y competitiva en búsqueda. Calidad profesional, peso mínimo, carga instantánea.' }
|
|
183
|
+
];
|
|
184
|
+
|
|
185
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
186
|
+
'@context': 'https://schema.org',
|
|
187
|
+
'@type': 'FAQPage',
|
|
188
|
+
mainEntity: faq.map((item) => ({
|
|
189
|
+
'@type': 'Question',
|
|
190
|
+
name: item.question,
|
|
191
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
192
|
+
})),
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
const howToSchema: WithContext<HowTo> = {
|
|
196
|
+
'@context': 'https://schema.org',
|
|
197
|
+
'@type': 'HowTo',
|
|
198
|
+
name: title,
|
|
199
|
+
description,
|
|
200
|
+
step: howTo.map((step) => ({
|
|
201
|
+
'@type': 'HowToStep',
|
|
202
|
+
name: step.name,
|
|
203
|
+
text: step.text,
|
|
204
|
+
})),
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
208
|
+
'@context': 'https://schema.org',
|
|
209
|
+
'@type': 'SoftwareApplication',
|
|
210
|
+
name: title,
|
|
211
|
+
description,
|
|
212
|
+
applicationCategory: 'UtilitiesApplication',
|
|
213
|
+
operatingSystem: 'Web',
|
|
214
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
215
|
+
inLanguage: 'es',
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
export const content: ImageCompressorLocaleContent = {
|
|
219
|
+
slug,
|
|
220
|
+
title,
|
|
221
|
+
description,
|
|
222
|
+
ui,
|
|
223
|
+
seo,
|
|
224
|
+
faq,
|
|
225
|
+
faqTitle: 'Preguntas frecuentes sobre compresión web',
|
|
226
|
+
bibliography,
|
|
227
|
+
bibliographyTitle: 'Recursos técnicos sobre formatos de imagen',
|
|
228
|
+
howTo,
|
|
229
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
230
|
+
};
|