@jjlmoya/utils-converters 1.24.0 → 1.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/category/i18n/de.ts +1 -1
- package/src/category/i18n/en.ts +1 -1
- package/src/category/i18n/fr.ts +1 -1
- package/src/category/i18n/id.ts +1 -1
- package/src/category/i18n/it.ts +1 -1
- package/src/category/i18n/nl.ts +1 -1
- package/src/category/i18n/pl.ts +1 -1
- package/src/category/i18n/pt.ts +1 -1
- package/src/category/i18n/sv.ts +1 -1
- package/src/entries.ts +6 -0
- package/src/tests/bibliography_wellformed_export.test.ts +46 -0
- package/src/tests/category_seo_quality.test.ts +74 -0
- package/src/tests/faq_count.test.ts +1 -1
- package/src/tests/no_h1_in_components.test.ts +1 -1
- package/src/tests/seo_parity.test.ts +2 -2
- package/src/tests/seo_wellformed_export.test.ts +65 -0
- package/src/tests/tool_validation.test.ts +15 -15
- package/src/tool/avifAJpg/i18n/en.ts +164 -164
- package/src/tool/avifAJpg/i18n/es.ts +164 -164
- package/src/tool/avifAJpg/i18n/fr.ts +164 -164
- package/src/tool/avifAJpg/i18n/ja.ts +166 -166
- package/src/tool/avifAJpg/i18n/ko.ts +166 -166
- package/src/tool/avifAJpg/i18n/zh.ts +166 -166
- package/src/tool/avifAJpg/seo.astro +15 -15
- package/src/tool/avifAPng/i18n/en.ts +164 -164
- package/src/tool/avifAPng/i18n/es.ts +164 -164
- package/src/tool/avifAPng/i18n/fr.ts +164 -164
- package/src/tool/avifAPng/i18n/ja.ts +166 -166
- package/src/tool/avifAPng/i18n/ko.ts +166 -166
- package/src/tool/avifAPng/i18n/zh.ts +166 -166
- package/src/tool/avifAPng/seo.astro +15 -15
- package/src/tool/avifAWebp/i18n/en.ts +164 -164
- package/src/tool/avifAWebp/i18n/es.ts +164 -164
- package/src/tool/avifAWebp/i18n/fr.ts +164 -164
- package/src/tool/avifAWebp/i18n/ja.ts +166 -166
- package/src/tool/avifAWebp/i18n/ko.ts +166 -166
- package/src/tool/avifAWebp/i18n/zh.ts +166 -166
- package/src/tool/avifAWebp/seo.astro +15 -15
- package/src/tool/bmpAJpg/i18n/en.ts +164 -164
- package/src/tool/bmpAJpg/i18n/es.ts +164 -164
- package/src/tool/bmpAJpg/i18n/fr.ts +164 -164
- package/src/tool/bmpAJpg/i18n/ja.ts +166 -166
- package/src/tool/bmpAJpg/i18n/ko.ts +166 -166
- package/src/tool/bmpAJpg/i18n/zh.ts +166 -166
- package/src/tool/bmpAJpg/seo.astro +15 -15
- package/src/tool/bmpAPng/i18n/en.ts +164 -164
- package/src/tool/bmpAPng/i18n/es.ts +164 -164
- package/src/tool/bmpAPng/i18n/fr.ts +164 -164
- package/src/tool/bmpAPng/i18n/ja.ts +165 -165
- package/src/tool/bmpAPng/i18n/ko.ts +165 -165
- package/src/tool/bmpAPng/i18n/zh.ts +165 -165
- package/src/tool/bmpAPng/seo.astro +15 -15
- package/src/tool/bmpAWebp/i18n/en.ts +164 -164
- package/src/tool/bmpAWebp/i18n/es.ts +164 -164
- package/src/tool/bmpAWebp/i18n/fr.ts +164 -164
- package/src/tool/bmpAWebp/i18n/ja.ts +166 -166
- package/src/tool/bmpAWebp/i18n/ko.ts +166 -166
- package/src/tool/bmpAWebp/i18n/zh.ts +166 -166
- package/src/tool/bmpAWebp/seo.astro +15 -15
- package/src/tool/gifAJpg/i18n/en.ts +164 -164
- package/src/tool/gifAJpg/i18n/es.ts +164 -164
- package/src/tool/gifAJpg/i18n/fr.ts +164 -164
- package/src/tool/gifAJpg/i18n/ja.ts +166 -166
- package/src/tool/gifAJpg/i18n/ko.ts +166 -166
- package/src/tool/gifAJpg/i18n/zh.ts +166 -166
- package/src/tool/gifAJpg/seo.astro +15 -15
- package/src/tool/gifAPng/i18n/en.ts +164 -164
- package/src/tool/gifAPng/i18n/es.ts +164 -164
- package/src/tool/gifAPng/i18n/fr.ts +164 -164
- package/src/tool/gifAPng/i18n/ja.ts +166 -166
- package/src/tool/gifAPng/i18n/ko.ts +166 -166
- package/src/tool/gifAPng/i18n/zh.ts +166 -166
- package/src/tool/gifAPng/seo.astro +15 -15
- package/src/tool/gifAWebp/i18n/en.ts +164 -164
- package/src/tool/gifAWebp/i18n/es.ts +164 -164
- package/src/tool/gifAWebp/i18n/fr.ts +164 -164
- package/src/tool/gifAWebp/i18n/ja.ts +166 -166
- package/src/tool/gifAWebp/i18n/ko.ts +166 -166
- package/src/tool/gifAWebp/i18n/zh.ts +166 -166
- package/src/tool/gifAWebp/seo.astro +15 -15
- package/src/tool/imagenBase64/i18n/en.ts +154 -154
- package/src/tool/imagenBase64/i18n/es.ts +154 -154
- package/src/tool/imagenBase64/i18n/fr.ts +154 -154
- package/src/tool/imagenBase64/seo.astro +15 -15
- package/src/tool/jpgAIco/seo.astro +15 -15
- package/src/tool/jpgAPng/i18n/en.ts +164 -164
- package/src/tool/jpgAPng/i18n/es.ts +164 -164
- package/src/tool/jpgAPng/i18n/fr.ts +164 -164
- package/src/tool/jpgAPng/i18n/ja.ts +166 -166
- package/src/tool/jpgAPng/i18n/ko.ts +166 -166
- package/src/tool/jpgAPng/i18n/zh.ts +166 -166
- package/src/tool/jpgAPng/seo.astro +15 -15
- package/src/tool/jpgAWebp/i18n/en.ts +164 -164
- package/src/tool/jpgAWebp/i18n/es.ts +164 -164
- package/src/tool/jpgAWebp/i18n/fr.ts +164 -164
- package/src/tool/jpgAWebp/seo.astro +15 -15
- package/src/tool/pngAIco/seo.astro +15 -15
- package/src/tool/pngAJpg/i18n/de.ts +21 -21
- package/src/tool/pngAJpg/i18n/es.ts +177 -177
- package/src/tool/pngAJpg/i18n/fr.ts +137 -137
- package/src/tool/pngAJpg/i18n/id.ts +89 -89
- package/src/tool/pngAJpg/i18n/it.ts +89 -89
- package/src/tool/pngAJpg/i18n/ko.ts +177 -177
- package/src/tool/pngAJpg/i18n/nl.ts +20 -20
- package/src/tool/pngAJpg/i18n/pl.ts +89 -89
- package/src/tool/pngAJpg/i18n/pt.ts +89 -89
- package/src/tool/pngAJpg/i18n/ru.ts +177 -177
- package/src/tool/pngAJpg/i18n/sv.ts +89 -89
- package/src/tool/pngAJpg/i18n/tr.ts +89 -89
- package/src/tool/pngAJpg/seo.astro +15 -15
- package/src/tool/pngAWebp/i18n/en.ts +164 -164
- package/src/tool/pngAWebp/i18n/es.ts +164 -164
- package/src/tool/pngAWebp/i18n/fr.ts +164 -164
- package/src/tool/pngAWebp/seo.astro +15 -15
- package/src/tool/svgAJpg/i18n/fr.ts +164 -164
- package/src/tool/svgAJpg/seo.astro +15 -15
- package/src/tool/svgAPng/i18n/fr.ts +164 -164
- package/src/tool/svgAPng/seo.astro +15 -15
- package/src/tool/webpAIco/seo.astro +15 -15
- package/src/tool/webpAJpg/seo.astro +15 -15
- package/src/tool/webpAPng/bibliography.ts +13 -13
- package/src/tool/webpAPng/i18n/de.ts +166 -166
- package/src/tool/webpAPng/i18n/es.ts +171 -171
- package/src/tool/webpAPng/i18n/fr.ts +166 -166
- package/src/tool/webpAPng/i18n/id.ts +166 -166
- package/src/tool/webpAPng/i18n/it.ts +166 -166
- package/src/tool/webpAPng/i18n/nl.ts +166 -166
- package/src/tool/webpAPng/i18n/pl.ts +166 -166
- package/src/tool/webpAPng/i18n/pt.ts +166 -166
- package/src/tool/webpAPng/i18n/ru.ts +166 -166
- package/src/tool/webpAPng/i18n/sv.ts +166 -166
- package/src/tool/webpAPng/i18n/tr.ts +167 -167
- package/src/tool/webpAPng/seo.astro +15 -15
|
@@ -1,168 +1,168 @@
|
|
|
1
1
|
import { bibliography } from '../bibliography';
|
|
2
|
-
import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
|
|
2
|
+
import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
|
|
3
3
|
import { generateSchemas } from '../../../shared/logic/schemas';
|
|
4
|
-
import type { GifAJpgLocaleContent } from '../index';
|
|
5
|
-
|
|
6
|
-
const slug = 'convertidor-gif-a-jpg';
|
|
7
|
-
const title = 'Convertir GIF a JPG Online';
|
|
8
|
-
const description =
|
|
9
|
-
'Extrae el primer fotograma de tus GIF y conviértelo a JPG. Sin servidor. Procesado local en tu navegador. Gratis e ilimitado.';
|
|
10
|
-
|
|
11
|
-
const ui: ImageConverterUI = {
|
|
12
|
-
dragText: 'Arrastra archivos GIF...',
|
|
13
|
-
convertText: 'Para convertirlos a JPG al instante',
|
|
14
|
-
selectFiles: 'Seleccionar archivos',
|
|
15
|
-
processedFiles: 'Archivos procesados',
|
|
16
|
-
downloadAll: 'Descargar Todo (.zip)',
|
|
4
|
+
import type { GifAJpgLocaleContent } from '../index';
|
|
5
|
+
|
|
6
|
+
const slug = 'convertidor-gif-a-jpg';
|
|
7
|
+
const title = 'Convertir GIF a JPG Online';
|
|
8
|
+
const description =
|
|
9
|
+
'Extrae el primer fotograma de tus GIF y conviértelo a JPG. Sin servidor. Procesado local en tu navegador. Gratis e ilimitado.';
|
|
10
|
+
|
|
11
|
+
const ui: ImageConverterUI = {
|
|
12
|
+
dragText: 'Arrastra archivos GIF...',
|
|
13
|
+
convertText: 'Para convertirlos a JPG al instante',
|
|
14
|
+
selectFiles: 'Seleccionar archivos',
|
|
15
|
+
processedFiles: 'Archivos procesados',
|
|
16
|
+
downloadAll: 'Descargar Todo (.zip)',
|
|
17
17
|
pending: 'Pendiente',
|
|
18
|
-
bibliographyTitle: 'Referencias Bibliográficas',
|
|
19
|
-
faqTitle: 'Preguntas Frecuentes',
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const faq: GifAJpgLocaleContent['faq'] = [
|
|
23
|
-
{
|
|
24
|
-
question: '¿Qué ocurre con las animaciones cuando paso a JPG?',
|
|
25
|
-
answer:
|
|
26
|
-
'El formato JPG es estrictamente estático y no soporta múltiples fotogramas. Nuestro convertidor extrae únicamente la primera imagen o fotograma que aparece en la secuencia del GIF.',
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
question: '¿Perderé algún efecto especial o fondo transparente?',
|
|
30
|
-
answer:
|
|
31
|
-
'Sí, es el comportamiento natural del estándar JPG. Si subes un GIF con fondo libre, insertamos automáticamente una capa sólida blanca subyacente para evitar colores corruptos.',
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
question: '¿Puedo extraer fotos JPG de un GIF sin que la web guarde mi contenido?',
|
|
35
|
-
answer:
|
|
36
|
-
'Absolutamente sí. La herramienta es una App Web basada en el Canvas del HTML5. Toda la decodificación la ejecuta el procesador de tu propio dispositivo físico.',
|
|
37
|
-
},
|
|
38
|
-
];
|
|
39
|
-
|
|
40
|
-
const howTo: GifAJpgLocaleContent['howTo'] = [
|
|
41
|
-
{
|
|
42
|
-
name: 'Arrastra Archivos Pesados Movibles',
|
|
43
|
-
text: 'Sitúa o arrastra desde tu carpeta ese GIF hasta arrojarlo a nuestra caja de procesamiento.',
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
name: 'Cálculo Limpio de Fotograma Primero',
|
|
47
|
-
text: 'En fracciones de tiempo se extrae la animación creando el JPG blanco sólido sin contactar servidores.',
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
name: 'Captúralos Empaquetados en Masa ZIP',
|
|
51
|
-
text: 'Descarga a los botones o usando el Zip si procesaste un centenar largo de archivos.',
|
|
52
|
-
},
|
|
53
|
-
];
|
|
54
|
-
|
|
55
|
-
const seo: GifAJpgLocaleContent['seo'] = [
|
|
56
|
-
{
|
|
57
|
-
type: 'title',
|
|
58
|
-
text: 'Convertidor de GIF a JPG: Extrae Fotogramas como Imágenes de Alta Calidad',
|
|
59
|
-
level: 2,
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
type: 'paragraph',
|
|
63
|
-
html: 'Los archivos GIF llevan décadas dominando el mundo de las animaciones cortas en internet. Sin embargo, su naturaleza animada los hace completamente inútiles como miniatura, vista previa para redes sociales o imagen para documentos. Cuando necesitas extraer un fotograma concreto de un GIF y convertirlo en una imagen estática de alta calidad, la conversión a JPG es la solución más práctica y compatible.',
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
type: 'title',
|
|
67
|
-
text: '¿GIF o JPG? Formatos con propósitos opuestos',
|
|
68
|
-
level: 3,
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
type: 'paragraph',
|
|
72
|
-
html: 'El GIF (Graphics Interchange Format) fue diseñado en 1987 con una limitación severa que persiste hoy: solo puede representar 256 colores por fotograma. Esta restricción técnica no importaba para animaciones simples con paletas reducidas, pero la convierte en un formato visualmente pobre para capturas de fotografía real. El JPG, en cambio, puede renderizar millones de colores con algoritmos de compresión perceptual avanzados.',
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
type: 'paragraph',
|
|
76
|
-
html: 'Extraer un fotograma de un GIF y guardarlo como JPG tiene múltiples aplicaciones: generar thumbnails para reproductores de video, crear previsualizaciones para plataformas de gestión de contenidos, obtener imágenes estáticas para presentaciones o simplemente archivar un momento visual de una animación compleja. El JPG resultante será mucho más ligero que el GIF original y universalmente compatible.',
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
type: 'title',
|
|
80
|
-
text: 'Comparativa de Arquitectura: Local vs Nube',
|
|
81
|
-
level: 3,
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
type: 'comparative',
|
|
85
|
-
items: [
|
|
86
|
-
{
|
|
87
|
-
title: 'Convertidores Cloud',
|
|
88
|
-
description: 'Herramientas que suben tus archivos a un servidor remoto para procesarlos.',
|
|
89
|
-
icon: 'mdi:cloud-upload',
|
|
90
|
-
pointIcon: 'mdi:close-circle-outline',
|
|
91
|
-
points: [
|
|
92
|
-
'Tus GIFs viajan por internet a servidores de terceros',
|
|
93
|
-
'Latencia de red en subida y bajada',
|
|
94
|
-
'Límites de tamaño y de archivos por sesión',
|
|
95
|
-
'Riesgo de retención de datos en servidores ajenos',
|
|
96
|
-
],
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
title: 'Nuestra Arquitectura Local',
|
|
100
|
-
description: 'Procesamiento directo en tu hardware mediante tecnología Vanilla JS.',
|
|
101
|
-
icon: 'mdi:laptop-mac',
|
|
102
|
-
highlight: true,
|
|
103
|
-
points: [
|
|
104
|
-
'El GIF nunca abandona tu dispositivo',
|
|
105
|
-
'Velocidad instantánea sin espera de red',
|
|
106
|
-
'Sin límites de tamaño ni de archivos',
|
|
107
|
-
'Privacidad total: 0 bytes enviados al exterior',
|
|
108
|
-
],
|
|
109
|
-
},
|
|
110
|
-
],
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
type: 'title',
|
|
114
|
-
text: 'Cómo funciona la extracción técnica del fotograma',
|
|
115
|
-
level: 3,
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
type: 'paragraph',
|
|
119
|
-
html: 'La conversión local se apoya en la potencia del Canvas API de HTML5. Cuando cargas un GIF, el navegador lo decodifica en memoria como un elemento Image nativo. Al renderizarlo sobre un canvas invisible, el motor gráfico del navegador captura automáticamente el primer fotograma de la secuencia de animación.',
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
type: 'paragraph',
|
|
123
|
-
html: 'Dado que el formato JPG no soporta transparencias, nuestro algoritmo aplica un fondo blanco sólido antes de exportar. El método <code>toDataURL(\'image/jpeg\')</code> del canvas genera el flujo de bytes JPG directamente en la RAM de tu ordenador, sin ninguna conexión de red. El archivo resultante se descarga inmediatamente a tu dispositivo.',
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
type: 'tip',
|
|
127
|
-
title: 'Paleta de colores limitada del GIF',
|
|
128
|
-
html: 'El GIF solo puede contener 256 colores por fotograma. El JPG extraído heredará esa paleta reducida del original: si el GIF tenía degradados o fotografías, puede verse con cierta posterización. Para obtener el mejor resultado, usa GIFs con colores simples o ilustraciones.',
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
type: 'title',
|
|
132
|
-
text: 'Casos de uso y compatibilidad del JPG resultante',
|
|
133
|
-
level: 3,
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
type: 'list',
|
|
137
|
-
icon: 'mdi:check-circle',
|
|
138
|
-
items: [
|
|
139
|
-
'Thumbnails y vistas previas para plataformas de video y CMS.',
|
|
140
|
-
'Imágenes de portada para publicaciones en redes sociales.',
|
|
141
|
-
'Inserción en documentos Word, PowerPoint o PDF.',
|
|
142
|
-
'Archivos de presentación y materiales de marketing.',
|
|
143
|
-
'Compatibilidad universal con visores en Windows, macOS y móviles.',
|
|
144
|
-
],
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
type: 'title',
|
|
148
|
-
text: 'Conclusión: el fotograma que vale más que la animación',
|
|
149
|
-
level: 3,
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
type: 'paragraph',
|
|
153
|
-
html: 'Un GIF animado de 2 MB puede producir un JPG del primer fotograma de apenas 50-200 KB, dependiendo de la resolución. Nuestra herramienta realiza esta conversión de forma instantánea, privada y sin límites, directamente en tu navegador. Sin servidores, sin cuentas, sin esperas.',
|
|
154
|
-
},
|
|
155
|
-
];
|
|
156
|
-
|
|
18
|
+
bibliographyTitle: 'Referencias Bibliográficas',
|
|
19
|
+
faqTitle: 'Preguntas Frecuentes',
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const faq: GifAJpgLocaleContent['faq'] = [
|
|
23
|
+
{
|
|
24
|
+
question: '¿Qué ocurre con las animaciones cuando paso a JPG?',
|
|
25
|
+
answer:
|
|
26
|
+
'El formato JPG es estrictamente estático y no soporta múltiples fotogramas. Nuestro convertidor extrae únicamente la primera imagen o fotograma que aparece en la secuencia del GIF.',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
question: '¿Perderé algún efecto especial o fondo transparente?',
|
|
30
|
+
answer:
|
|
31
|
+
'Sí, es el comportamiento natural del estándar JPG. Si subes un GIF con fondo libre, insertamos automáticamente una capa sólida blanca subyacente para evitar colores corruptos.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
question: '¿Puedo extraer fotos JPG de un GIF sin que la web guarde mi contenido?',
|
|
35
|
+
answer:
|
|
36
|
+
'Absolutamente sí. La herramienta es una App Web basada en el Canvas del HTML5. Toda la decodificación la ejecuta el procesador de tu propio dispositivo físico.',
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
const howTo: GifAJpgLocaleContent['howTo'] = [
|
|
41
|
+
{
|
|
42
|
+
name: 'Arrastra Archivos Pesados Movibles',
|
|
43
|
+
text: 'Sitúa o arrastra desde tu carpeta ese GIF hasta arrojarlo a nuestra caja de procesamiento.',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'Cálculo Limpio de Fotograma Primero',
|
|
47
|
+
text: 'En fracciones de tiempo se extrae la animación creando el JPG blanco sólido sin contactar servidores.',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'Captúralos Empaquetados en Masa ZIP',
|
|
51
|
+
text: 'Descarga a los botones o usando el Zip si procesaste un centenar largo de archivos.',
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
const seo: GifAJpgLocaleContent['seo'] = [
|
|
56
|
+
{
|
|
57
|
+
type: 'title',
|
|
58
|
+
text: 'Convertidor de GIF a JPG: Extrae Fotogramas como Imágenes de Alta Calidad',
|
|
59
|
+
level: 2,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
type: 'paragraph',
|
|
63
|
+
html: 'Los archivos GIF llevan décadas dominando el mundo de las animaciones cortas en internet. Sin embargo, su naturaleza animada los hace completamente inútiles como miniatura, vista previa para redes sociales o imagen para documentos. Cuando necesitas extraer un fotograma concreto de un GIF y convertirlo en una imagen estática de alta calidad, la conversión a JPG es la solución más práctica y compatible.',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
type: 'title',
|
|
67
|
+
text: '¿GIF o JPG? Formatos con propósitos opuestos',
|
|
68
|
+
level: 3,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
type: 'paragraph',
|
|
72
|
+
html: 'El GIF (Graphics Interchange Format) fue diseñado en 1987 con una limitación severa que persiste hoy: solo puede representar 256 colores por fotograma. Esta restricción técnica no importaba para animaciones simples con paletas reducidas, pero la convierte en un formato visualmente pobre para capturas de fotografía real. El JPG, en cambio, puede renderizar millones de colores con algoritmos de compresión perceptual avanzados.',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
type: 'paragraph',
|
|
76
|
+
html: 'Extraer un fotograma de un GIF y guardarlo como JPG tiene múltiples aplicaciones: generar thumbnails para reproductores de video, crear previsualizaciones para plataformas de gestión de contenidos, obtener imágenes estáticas para presentaciones o simplemente archivar un momento visual de una animación compleja. El JPG resultante será mucho más ligero que el GIF original y universalmente compatible.',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
type: 'title',
|
|
80
|
+
text: 'Comparativa de Arquitectura: Local vs Nube',
|
|
81
|
+
level: 3,
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
type: 'comparative',
|
|
85
|
+
items: [
|
|
86
|
+
{
|
|
87
|
+
title: 'Convertidores Cloud',
|
|
88
|
+
description: 'Herramientas que suben tus archivos a un servidor remoto para procesarlos.',
|
|
89
|
+
icon: 'mdi:cloud-upload',
|
|
90
|
+
pointIcon: 'mdi:close-circle-outline',
|
|
91
|
+
points: [
|
|
92
|
+
'Tus GIFs viajan por internet a servidores de terceros',
|
|
93
|
+
'Latencia de red en subida y bajada',
|
|
94
|
+
'Límites de tamaño y de archivos por sesión',
|
|
95
|
+
'Riesgo de retención de datos en servidores ajenos',
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
title: 'Nuestra Arquitectura Local',
|
|
100
|
+
description: 'Procesamiento directo en tu hardware mediante tecnología Vanilla JS.',
|
|
101
|
+
icon: 'mdi:laptop-mac',
|
|
102
|
+
highlight: true,
|
|
103
|
+
points: [
|
|
104
|
+
'El GIF nunca abandona tu dispositivo',
|
|
105
|
+
'Velocidad instantánea sin espera de red',
|
|
106
|
+
'Sin límites de tamaño ni de archivos',
|
|
107
|
+
'Privacidad total: 0 bytes enviados al exterior',
|
|
108
|
+
],
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
type: 'title',
|
|
114
|
+
text: 'Cómo funciona la extracción técnica del fotograma',
|
|
115
|
+
level: 3,
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
type: 'paragraph',
|
|
119
|
+
html: 'La conversión local se apoya en la potencia del Canvas API de HTML5. Cuando cargas un GIF, el navegador lo decodifica en memoria como un elemento Image nativo. Al renderizarlo sobre un canvas invisible, el motor gráfico del navegador captura automáticamente el primer fotograma de la secuencia de animación.',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
type: 'paragraph',
|
|
123
|
+
html: 'Dado que el formato JPG no soporta transparencias, nuestro algoritmo aplica un fondo blanco sólido antes de exportar. El método <code>toDataURL(\'image/jpeg\')</code> del canvas genera el flujo de bytes JPG directamente en la RAM de tu ordenador, sin ninguna conexión de red. El archivo resultante se descarga inmediatamente a tu dispositivo.',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
type: 'tip',
|
|
127
|
+
title: 'Paleta de colores limitada del GIF',
|
|
128
|
+
html: 'El GIF solo puede contener 256 colores por fotograma. El JPG extraído heredará esa paleta reducida del original: si el GIF tenía degradados o fotografías, puede verse con cierta posterización. Para obtener el mejor resultado, usa GIFs con colores simples o ilustraciones.',
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
type: 'title',
|
|
132
|
+
text: 'Casos de uso y compatibilidad del JPG resultante',
|
|
133
|
+
level: 3,
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'list',
|
|
137
|
+
icon: 'mdi:check-circle',
|
|
138
|
+
items: [
|
|
139
|
+
'Thumbnails y vistas previas para plataformas de video y CMS.',
|
|
140
|
+
'Imágenes de portada para publicaciones en redes sociales.',
|
|
141
|
+
'Inserción en documentos Word, PowerPoint o PDF.',
|
|
142
|
+
'Archivos de presentación y materiales de marketing.',
|
|
143
|
+
'Compatibilidad universal con visores en Windows, macOS y móviles.',
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: 'title',
|
|
148
|
+
text: 'Conclusión: el fotograma que vale más que la animación',
|
|
149
|
+
level: 3,
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'paragraph',
|
|
153
|
+
html: 'Un GIF animado de 2 MB puede producir un JPG del primer fotograma de apenas 50-200 KB, dependiendo de la resolución. Nuestra herramienta realiza esta conversión de forma instantánea, privada y sin límites, directamente en tu navegador. Sin servidores, sin cuentas, sin esperas.',
|
|
154
|
+
},
|
|
155
|
+
];
|
|
157
156
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
157
|
+
|
|
158
|
+
export const content: GifAJpgLocaleContent = {
|
|
159
|
+
slug,
|
|
160
|
+
title,
|
|
161
|
+
description,
|
|
162
|
+
ui,
|
|
163
|
+
seo,
|
|
164
|
+
faq,
|
|
165
|
+
bibliography,
|
|
166
|
+
howTo,
|
|
167
|
+
schemas: generateSchemas({ title, description, inLanguage: 'es', faq, howTo }),
|
|
168
|
+
};
|