@jjlmoya/utils-converters 1.25.0 → 1.27.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 (134) hide show
  1. package/package.json +2 -2
  2. package/src/category/i18n/de.ts +1 -1
  3. package/src/category/i18n/en.ts +1 -1
  4. package/src/category/i18n/fr.ts +1 -1
  5. package/src/category/i18n/id.ts +1 -1
  6. package/src/category/i18n/it.ts +1 -1
  7. package/src/category/i18n/nl.ts +1 -1
  8. package/src/category/i18n/pl.ts +1 -1
  9. package/src/category/i18n/pt.ts +1 -1
  10. package/src/category/i18n/sv.ts +1 -1
  11. package/src/tests/bibliography_wellformed_export.test.ts +46 -0
  12. package/src/tests/category_seo_quality.test.ts +74 -0
  13. package/src/tests/faq_count.test.ts +1 -1
  14. package/src/tests/no_h1_in_components.test.ts +1 -1
  15. package/src/tests/seo_parity.test.ts +2 -2
  16. package/src/tests/seo_translation_completeness.test.ts +18 -12
  17. package/src/tests/seo_wellformed_export.test.ts +65 -0
  18. package/src/tests/tool_validation.test.ts +15 -15
  19. package/src/tool/avifAJpg/i18n/en.ts +164 -164
  20. package/src/tool/avifAJpg/i18n/es.ts +164 -164
  21. package/src/tool/avifAJpg/i18n/fr.ts +164 -164
  22. package/src/tool/avifAJpg/i18n/ja.ts +166 -166
  23. package/src/tool/avifAJpg/i18n/ko.ts +166 -166
  24. package/src/tool/avifAJpg/i18n/zh.ts +166 -166
  25. package/src/tool/avifAJpg/seo.astro +15 -15
  26. package/src/tool/avifAPng/i18n/en.ts +164 -164
  27. package/src/tool/avifAPng/i18n/es.ts +164 -164
  28. package/src/tool/avifAPng/i18n/fr.ts +164 -164
  29. package/src/tool/avifAPng/i18n/ja.ts +166 -166
  30. package/src/tool/avifAPng/i18n/ko.ts +166 -166
  31. package/src/tool/avifAPng/i18n/zh.ts +166 -166
  32. package/src/tool/avifAPng/seo.astro +15 -15
  33. package/src/tool/avifAWebp/i18n/en.ts +164 -164
  34. package/src/tool/avifAWebp/i18n/es.ts +164 -164
  35. package/src/tool/avifAWebp/i18n/fr.ts +164 -164
  36. package/src/tool/avifAWebp/i18n/ja.ts +166 -166
  37. package/src/tool/avifAWebp/i18n/ko.ts +166 -166
  38. package/src/tool/avifAWebp/i18n/zh.ts +166 -166
  39. package/src/tool/avifAWebp/seo.astro +15 -15
  40. package/src/tool/bmpAJpg/i18n/en.ts +164 -164
  41. package/src/tool/bmpAJpg/i18n/es.ts +164 -164
  42. package/src/tool/bmpAJpg/i18n/fr.ts +164 -164
  43. package/src/tool/bmpAJpg/i18n/ja.ts +166 -166
  44. package/src/tool/bmpAJpg/i18n/ko.ts +166 -166
  45. package/src/tool/bmpAJpg/i18n/zh.ts +166 -166
  46. package/src/tool/bmpAJpg/seo.astro +15 -15
  47. package/src/tool/bmpAPng/i18n/en.ts +164 -164
  48. package/src/tool/bmpAPng/i18n/es.ts +164 -164
  49. package/src/tool/bmpAPng/i18n/fr.ts +164 -164
  50. package/src/tool/bmpAPng/i18n/ja.ts +165 -165
  51. package/src/tool/bmpAPng/i18n/ko.ts +165 -165
  52. package/src/tool/bmpAPng/i18n/zh.ts +165 -165
  53. package/src/tool/bmpAPng/seo.astro +15 -15
  54. package/src/tool/bmpAWebp/i18n/en.ts +164 -164
  55. package/src/tool/bmpAWebp/i18n/es.ts +164 -164
  56. package/src/tool/bmpAWebp/i18n/fr.ts +164 -164
  57. package/src/tool/bmpAWebp/i18n/ja.ts +166 -166
  58. package/src/tool/bmpAWebp/i18n/ko.ts +166 -166
  59. package/src/tool/bmpAWebp/i18n/zh.ts +166 -166
  60. package/src/tool/bmpAWebp/seo.astro +15 -15
  61. package/src/tool/gifAJpg/i18n/en.ts +164 -164
  62. package/src/tool/gifAJpg/i18n/es.ts +164 -164
  63. package/src/tool/gifAJpg/i18n/fr.ts +164 -164
  64. package/src/tool/gifAJpg/i18n/ja.ts +166 -166
  65. package/src/tool/gifAJpg/i18n/ko.ts +166 -166
  66. package/src/tool/gifAJpg/i18n/zh.ts +166 -166
  67. package/src/tool/gifAJpg/seo.astro +15 -15
  68. package/src/tool/gifAPng/i18n/en.ts +164 -164
  69. package/src/tool/gifAPng/i18n/es.ts +164 -164
  70. package/src/tool/gifAPng/i18n/fr.ts +164 -164
  71. package/src/tool/gifAPng/i18n/ja.ts +166 -166
  72. package/src/tool/gifAPng/i18n/ko.ts +166 -166
  73. package/src/tool/gifAPng/i18n/zh.ts +166 -166
  74. package/src/tool/gifAPng/seo.astro +15 -15
  75. package/src/tool/gifAWebp/i18n/en.ts +164 -164
  76. package/src/tool/gifAWebp/i18n/es.ts +164 -164
  77. package/src/tool/gifAWebp/i18n/fr.ts +164 -164
  78. package/src/tool/gifAWebp/i18n/ja.ts +166 -166
  79. package/src/tool/gifAWebp/i18n/ko.ts +166 -166
  80. package/src/tool/gifAWebp/i18n/zh.ts +166 -166
  81. package/src/tool/gifAWebp/seo.astro +15 -15
  82. package/src/tool/imagenBase64/i18n/en.ts +154 -154
  83. package/src/tool/imagenBase64/i18n/es.ts +154 -154
  84. package/src/tool/imagenBase64/i18n/fr.ts +154 -154
  85. package/src/tool/imagenBase64/seo.astro +15 -15
  86. package/src/tool/jpgAIco/seo.astro +15 -15
  87. package/src/tool/jpgAPng/i18n/en.ts +164 -164
  88. package/src/tool/jpgAPng/i18n/es.ts +164 -164
  89. package/src/tool/jpgAPng/i18n/fr.ts +164 -164
  90. package/src/tool/jpgAPng/i18n/ja.ts +166 -166
  91. package/src/tool/jpgAPng/i18n/ko.ts +166 -166
  92. package/src/tool/jpgAPng/i18n/zh.ts +166 -166
  93. package/src/tool/jpgAPng/seo.astro +15 -15
  94. package/src/tool/jpgAWebp/i18n/en.ts +164 -164
  95. package/src/tool/jpgAWebp/i18n/es.ts +164 -164
  96. package/src/tool/jpgAWebp/i18n/fr.ts +164 -164
  97. package/src/tool/jpgAWebp/seo.astro +15 -15
  98. package/src/tool/pngAIco/seo.astro +15 -15
  99. package/src/tool/pngAJpg/i18n/de.ts +21 -21
  100. package/src/tool/pngAJpg/i18n/es.ts +177 -177
  101. package/src/tool/pngAJpg/i18n/fr.ts +137 -137
  102. package/src/tool/pngAJpg/i18n/id.ts +89 -89
  103. package/src/tool/pngAJpg/i18n/it.ts +89 -89
  104. package/src/tool/pngAJpg/i18n/ko.ts +177 -177
  105. package/src/tool/pngAJpg/i18n/nl.ts +20 -20
  106. package/src/tool/pngAJpg/i18n/pl.ts +89 -89
  107. package/src/tool/pngAJpg/i18n/pt.ts +89 -89
  108. package/src/tool/pngAJpg/i18n/ru.ts +177 -177
  109. package/src/tool/pngAJpg/i18n/sv.ts +89 -89
  110. package/src/tool/pngAJpg/i18n/tr.ts +89 -89
  111. package/src/tool/pngAJpg/seo.astro +15 -15
  112. package/src/tool/pngAWebp/i18n/en.ts +164 -164
  113. package/src/tool/pngAWebp/i18n/es.ts +164 -164
  114. package/src/tool/pngAWebp/i18n/fr.ts +164 -164
  115. package/src/tool/pngAWebp/seo.astro +15 -15
  116. package/src/tool/svgAJpg/i18n/fr.ts +164 -164
  117. package/src/tool/svgAJpg/seo.astro +15 -15
  118. package/src/tool/svgAPng/i18n/fr.ts +164 -164
  119. package/src/tool/svgAPng/seo.astro +15 -15
  120. package/src/tool/webpAIco/seo.astro +15 -15
  121. package/src/tool/webpAJpg/seo.astro +15 -15
  122. package/src/tool/webpAPng/bibliography.ts +13 -13
  123. package/src/tool/webpAPng/i18n/de.ts +166 -166
  124. package/src/tool/webpAPng/i18n/es.ts +171 -171
  125. package/src/tool/webpAPng/i18n/fr.ts +166 -166
  126. package/src/tool/webpAPng/i18n/id.ts +166 -166
  127. package/src/tool/webpAPng/i18n/it.ts +166 -166
  128. package/src/tool/webpAPng/i18n/nl.ts +166 -166
  129. package/src/tool/webpAPng/i18n/pl.ts +166 -166
  130. package/src/tool/webpAPng/i18n/pt.ts +166 -166
  131. package/src/tool/webpAPng/i18n/ru.ts +166 -166
  132. package/src/tool/webpAPng/i18n/sv.ts +166 -166
  133. package/src/tool/webpAPng/i18n/tr.ts +167 -167
  134. package/src/tool/webpAPng/seo.astro +15 -15
@@ -1,158 +1,158 @@
1
1
  import { bibliography } from '../bibliography';
2
- import type { ImagenBase64LocaleContent } from '../index';
2
+ import type { ImagenBase64LocaleContent } from '../index';
3
3
  import { generateSchemas } from '../../../shared/logic/schemas';
4
- import type { ImageToBase64UI } from '../index';
5
-
6
- const slug = 'convertisseur-image-base64';
7
- const title = 'Convertisseur Image vers Base64 en Ligne';
8
- const description =
9
- 'Convertissez n\'importe quelle image en code Base64 et Data URI directement dans votre navigateur. Sans téléchargement. Gratuit, privé et instantané.';
10
-
11
- const ui: ImageToBase64UI = {
12
- dragTitle: 'Faites glisser votre image ici',
13
- dragSubtext: 'ou cliquez pour parcourir vos fichiers',
14
- formatBadge: 'Supporte JPG, PNG, WEBP, SVG, GIF',
15
- dataUriLabel: 'Data URI (Prêt pour CSS / HTML src="")',
16
- base64Label: 'Base64 uniquement (Texte encodé en clair)',
17
- copyBtn: 'Copier',
18
- dataUriPlaceholder: 'Téléchargez une image pour voir le code Data URI...',
19
- base64Placeholder: 'Téléchargez une image pour voir le code Base64 pur...',
20
- toastMessage: 'Code copié dans le presse-papiers !',
4
+ import type { ImageToBase64UI } from '../index';
5
+
6
+ const slug = 'convertisseur-image-base64';
7
+ const title = 'Convertisseur Image vers Base64 en Ligne';
8
+ const description =
9
+ 'Convertissez n\'importe quelle image en code Base64 et Data URI directement dans votre navigateur. Sans téléchargement. Gratuit, privé et instantané.';
10
+
11
+ const ui: ImageToBase64UI = {
12
+ dragTitle: 'Faites glisser votre image ici',
13
+ dragSubtext: 'ou cliquez pour parcourir vos fichiers',
14
+ formatBadge: 'Supporte JPG, PNG, WEBP, SVG, GIF',
15
+ dataUriLabel: 'Data URI (Prêt pour CSS / HTML src="")',
16
+ base64Label: 'Base64 uniquement (Texte encodé en clair)',
17
+ copyBtn: 'Copier',
18
+ dataUriPlaceholder: 'Téléchargez une image pour voir le code Data URI...',
19
+ base64Placeholder: 'Téléchargez une image pour voir le code Base64 pur...',
20
+ toastMessage: 'Code copié dans le presse-papiers !',
21
21
  invalidImageAlert: 'Veuillez télécharger un fichier image valide.',
22
- bibliographyTitle: 'Références Bibliographiques',
23
- faqTitle: 'Questions Fréquentes',
24
- };
25
-
26
- const faq: ImagenBase64LocaleContent['faq'] = [
27
- {
28
- question: 'Qu\'est-ce que Base64 et à quoi sert-il dans le développement web ?',
29
- answer:
30
- 'Base64 est un système d\'encodage qui convertit des données binaires en une chaîne de texte ASCII. Dans le développement web, il est utilisé pour intégrer des images directement dans les fichiers HTML ou CSS via des Data URIs, réduisant le nombre de requêtes HTTP vers le serveur.',
31
- },
32
- {
33
- question: 'Est-il sûr de convertir mes images en Base64 ici ?',
34
- answer:
35
- 'Absolument sûr et privé. Notre outil fonctionne à 100% localement dans votre navigateur. Vos images ne sont jamais téléchargées ni traitées sur un serveur externe.',
36
- },
37
- {
38
- question: 'Quels formats d\'image le convertisseur Base64 supporte-t-il ?',
39
- answer:
40
- 'L\'outil est compatible avec JPG, PNG, GIF, WebP et même les fichiers vectoriels SVG. Lors du chargement de l\'image, il détectera automatiquement son type MIME pour générer le code Data URI exact.',
41
- },
42
- {
43
- question: 'Quand NE devrais-je PAS utiliser des images en Base64 ?',
44
- answer:
45
- 'Vous devriez éviter d\'utiliser des images en Base64 pour de grandes photographies ou des images haute résolution. Le code Base64 occupe environ 33% de poids en plus que le fichier binaire original, ce qui peut excessivement gonfler vos feuilles de style CSS ou documents HTML.',
46
- },
47
- ];
48
-
49
- const howTo: ImagenBase64LocaleContent['howTo'] = [
50
- {
51
- name: 'Faites glisser ou sélectionnez votre image',
52
- text: 'Déplacez n\'importe quelle image (JPG, PNG, WebP, SVG, GIF) vers la zone de téléchargement pour démarrer la conversion.',
53
- },
54
- {
55
- name: 'Copiez le code généré',
56
- text: 'Vous verrez deux zones de texte: le Data URI complet (prêt à utiliser dans src="" ou CSS) et le Base64 pur pour d\'autres utilisations.',
57
- },
58
- {
59
- name: 'Utilisez le code dans votre projet',
60
- text: 'Collez directement le Data URI dans le src d\'une balise img ou dans votre CSS comme background-image sans avoir besoin de fichiers externes.',
61
- },
62
- ];
63
-
64
- const seo: ImagenBase64LocaleContent['seo'] = [
65
- {
66
- type: 'title',
67
- text: 'Convertisseur Image vers Base64: Intégrez des Images Sans Requêtes HTTP',
68
- level: 2,
69
- },
70
- {
71
- type: 'paragraph',
72
- html: 'Base64 est une technique d\'encodage qui transforme des données binaires - comme une image - en une chaîne de texte ASCII pur. Le résultat est un Data URI: une URL auto-contenue qui commence par <code>data:image/png;base64,...</code> et contient l\'image entière encodée. En intégrant ce code directement dans votre HTML, CSS ou JSON, l\'image se charge sans aucune requête HTTP supplémentaire au serveur - zéro latence réseau, chargement instantané.',
73
- },
74
- {
75
- type: 'title',
76
- text: 'Quand utiliser les images en Base64',
77
- level: 3,
78
- },
79
- {
80
- type: 'paragraph',
81
- html: 'Le principal argument en faveur de Base64 est l\'élimination des requêtes réseau. Chaque image sur une page web représente une requête HTTP avec son overhead de connexion, DNS, handshake TLS et latence. Pour les très petites images critiques - le logo principal de l\'application, le favicon, une icône d\'interface - les intégrer en Base64 dans le CSS ou HTML élimine ce coût et garantit leur affichage instantané même avant que le navigateur n\'ait rien mis en cache.',
82
- },
83
- {
84
- type: 'paragraph',
85
- html: 'Cette technique est particulièrement puissante dans les applications SPA (Single Page Applications) où le bundle JavaScript et CSS est généré au moment de la compilation: intégrer de petites images dans le bundle garantit qu\'elles se chargent avec le code sans requêtes supplémentaires. Elle est aussi indispensable pour les emails HTML, où les clients de messagerie bloquent les images externes mais affichent toujours les Data URIs intégrés.',
86
- },
87
- {
88
- type: 'title',
89
- text: 'Cas d\'utilisation pour les images Base64',
90
- level: 3,
91
- },
92
- {
93
- type: 'list',
94
- icon: 'mdi:check-circle',
95
- items: [
96
- 'HTML inline: <code>&lt;img src="data:image/png;base64,..."&gt;</code> pour les icônes critiques.',
97
- 'CSS background: <code>background-image: url("data:image/svg+xml;base64,...")</code> pour les SVGs d\'interface.',
98
- 'JSON et APIs REST: envoi d\'images comme données texte dans les payloads JSON.',
99
- 'Emails HTML: images intégrées qui s\'affichent même quand le client bloque les URLs externes.',
100
- 'Intégration SVG: intégrer des images raster dans des fichiers SVG comme données inline.',
101
- ],
102
- },
103
- {
104
- type: 'title',
105
- text: 'Comment fonctionne la conversion dans le navigateur',
106
- level: 3,
107
- },
108
- {
109
- type: 'paragraph',
110
- html: 'Lorsque vous sélectionnez ou faites glisser une image, l\'API <code>FileReader</code> du navigateur la lit directement depuis le disque comme données binaires en RAM. La méthode <code>readAsDataURL()</code> convertit ces octets binaires en leur représentation Base64 selon l\'algorithme RFC 4648 - chaque 3 octets de données originales sont représentés par 4 caractères ASCII de l\'alphabet Base64. Le résultat inclut le type MIME correct détecté automatiquement.',
111
- },
112
- {
113
- type: 'tip',
114
- title: 'Utilisez',
115
- html: 'Base64 augmente la taille du fichier d\'environ 33%: une image de 10 Ko devient ~13,3 Ko de texte. Pour les petites icônes et logos, ce coût est minimal et l\'élimination de la requête HTTP le compense. Pour les photographies ou grandes images, le surcoût de taille est significatif - utilisez toujours un CDN pour les grandes images.',
116
- },
117
- {
118
- type: 'title',
119
- text: 'Quand NE PAS utiliser Base64',
120
- level: 3,
121
- },
122
- {
123
- type: 'tip',
124
- title: 'Évitez Base64 pour les grandes images: utilisez un CDN',
125
- html: 'Si vous avez des images de plus de 10-20 Ko, Base64 nuit aux performances: il gonfle la taille du HTML/CSS, empêche le navigateur de mettre l\'image en cache de façon indépendante, et bloque le rendu pendant que le parseur traite la chaîne géante. Pour les grandes images, servez toujours depuis un CDN avec des en-têtes de cache appropriés.',
126
- },
127
- {
128
- type: 'title',
129
- text: 'Compatibilité et confidentialité',
130
- level: 3,
131
- },
132
- {
133
- type: 'paragraph',
134
- html: 'Les Data URIs sont compatibles avec 100% des navigateurs modernes et la plupart des clients de messagerie. Notre outil traite tout localement via l\'API FileReader - vos images ne quittent jamais votre appareil. Cela le rend adapté aux images d\'entreprise, aux captures d\'écran privées ou à tout contenu visuel confidentiel que vous devez convertir en Base64.',
135
- },
136
- {
137
- type: 'title',
138
- text: 'Conclusion: L\'outil d\'intégration le plus rapide et le plus privé',
139
- level: 3,
140
- },
141
- {
142
- type: 'paragraph',
143
- html: 'Convertir des images en Base64 est une technique ciblée mais très puissante quand elle est appliquée correctement. Utilisez-la pour les petites images critiques où zéro requête HTTP fait la différence, et évitez-la pour les grandes images où un CDN gagne toujours. Avec notre outil, vous obtenez le Data URI en un instant, sans rien téléverser sur aucun serveur.',
144
- },
145
- ];
146
-
22
+ bibliographyTitle: 'Références Bibliographiques',
23
+ faqTitle: 'Questions Fréquentes',
24
+ };
25
+
26
+ const faq: ImagenBase64LocaleContent['faq'] = [
27
+ {
28
+ question: 'Qu\'est-ce que Base64 et à quoi sert-il dans le développement web ?',
29
+ answer:
30
+ 'Base64 est un système d\'encodage qui convertit des données binaires en une chaîne de texte ASCII. Dans le développement web, il est utilisé pour intégrer des images directement dans les fichiers HTML ou CSS via des Data URIs, réduisant le nombre de requêtes HTTP vers le serveur.',
31
+ },
32
+ {
33
+ question: 'Est-il sûr de convertir mes images en Base64 ici ?',
34
+ answer:
35
+ 'Absolument sûr et privé. Notre outil fonctionne à 100% localement dans votre navigateur. Vos images ne sont jamais téléchargées ni traitées sur un serveur externe.',
36
+ },
37
+ {
38
+ question: 'Quels formats d\'image le convertisseur Base64 supporte-t-il ?',
39
+ answer:
40
+ 'L\'outil est compatible avec JPG, PNG, GIF, WebP et même les fichiers vectoriels SVG. Lors du chargement de l\'image, il détectera automatiquement son type MIME pour générer le code Data URI exact.',
41
+ },
42
+ {
43
+ question: 'Quand NE devrais-je PAS utiliser des images en Base64 ?',
44
+ answer:
45
+ 'Vous devriez éviter d\'utiliser des images en Base64 pour de grandes photographies ou des images haute résolution. Le code Base64 occupe environ 33% de poids en plus que le fichier binaire original, ce qui peut excessivement gonfler vos feuilles de style CSS ou documents HTML.',
46
+ },
47
+ ];
48
+
49
+ const howTo: ImagenBase64LocaleContent['howTo'] = [
50
+ {
51
+ name: 'Faites glisser ou sélectionnez votre image',
52
+ text: 'Déplacez n\'importe quelle image (JPG, PNG, WebP, SVG, GIF) vers la zone de téléchargement pour démarrer la conversion.',
53
+ },
54
+ {
55
+ name: 'Copiez le code généré',
56
+ text: 'Vous verrez deux zones de texte: le Data URI complet (prêt à utiliser dans src="" ou CSS) et le Base64 pur pour d\'autres utilisations.',
57
+ },
58
+ {
59
+ name: 'Utilisez le code dans votre projet',
60
+ text: 'Collez directement le Data URI dans le src d\'une balise img ou dans votre CSS comme background-image sans avoir besoin de fichiers externes.',
61
+ },
62
+ ];
63
+
64
+ const seo: ImagenBase64LocaleContent['seo'] = [
65
+ {
66
+ type: 'title',
67
+ text: 'Convertisseur Image vers Base64: Intégrez des Images Sans Requêtes HTTP',
68
+ level: 2,
69
+ },
70
+ {
71
+ type: 'paragraph',
72
+ html: 'Base64 est une technique d\'encodage qui transforme des données binaires - comme une image - en une chaîne de texte ASCII pur. Le résultat est un Data URI: une URL auto-contenue qui commence par <code>data:image/png;base64,...</code> et contient l\'image entière encodée. En intégrant ce code directement dans votre HTML, CSS ou JSON, l\'image se charge sans aucune requête HTTP supplémentaire au serveur - zéro latence réseau, chargement instantané.',
73
+ },
74
+ {
75
+ type: 'title',
76
+ text: 'Quand utiliser les images en Base64',
77
+ level: 3,
78
+ },
79
+ {
80
+ type: 'paragraph',
81
+ html: 'Le principal argument en faveur de Base64 est l\'élimination des requêtes réseau. Chaque image sur une page web représente une requête HTTP avec son overhead de connexion, DNS, handshake TLS et latence. Pour les très petites images critiques - le logo principal de l\'application, le favicon, une icône d\'interface - les intégrer en Base64 dans le CSS ou HTML élimine ce coût et garantit leur affichage instantané même avant que le navigateur n\'ait rien mis en cache.',
82
+ },
83
+ {
84
+ type: 'paragraph',
85
+ html: 'Cette technique est particulièrement puissante dans les applications SPA (Single Page Applications) où le bundle JavaScript et CSS est généré au moment de la compilation: intégrer de petites images dans le bundle garantit qu\'elles se chargent avec le code sans requêtes supplémentaires. Elle est aussi indispensable pour les emails HTML, où les clients de messagerie bloquent les images externes mais affichent toujours les Data URIs intégrés.',
86
+ },
87
+ {
88
+ type: 'title',
89
+ text: 'Cas d\'utilisation pour les images Base64',
90
+ level: 3,
91
+ },
92
+ {
93
+ type: 'list',
94
+ icon: 'mdi:check-circle',
95
+ items: [
96
+ 'HTML inline: <code>&lt;img src="data:image/png;base64,..."&gt;</code> pour les icônes critiques.',
97
+ 'CSS background: <code>background-image: url("data:image/svg+xml;base64,...")</code> pour les SVGs d\'interface.',
98
+ 'JSON et APIs REST: envoi d\'images comme données texte dans les payloads JSON.',
99
+ 'Emails HTML: images intégrées qui s\'affichent même quand le client bloque les URLs externes.',
100
+ 'Intégration SVG: intégrer des images raster dans des fichiers SVG comme données inline.',
101
+ ],
102
+ },
103
+ {
104
+ type: 'title',
105
+ text: 'Comment fonctionne la conversion dans le navigateur',
106
+ level: 3,
107
+ },
108
+ {
109
+ type: 'paragraph',
110
+ html: 'Lorsque vous sélectionnez ou faites glisser une image, l\'API <code>FileReader</code> du navigateur la lit directement depuis le disque comme données binaires en RAM. La méthode <code>readAsDataURL()</code> convertit ces octets binaires en leur représentation Base64 selon l\'algorithme RFC 4648 - chaque 3 octets de données originales sont représentés par 4 caractères ASCII de l\'alphabet Base64. Le résultat inclut le type MIME correct détecté automatiquement.',
111
+ },
112
+ {
113
+ type: 'tip',
114
+ title: 'Utilisez',
115
+ html: 'Base64 augmente la taille du fichier d\'environ 33%: une image de 10 Ko devient ~13,3 Ko de texte. Pour les petites icônes et logos, ce coût est minimal et l\'élimination de la requête HTTP le compense. Pour les photographies ou grandes images, le surcoût de taille est significatif - utilisez toujours un CDN pour les grandes images.',
116
+ },
117
+ {
118
+ type: 'title',
119
+ text: 'Quand NE PAS utiliser Base64',
120
+ level: 3,
121
+ },
122
+ {
123
+ type: 'tip',
124
+ title: 'Évitez Base64 pour les grandes images: utilisez un CDN',
125
+ html: 'Si vous avez des images de plus de 10-20 Ko, Base64 nuit aux performances: il gonfle la taille du HTML/CSS, empêche le navigateur de mettre l\'image en cache de façon indépendante, et bloque le rendu pendant que le parseur traite la chaîne géante. Pour les grandes images, servez toujours depuis un CDN avec des en-têtes de cache appropriés.',
126
+ },
127
+ {
128
+ type: 'title',
129
+ text: 'Compatibilité et confidentialité',
130
+ level: 3,
131
+ },
132
+ {
133
+ type: 'paragraph',
134
+ html: 'Les Data URIs sont compatibles avec 100% des navigateurs modernes et la plupart des clients de messagerie. Notre outil traite tout localement via l\'API FileReader - vos images ne quittent jamais votre appareil. Cela le rend adapté aux images d\'entreprise, aux captures d\'écran privées ou à tout contenu visuel confidentiel que vous devez convertir en Base64.',
135
+ },
136
+ {
137
+ type: 'title',
138
+ text: 'Conclusion: L\'outil d\'intégration le plus rapide et le plus privé',
139
+ level: 3,
140
+ },
141
+ {
142
+ type: 'paragraph',
143
+ html: 'Convertir des images en Base64 est une technique ciblée mais très puissante quand elle est appliquée correctement. Utilisez-la pour les petites images critiques où zéro requête HTTP fait la différence, et évitez-la pour les grandes images où un CDN gagne toujours. Avec notre outil, vous obtenez le Data URI en un instant, sans rien téléverser sur aucun serveur.',
144
+ },
145
+ ];
147
146
 
148
- export const content: ImagenBase64LocaleContent = {
149
- slug,
150
- title,
151
- description,
152
- ui,
153
- seo,
154
- faq,
155
- bibliography,
156
- howTo,
157
- schemas: generateSchemas({ title, description, inLanguage: 'fr', faq, howTo }),
158
- };
147
+
148
+ export const content: ImagenBase64LocaleContent = {
149
+ slug,
150
+ title,
151
+ description,
152
+ ui,
153
+ seo,
154
+ faq,
155
+ bibliography,
156
+ howTo,
157
+ schemas: generateSchemas({ title, description, inLanguage: 'fr', faq, howTo }),
158
+ };
@@ -1,15 +1,15 @@
1
- ---
2
- import { SEORenderer } from '@jjlmoya/utils-shared';
3
- import { imagenBase64 } 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 imagenBase64.i18n[locale]?.();
12
- if (!content) return null;
13
- ---
14
-
15
- {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { imagenBase64 } 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 imagenBase64.i18n[locale]?.();
12
+ if (!content) return null;
13
+ ---
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -1,15 +1,15 @@
1
- ---
2
- import { SEORenderer } from '@jjlmoya/utils-shared';
3
- import { jpgAIco } 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 jpgAIco.i18n[locale]?.();
12
- if (!content) return null;
13
- ---
14
-
15
- {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { jpgAIco } 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 jpgAIco.i18n[locale]?.();
12
+ if (!content) return null;
13
+ ---
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}