@jjlmoya/utils-converters 1.1.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 +61 -0
- package/src/category/i18n/en.ts +90 -0
- package/src/category/i18n/es.ts +90 -0
- package/src/category/i18n/fr.ts +90 -0
- package/src/category/index.ts +39 -0
- package/src/category/seo.astro +15 -0
- package/src/components/PreviewNavSidebar.astro +116 -0
- package/src/components/PreviewToolbar.astro +152 -0
- package/src/data.ts +34 -0
- package/src/env.d.ts +5 -0
- package/src/index.ts +39 -0
- package/src/layouts/PreviewLayout.astro +117 -0
- package/src/pages/[locale]/[slug].astro +148 -0
- package/src/pages/[locale].astro +271 -0
- package/src/pages/index.astro +4 -0
- package/src/shared/ImageConverter.astro +237 -0
- package/src/shared/logic/converter.ts +167 -0
- package/src/shared/style.css +258 -0
- package/src/tests/faq_count.test.ts +10 -0
- package/src/tests/mocks/astro_mock.js +2 -0
- package/src/tests/seo_length.test.ts +22 -0
- package/src/tests/tool_validation.test.ts +17 -0
- package/src/tool/avifAJpg/bibliography.astro +14 -0
- package/src/tool/avifAJpg/component.astro +8 -0
- package/src/tool/avifAJpg/i18n/en.ts +123 -0
- package/src/tool/avifAJpg/i18n/es.ts +123 -0
- package/src/tool/avifAJpg/i18n/fr.ts +118 -0
- package/src/tool/avifAJpg/index.ts +29 -0
- package/src/tool/avifAJpg/seo.astro +14 -0
- package/src/tool/avifAPng/bibliography.astro +14 -0
- package/src/tool/avifAPng/component.astro +8 -0
- package/src/tool/avifAPng/i18n/en.ts +118 -0
- package/src/tool/avifAPng/i18n/es.ts +123 -0
- package/src/tool/avifAPng/i18n/fr.ts +118 -0
- package/src/tool/avifAPng/index.ts +29 -0
- package/src/tool/avifAPng/seo.astro +14 -0
- package/src/tool/avifAWebp/bibliography.astro +14 -0
- package/src/tool/avifAWebp/component.astro +8 -0
- package/src/tool/avifAWebp/i18n/en.ts +118 -0
- package/src/tool/avifAWebp/i18n/es.ts +123 -0
- package/src/tool/avifAWebp/i18n/fr.ts +118 -0
- package/src/tool/avifAWebp/index.ts +29 -0
- package/src/tool/avifAWebp/seo.astro +14 -0
- package/src/tool/bmpAJpg/bibliography.astro +14 -0
- package/src/tool/bmpAJpg/component.astro +8 -0
- package/src/tool/bmpAJpg/i18n/en.ts +123 -0
- package/src/tool/bmpAJpg/i18n/es.ts +123 -0
- package/src/tool/bmpAJpg/i18n/fr.ts +118 -0
- package/src/tool/bmpAJpg/index.ts +29 -0
- package/src/tool/bmpAJpg/seo.astro +14 -0
- package/src/tool/bmpAPng/bibliography.astro +14 -0
- package/src/tool/bmpAPng/component.astro +8 -0
- package/src/tool/bmpAPng/i18n/en.ts +123 -0
- package/src/tool/bmpAPng/i18n/es.ts +123 -0
- package/src/tool/bmpAPng/i18n/fr.ts +118 -0
- package/src/tool/bmpAPng/index.ts +29 -0
- package/src/tool/bmpAPng/seo.astro +14 -0
- package/src/tool/bmpAWebp/bibliography.astro +14 -0
- package/src/tool/bmpAWebp/component.astro +8 -0
- package/src/tool/bmpAWebp/i18n/en.ts +118 -0
- package/src/tool/bmpAWebp/i18n/es.ts +123 -0
- package/src/tool/bmpAWebp/i18n/fr.ts +118 -0
- package/src/tool/bmpAWebp/index.ts +29 -0
- package/src/tool/bmpAWebp/seo.astro +14 -0
- package/src/tool/gifAJpg/bibliography.astro +14 -0
- package/src/tool/gifAJpg/component.astro +8 -0
- package/src/tool/gifAJpg/i18n/en.ts +123 -0
- package/src/tool/gifAJpg/i18n/es.ts +123 -0
- package/src/tool/gifAJpg/i18n/fr.ts +118 -0
- package/src/tool/gifAJpg/index.ts +29 -0
- package/src/tool/gifAJpg/seo.astro +14 -0
- package/src/tool/gifAPng/bibliography.astro +14 -0
- package/src/tool/gifAPng/component.astro +8 -0
- package/src/tool/gifAPng/i18n/en.ts +123 -0
- package/src/tool/gifAPng/i18n/es.ts +123 -0
- package/src/tool/gifAPng/i18n/fr.ts +118 -0
- package/src/tool/gifAPng/index.ts +29 -0
- package/src/tool/gifAPng/seo.astro +14 -0
- package/src/tool/gifAWebp/bibliography.astro +14 -0
- package/src/tool/gifAWebp/component.astro +8 -0
- package/src/tool/gifAWebp/i18n/en.ts +123 -0
- package/src/tool/gifAWebp/i18n/es.ts +123 -0
- package/src/tool/gifAWebp/i18n/fr.ts +118 -0
- package/src/tool/gifAWebp/index.ts +29 -0
- package/src/tool/gifAWebp/seo.astro +14 -0
- package/src/tool/imagenBase64/bibliography.astro +14 -0
- package/src/tool/imagenBase64/component.astro +159 -0
- package/src/tool/imagenBase64/i18n/en.ts +137 -0
- package/src/tool/imagenBase64/i18n/es.ts +137 -0
- package/src/tool/imagenBase64/i18n/fr.ts +132 -0
- package/src/tool/imagenBase64/index.ts +43 -0
- package/src/tool/imagenBase64/seo.astro +14 -0
- package/src/tool/imagenBase64/style.css +299 -0
- package/src/tool/jpgAIco/bibliography.astro +14 -0
- package/src/tool/jpgAIco/component.astro +8 -0
- package/src/tool/jpgAIco/i18n/en.ts +123 -0
- package/src/tool/jpgAIco/i18n/es.ts +123 -0
- package/src/tool/jpgAIco/i18n/fr.ts +118 -0
- package/src/tool/jpgAIco/index.ts +29 -0
- package/src/tool/jpgAIco/seo.astro +14 -0
- package/src/tool/jpgAPng/bibliography.astro +14 -0
- package/src/tool/jpgAPng/component.astro +8 -0
- package/src/tool/jpgAPng/i18n/en.ts +128 -0
- package/src/tool/jpgAPng/i18n/es.ts +128 -0
- package/src/tool/jpgAPng/i18n/fr.ts +123 -0
- package/src/tool/jpgAPng/index.ts +29 -0
- package/src/tool/jpgAPng/seo.astro +14 -0
- package/src/tool/jpgAWebp/bibliography.astro +14 -0
- package/src/tool/jpgAWebp/component.astro +8 -0
- package/src/tool/jpgAWebp/i18n/en.ts +118 -0
- package/src/tool/jpgAWebp/i18n/es.ts +123 -0
- package/src/tool/jpgAWebp/i18n/fr.ts +118 -0
- package/src/tool/jpgAWebp/index.ts +29 -0
- package/src/tool/jpgAWebp/seo.astro +14 -0
- package/src/tool/pngAIco/bibliography.astro +14 -0
- package/src/tool/pngAIco/component.astro +8 -0
- package/src/tool/pngAIco/i18n/en.ts +123 -0
- package/src/tool/pngAIco/i18n/es.ts +123 -0
- package/src/tool/pngAIco/i18n/fr.ts +118 -0
- package/src/tool/pngAIco/index.ts +29 -0
- package/src/tool/pngAIco/seo.astro +14 -0
- package/src/tool/pngAJpg/bibliography.astro +14 -0
- package/src/tool/pngAJpg/component.astro +8 -0
- package/src/tool/pngAJpg/i18n/en.ts +133 -0
- package/src/tool/pngAJpg/i18n/es.ts +201 -0
- package/src/tool/pngAJpg/i18n/fr.ts +128 -0
- package/src/tool/pngAJpg/index.ts +29 -0
- package/src/tool/pngAJpg/seo.astro +14 -0
- package/src/tool/pngAWebp/bibliography.astro +14 -0
- package/src/tool/pngAWebp/component.astro +8 -0
- package/src/tool/pngAWebp/i18n/en.ts +127 -0
- package/src/tool/pngAWebp/i18n/es.ts +132 -0
- package/src/tool/pngAWebp/i18n/fr.ts +122 -0
- package/src/tool/pngAWebp/index.ts +29 -0
- package/src/tool/pngAWebp/seo.astro +14 -0
- package/src/tool/svgAJpg/bibliography.astro +14 -0
- package/src/tool/svgAJpg/component.astro +8 -0
- package/src/tool/svgAJpg/i18n/en.ts +118 -0
- package/src/tool/svgAJpg/i18n/es.ts +123 -0
- package/src/tool/svgAJpg/i18n/fr.ts +118 -0
- package/src/tool/svgAJpg/index.ts +29 -0
- package/src/tool/svgAJpg/seo.astro +14 -0
- package/src/tool/svgAPng/bibliography.astro +14 -0
- package/src/tool/svgAPng/component.astro +8 -0
- package/src/tool/svgAPng/i18n/en.ts +123 -0
- package/src/tool/svgAPng/i18n/es.ts +128 -0
- package/src/tool/svgAPng/i18n/fr.ts +118 -0
- package/src/tool/svgAPng/index.ts +29 -0
- package/src/tool/svgAPng/seo.astro +14 -0
- package/src/tool/webpAIco/bibliography.astro +14 -0
- package/src/tool/webpAIco/component.astro +8 -0
- package/src/tool/webpAIco/i18n/en.ts +123 -0
- package/src/tool/webpAIco/i18n/es.ts +123 -0
- package/src/tool/webpAIco/i18n/fr.ts +118 -0
- package/src/tool/webpAIco/index.ts +29 -0
- package/src/tool/webpAIco/seo.astro +14 -0
- package/src/tool/webpAJpg/bibliography.astro +14 -0
- package/src/tool/webpAJpg/component.astro +8 -0
- package/src/tool/webpAJpg/i18n/en.ts +122 -0
- package/src/tool/webpAJpg/i18n/es.ts +127 -0
- package/src/tool/webpAJpg/i18n/fr.ts +122 -0
- package/src/tool/webpAJpg/index.ts +29 -0
- package/src/tool/webpAJpg/seo.astro +14 -0
- package/src/tool/webpAPng/bibliography.astro +14 -0
- package/src/tool/webpAPng/component.astro +8 -0
- package/src/tool/webpAPng/i18n/en.ts +127 -0
- package/src/tool/webpAPng/i18n/es.ts +132 -0
- package/src/tool/webpAPng/i18n/fr.ts +122 -0
- package/src/tool/webpAPng/index.ts +29 -0
- package/src/tool/webpAPng/seo.astro +14 -0
- package/src/tools.ts +70 -0
- package/src/types.ts +69 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { ALL_TOOLS } from '../tools';
|
|
3
|
+
import { convertersCategory } from '../data';
|
|
4
|
+
|
|
5
|
+
describe('Tool Validation Suite', () => {
|
|
6
|
+
describe('Library Registration', () => {
|
|
7
|
+
it('should have 21 tools in ALL_TOOLS', () => {
|
|
8
|
+
expect(ALL_TOOLS.length).toBe(21);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('convertersCategory should be defined', () => {
|
|
12
|
+
expect(convertersCategory).toBeDefined();
|
|
13
|
+
expect(convertersCategory.i18n).toBeDefined();
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { avifAJpg } from './index';
|
|
4
|
+
import type { KnownLocale } from '../../types';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
locale?: KnownLocale;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const { locale = 'es' } = Astro.props;
|
|
11
|
+
const content = await avifAJpg.i18n[locale]?.();
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
{content && <SharedBibliography links={content.bibliography} title={content.ui.bibliographyTitle} />}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
import SharedImageConverter from '../../shared/ImageConverter.astro';
|
|
3
|
+
import type { ImageConverterUI } from '../../shared/ImageConverter.astro';
|
|
4
|
+
|
|
5
|
+
interface Props { ui: ImageConverterUI }
|
|
6
|
+
const { ui } = Astro.props;
|
|
7
|
+
---
|
|
8
|
+
<SharedImageConverter from="avif" to="jpg" ui={ui} />
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import type { WithContext, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
|
|
3
|
+
import type { AvifAJpgLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'avif-to-jpg-converter';
|
|
6
|
+
const title = 'Convert AVIF to JPG Online - No Photo Uploads Required';
|
|
7
|
+
const description =
|
|
8
|
+
'Convert AVIF images to JPG in your browser. No server. 100% private local processing. Free and unlimited.';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: 'Drag AVIF files...',
|
|
12
|
+
convertText: 'To convert them to JPG instantly',
|
|
13
|
+
selectFiles: 'Select files',
|
|
14
|
+
processedFiles: 'Processed files',
|
|
15
|
+
downloadAll: 'Download All (.zip)',
|
|
16
|
+
pending: 'Pending',
|
|
17
|
+
bibliographyTitle: 'Bibliographic References',
|
|
18
|
+
faqTitle: 'Frequently Asked Questions',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const faq: AvifAJpgLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: 'Why convert AVIF to JPG?',
|
|
24
|
+
answer:
|
|
25
|
+
'The AVIF format offers superior compression, but not all programs or viewers support it. Converting it to JPG ensures the image can be viewed on 100% of devices worldwide.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'How do we protect your AVIF images?',
|
|
29
|
+
answer:
|
|
30
|
+
'Your photos never leave your phone or PC. The entire drawing and JPEG encoding process runs in the JavaScript environment of your browser.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'Will I lose quality when going from AVIF to JPG?',
|
|
34
|
+
answer:
|
|
35
|
+
'Our tool processes pixels at standard Canvas quality (0.9 to 0.95), making changes barely perceptible.',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: AvifAJpgLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: 'Drag files or click',
|
|
42
|
+
text: 'Move all the AVIF photos you want to convert to the delimited processing box.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Instant Transformation',
|
|
46
|
+
text: 'Watch in less than a second as AVIF is re-encoded to JPG, replacing any alpha channels with a solid background.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Save or Download ZIP',
|
|
50
|
+
text: 'Download your new JPG images individually or by clicking Download All if you processed in batch.',
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
const bibliography: AvifAJpgLocaleContent['bibliography'] = [
|
|
55
|
+
{
|
|
56
|
+
name: 'AV1 Image File Format (AVIF)',
|
|
57
|
+
url: 'https://aomediacodec.github.io/av1-avif/',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'JPEG Overview',
|
|
61
|
+
url: 'https://en.wikipedia.org/wiki/JPEG',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const seo: AvifAJpgLocaleContent['seo'] = [
|
|
66
|
+
{
|
|
67
|
+
type: 'title',
|
|
68
|
+
text: 'Free Online AVIF to JPG Converter',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
type: 'paragraph',
|
|
72
|
+
html:
|
|
73
|
+
'AVIF (AV1 Image File Format) is the most modern and efficient image format currently available. Developed by the Alliance for Open Media, it offers significantly superior compression to WebP, PNG and JPG. However, its adoption is still limited: many desktop applications, image editors, and especially photo viewers on older devices are unable to open AVIF files.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'paragraph',
|
|
77
|
+
html:
|
|
78
|
+
'Converting AVIF to JPG is the solution to maximize compatibility. JPG has universal support on all devices and operating systems worldwide. By converting from AVIF to JPG, you ensure anyone can view your image without compatibility issues.',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'tip',
|
|
82
|
+
html:
|
|
83
|
+
'If you share images with people using older devices or programs, always convert from AVIF to JPG to ensure they can view them without installing additional software.',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
type: 'paragraph',
|
|
87
|
+
html:
|
|
88
|
+
'AVIF can achieve images 50-60% smaller than JPEG at equivalent visual quality. However, the universal compatibility of JPG still makes it essential for mass distribution.',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
type: 'paragraph',
|
|
92
|
+
html:
|
|
93
|
+
'Our converter performs the entire process in the browser. The AVIF file is decoded by the browser\'s native image engine, rendered on an HTML5 canvas and exported as high-quality JPG. All this without sending any data to the internet.',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
type: 'paragraph',
|
|
97
|
+
html:
|
|
98
|
+
'Convert AVIF to JPG for free, locally and without limits. Maximum universal compatibility for your images without compromising your file privacy.',
|
|
99
|
+
},
|
|
100
|
+
];
|
|
101
|
+
|
|
102
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
103
|
+
'@context': 'https://schema.org',
|
|
104
|
+
'@type': 'SoftwareApplication',
|
|
105
|
+
name: title,
|
|
106
|
+
description,
|
|
107
|
+
applicationCategory: 'UtilitiesApplication',
|
|
108
|
+
operatingSystem: 'Web',
|
|
109
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
110
|
+
inLanguage: 'en',
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
export const content: AvifAJpgLocaleContent = {
|
|
114
|
+
slug,
|
|
115
|
+
title,
|
|
116
|
+
description,
|
|
117
|
+
ui,
|
|
118
|
+
seo,
|
|
119
|
+
faq,
|
|
120
|
+
bibliography,
|
|
121
|
+
howTo,
|
|
122
|
+
schemas: [appSchema as any],
|
|
123
|
+
};
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import type { WithContext, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
|
|
3
|
+
import type { AvifAJpgLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'convertidor-avif-a-jpg';
|
|
6
|
+
const title = 'Convertir AVIF a JPG Online - Sin Subir Fotos a Internet';
|
|
7
|
+
const description =
|
|
8
|
+
'Convierte imágenes AVIF a JPG en tu navegador. Sin servidor. Procesamiento local 100% privado. Gratis e ilimitado.';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: 'Arrastra archivos AVIF...',
|
|
12
|
+
convertText: 'Para convertirlos a JPG al instante',
|
|
13
|
+
selectFiles: 'Seleccionar archivos',
|
|
14
|
+
processedFiles: 'Archivos procesados',
|
|
15
|
+
downloadAll: 'Descargar Todo (.zip)',
|
|
16
|
+
pending: 'Pendiente',
|
|
17
|
+
bibliographyTitle: 'Referencias Bibliográficas',
|
|
18
|
+
faqTitle: 'Preguntas Frecuentes',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const faq: AvifAJpgLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: '¿Por qué convertir AVIF a JPG?',
|
|
24
|
+
answer:
|
|
25
|
+
'El formato AVIF ofrece una compresión superior, pero no todos los programas o visores lo soportan. Convertirlo a JPG asegura que la imagen podrá ser vista en el 100% de los dispositivos del mundo.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: '¿Cómo protegemos tus imágenes AVIF?',
|
|
29
|
+
answer:
|
|
30
|
+
'Tus fotos jamás salen de tu móvil o PC. Todo el proceso de dibujo y codificación a JPEG se ejecuta en el entorno de Javascript de tu navegador.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: '¿Perderé calidad al pasar de AVIF a JPG?',
|
|
34
|
+
answer:
|
|
35
|
+
'Nuestra herramienta procesa los píxeles con una calidad estándar de Canvas (0.9 a 0.95), logrando que los cambios apenas sean perceptibles.',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: AvifAJpgLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: 'Arrastra archivos o haz clic',
|
|
42
|
+
text: 'Mueve todas las fotografías AVIF que quieras convertir al cuadro de procesamiento delimitado.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Transformación Instantánea',
|
|
46
|
+
text: 'Observa en menos de un segundo cómo se recodifica el AVIF a JPG eliminando posibles canales alfa por un fondo sólido.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Guarda o Descarga el ZIP',
|
|
50
|
+
text: 'Baja tus nuevas imágenes JPG de manera individual o pulsando Descargar Todo si procesaste en lote.',
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
const bibliography: AvifAJpgLocaleContent['bibliography'] = [
|
|
55
|
+
{
|
|
56
|
+
name: 'AV1 Image File Format (AVIF)',
|
|
57
|
+
url: 'https://aomediacodec.github.io/av1-avif/',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'Información General del JPG',
|
|
61
|
+
url: 'https://en.wikipedia.org/wiki/JPEG',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const seo: AvifAJpgLocaleContent['seo'] = [
|
|
66
|
+
{
|
|
67
|
+
type: 'title',
|
|
68
|
+
text: 'Convertidor AVIF a JPG Online Gratuito',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
type: 'paragraph',
|
|
72
|
+
html:
|
|
73
|
+
'AVIF (AV1 Image File Format) es el formato de imagen más moderno y eficiente disponible actualmente. Desarrollado por la Alliance for Open Media, ofrece una compresión significativamente superior a WebP, PNG y JPG. Sin embargo, su adopción aún es limitada: muchas aplicaciones de escritorio, editores de imágenes, y especialmente lectores de fotos en dispositivos más antiguos, no son capaces de abrir archivos AVIF.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'paragraph',
|
|
77
|
+
html:
|
|
78
|
+
'Convertir AVIF a JPG es la solución para maximizar la compatibilidad. El formato JPG tiene soporte universal en todos los dispositivos y sistemas operativos del mundo, desde smartphones de gama baja hasta televisores inteligentes. Al convertir de AVIF a JPG, garantizas que cualquier persona puede ver tu imagen sin problemas de compatibilidad.',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html:
|
|
83
|
+
'Nuestro convertidor realiza el proceso completamente en el navegador. El archivo AVIF se decodifica por el motor de imagen nativo del navegador (los navegadores modernos soportan AVIF), se renderiza en un canvas HTML5 y se exporta como JPG de alta calidad. Todo esto sin enviar ningún dato a internet.',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
type: 'tip',
|
|
87
|
+
html:
|
|
88
|
+
'Si compartes imágenes con personas que usan dispositivos o programas más antiguos, convierte siempre de AVIF a JPG para garantizar que puedan verlas sin instalar software adicional.',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
type: 'paragraph',
|
|
92
|
+
html:
|
|
93
|
+
'AVIF puede lograr imágenes entre un 50% y un 60% más pequeñas que JPEG a calidad visual equivalente. Sin embargo, la compatibilidad universal de JPG lo sigue haciendo imprescindible para distribución masiva.',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
type: 'paragraph',
|
|
97
|
+
html:
|
|
98
|
+
'Convierte AVIF a JPG de forma gratuita, local y sin límites. Máxima compatibilidad universal para tus imágenes sin comprometer la privacidad de tus archivos.',
|
|
99
|
+
},
|
|
100
|
+
];
|
|
101
|
+
|
|
102
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
103
|
+
'@context': 'https://schema.org',
|
|
104
|
+
'@type': 'SoftwareApplication',
|
|
105
|
+
name: title,
|
|
106
|
+
description,
|
|
107
|
+
applicationCategory: 'UtilitiesApplication',
|
|
108
|
+
operatingSystem: 'Web',
|
|
109
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
110
|
+
inLanguage: 'es',
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
export const content: AvifAJpgLocaleContent = {
|
|
114
|
+
slug,
|
|
115
|
+
title,
|
|
116
|
+
description,
|
|
117
|
+
ui,
|
|
118
|
+
seo,
|
|
119
|
+
faq,
|
|
120
|
+
bibliography,
|
|
121
|
+
howTo,
|
|
122
|
+
schemas: [appSchema as any],
|
|
123
|
+
};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import type { WithContext, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
|
|
3
|
+
import type { AvifAJpgLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'convertisseur-avif-en-jpg';
|
|
6
|
+
const title = 'Convertir AVIF en JPG en Ligne - Sans Téléchargement de Photos';
|
|
7
|
+
const description =
|
|
8
|
+
'Convertissez des images AVIF en JPG dans votre navigateur. Sans serveur. Traitement local 100% privé. Gratuit et illimité.';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: 'Faites glisser des fichiers AVIF...',
|
|
12
|
+
convertText: 'Pour les convertir en JPG instantanément',
|
|
13
|
+
selectFiles: 'Sélectionner des fichiers',
|
|
14
|
+
processedFiles: 'Fichiers traités',
|
|
15
|
+
downloadAll: 'Tout télécharger (.zip)',
|
|
16
|
+
pending: 'En attente',
|
|
17
|
+
bibliographyTitle: 'Références Bibliographiques',
|
|
18
|
+
faqTitle: 'Questions Fréquentes',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const faq: AvifAJpgLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: 'Pourquoi convertir AVIF en JPG ?',
|
|
24
|
+
answer:
|
|
25
|
+
'Le format AVIF offre une compression supérieure, mais tous les programmes ou visionneuses ne le supportent pas. Le convertir en JPG garantit que l\'image pourra être vue sur 100% des appareils dans le monde.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Comment protégeons-nous vos images AVIF ?',
|
|
29
|
+
answer:
|
|
30
|
+
'Vos photos ne quittent jamais votre téléphone ou PC. L\'ensemble du processus de dessin et d\'encodage JPEG s\'exécute dans l\'environnement JavaScript de votre navigateur.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'Perdrai-je de la qualité en passant d\'AVIF à JPG ?',
|
|
34
|
+
answer:
|
|
35
|
+
'Notre outil traite les pixels avec une qualité Canvas standard (0,9 à 0,95), rendant les changements à peine perceptibles.',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: AvifAJpgLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: 'Faites glisser les fichiers ou cliquez',
|
|
42
|
+
text: 'Déplacez toutes les photos AVIF que vous souhaitez convertir dans la zone de traitement délimitée.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Transformation instantanée',
|
|
46
|
+
text: 'Regardez en moins d\'une seconde comment l\'AVIF est réencodé en JPG, remplaçant tout canal alpha par un fond solide.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Sauvegardez ou téléchargez le ZIP',
|
|
50
|
+
text: 'Téléchargez vos nouvelles images JPG individuellement ou en cliquant sur Tout télécharger si vous avez traité par lot.',
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
const bibliography: AvifAJpgLocaleContent['bibliography'] = [
|
|
55
|
+
{
|
|
56
|
+
name: 'Format de fichier image AV1 (AVIF)',
|
|
57
|
+
url: 'https://aomediacodec.github.io/av1-avif/',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'Aperçu JPEG',
|
|
61
|
+
url: 'https://en.wikipedia.org/wiki/JPEG',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const seo: AvifAJpgLocaleContent['seo'] = [
|
|
66
|
+
{
|
|
67
|
+
type: 'title',
|
|
68
|
+
text: 'Convertisseur AVIF vers JPG en Ligne Gratuit',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
type: 'paragraph',
|
|
72
|
+
html:
|
|
73
|
+
'AVIF (AV1 Image File Format) est le format d\'image le plus moderne et efficace actuellement disponible. Développé par l\'Alliance for Open Media, il offre une compression significativement supérieure au WebP, PNG et JPG. Cependant, son adoption est encore limitée : de nombreuses applications de bureau, éditeurs d\'images et visionneuses de photos sur appareils plus anciens ne peuvent pas ouvrir les fichiers AVIF.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'paragraph',
|
|
77
|
+
html:
|
|
78
|
+
'Convertir AVIF en JPG est la solution pour maximiser la compatibilité. Le JPG bénéficie d\'un support universel sur tous les appareils et systèmes d\'exploitation dans le monde. En convertissant d\'AVIF en JPG, vous garantissez que n\'importe qui peut voir votre image sans problèmes de compatibilité.',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'tip',
|
|
82
|
+
html:
|
|
83
|
+
'Si vous partagez des images avec des personnes utilisant des appareils ou programmes plus anciens, convertissez toujours d\'AVIF en JPG pour vous assurer qu\'ils peuvent les voir sans installer de logiciels supplémentaires.',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
type: 'paragraph',
|
|
87
|
+
html:
|
|
88
|
+
'AVIF peut produire des images 50 à 60% plus petites que JPEG à qualité visuelle équivalente. Cependant, la compatibilité universelle du JPG le rend toujours essentiel pour la distribution de masse.',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
type: 'paragraph',
|
|
92
|
+
html:
|
|
93
|
+
'Convertissez AVIF en JPG gratuitement, localement et sans limites. Compatibilité universelle maximale pour vos images sans compromettre la confidentialité de vos fichiers.',
|
|
94
|
+
},
|
|
95
|
+
];
|
|
96
|
+
|
|
97
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
98
|
+
'@context': 'https://schema.org',
|
|
99
|
+
'@type': 'SoftwareApplication',
|
|
100
|
+
name: title,
|
|
101
|
+
description,
|
|
102
|
+
applicationCategory: 'UtilitiesApplication',
|
|
103
|
+
operatingSystem: 'Web',
|
|
104
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
105
|
+
inLanguage: 'fr',
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
export const content: AvifAJpgLocaleContent = {
|
|
109
|
+
slug,
|
|
110
|
+
title,
|
|
111
|
+
description,
|
|
112
|
+
ui,
|
|
113
|
+
seo,
|
|
114
|
+
faq,
|
|
115
|
+
bibliography,
|
|
116
|
+
howTo,
|
|
117
|
+
schemas: [appSchema as any],
|
|
118
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ConvertersToolEntry, ToolLocaleContent, ToolDefinition } from '../../types';
|
|
2
|
+
import type { ImageConverterUI } from '../../shared/ImageConverter.astro';
|
|
3
|
+
import AvifAJpgCalculator from './component.astro';
|
|
4
|
+
import AvifAJpgSEO from './seo.astro';
|
|
5
|
+
import AvifAJpgBibliography from './bibliography.astro';
|
|
6
|
+
|
|
7
|
+
export type AvifAJpgLocaleContent = ToolLocaleContent<ImageConverterUI>;
|
|
8
|
+
|
|
9
|
+
export const avifAJpg: ConvertersToolEntry<ImageConverterUI> = {
|
|
10
|
+
id: 'avif-a-jpg',
|
|
11
|
+
icons: {
|
|
12
|
+
bg: 'mdi:file-image',
|
|
13
|
+
fg: 'mdi:file-export',
|
|
14
|
+
},
|
|
15
|
+
i18n: {
|
|
16
|
+
es: () => import('./i18n/es').then((m) => m.content),
|
|
17
|
+
en: () => import('./i18n/en').then((m) => m.content),
|
|
18
|
+
fr: () => import('./i18n/fr').then((m) => m.content),
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export { AvifAJpgCalculator, AvifAJpgSEO, AvifAJpgBibliography };
|
|
23
|
+
|
|
24
|
+
export const AVIF_A_JPG_TOOL: ToolDefinition = {
|
|
25
|
+
entry: avifAJpg,
|
|
26
|
+
Component: AvifAJpgCalculator,
|
|
27
|
+
SEOComponent: AvifAJpgSEO,
|
|
28
|
+
BibliographyComponent: AvifAJpgBibliography,
|
|
29
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { avifAJpg } from './index';
|
|
4
|
+
import type { KnownLocale } from '../../types';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
locale?: KnownLocale;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const { locale = 'es' } = Astro.props;
|
|
11
|
+
const content = await avifAJpg.i18n[locale]?.();
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
{content && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { avifAPng } from './index';
|
|
4
|
+
import type { KnownLocale } from '../../types';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
locale?: KnownLocale;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const { locale = 'es' } = Astro.props;
|
|
11
|
+
const content = await avifAPng.i18n[locale]?.();
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
{content && <SharedBibliography links={content.bibliography} title={content.ui.bibliographyTitle} />}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
import SharedImageConverter from '../../shared/ImageConverter.astro';
|
|
3
|
+
import type { ImageConverterUI } from '../../shared/ImageConverter.astro';
|
|
4
|
+
|
|
5
|
+
interface Props { ui: ImageConverterUI }
|
|
6
|
+
const { ui } = Astro.props;
|
|
7
|
+
---
|
|
8
|
+
<SharedImageConverter from="avif" to="png" ui={ui} />
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import type { WithContext, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
|
|
3
|
+
import type { AvifAPngLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'avif-to-png-converter';
|
|
6
|
+
const title = 'Convert AVIF to PNG Online - Fast, Local and 100% Private';
|
|
7
|
+
const description =
|
|
8
|
+
'Convert AVIF images to PNG preserving transparency. No file uploads. Processed locally in your browser. Free and unlimited.';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: 'Drag AVIF files...',
|
|
12
|
+
convertText: 'To convert them to PNG instantly',
|
|
13
|
+
selectFiles: 'Select files',
|
|
14
|
+
processedFiles: 'Processed files',
|
|
15
|
+
downloadAll: 'Download All (.zip)',
|
|
16
|
+
pending: 'Pending',
|
|
17
|
+
bibliographyTitle: 'Bibliographic References',
|
|
18
|
+
faqTitle: 'Frequently Asked Questions',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const faq: AvifAPngLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: 'Why should I convert AVIF to PNG?',
|
|
24
|
+
answer:
|
|
25
|
+
'AVIF is great for compression, but its compatibility is limited in older browsers and classic editors. By converting from AVIF to PNG, you ensure your file will maintain the original transparency and all applications can open it.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Are the transparencies from the original AVIF file maintained?',
|
|
29
|
+
answer:
|
|
30
|
+
'Yes. Unlike JPG which removes the transparent background, when exporting to PNG our converter keeps the alpha channel intact.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'Is it true that my images are not uploaded to the internet?',
|
|
34
|
+
answer:
|
|
35
|
+
'Absolutely true. Our converter runs 100% locally on your device using the internal JavaScript engine.',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: AvifAPngLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: 'Add your AVIF files',
|
|
42
|
+
text: 'You can drag them directly to the delimited area or use the button to browse your computer folders.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Immediate processing',
|
|
46
|
+
text: 'Let the HTML5 processor render the image; the format will change to PNG automatically in microseconds.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Get your PNGs',
|
|
50
|
+
text: 'Download the converted images one by one or download a complete batch via the ZIP button.',
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
const bibliography: AvifAPngLocaleContent['bibliography'] = [
|
|
55
|
+
{
|
|
56
|
+
name: 'Alliance for Open Media: AVIF Format',
|
|
57
|
+
url: 'https://aomediacodec.github.io/av1-avif/',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'W3C - Portable Network Graphics (PNG) Specification',
|
|
61
|
+
url: 'https://www.w3.org/TR/png/',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const seo: AvifAPngLocaleContent['seo'] = [
|
|
66
|
+
{
|
|
67
|
+
type: 'title',
|
|
68
|
+
text: 'Free Online AVIF to PNG Converter',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
type: 'paragraph',
|
|
72
|
+
html:
|
|
73
|
+
'AVIF is one of the most advanced formats available today, capable of compressing images with remarkable efficiency. However, AVIF adoption in editing tools, image viewers and older operating systems is still limited. PNG, on the other hand, is a widely compatible format supported by virtually any software tool.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'paragraph',
|
|
77
|
+
html:
|
|
78
|
+
'Converting AVIF to PNG has a fundamental advantage over converting to JPG: the preservation of the alpha channel. If your AVIF image has transparent areas, when converting to PNG these are kept intact. This is crucial for logos, icons, stickers and any graphic where transparency is essential for the design.',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'tip',
|
|
82
|
+
html:
|
|
83
|
+
'If you receive an AVIF file that you need to edit in Photoshop or GIMP, convert it first to PNG to ensure full compatibility and preserve any transparency present.',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
type: 'paragraph',
|
|
87
|
+
html:
|
|
88
|
+
'PNG has universal support in all image editors, operating systems and web browsers. AVIF, despite its efficiency, is still not supported in Internet Explorer, older Safari versions and many editing programs.',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
type: 'paragraph',
|
|
92
|
+
html:
|
|
93
|
+
'Convert AVIF to PNG preserving transparency, for free and locally. Get the universal compatibility of PNG without sacrificing the image quality of your AVIF.',
|
|
94
|
+
},
|
|
95
|
+
];
|
|
96
|
+
|
|
97
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
98
|
+
'@context': 'https://schema.org',
|
|
99
|
+
'@type': 'SoftwareApplication',
|
|
100
|
+
name: title,
|
|
101
|
+
description,
|
|
102
|
+
applicationCategory: 'UtilitiesApplication',
|
|
103
|
+
operatingSystem: 'Web',
|
|
104
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
105
|
+
inLanguage: 'en',
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
export const content: AvifAPngLocaleContent = {
|
|
109
|
+
slug,
|
|
110
|
+
title,
|
|
111
|
+
description,
|
|
112
|
+
ui,
|
|
113
|
+
seo,
|
|
114
|
+
faq,
|
|
115
|
+
bibliography,
|
|
116
|
+
howTo,
|
|
117
|
+
schemas: [appSchema as any],
|
|
118
|
+
};
|