@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,14 @@
|
|
|
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
|
+
---
|
|
13
|
+
|
|
14
|
+
{content && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
.base64-container {
|
|
2
|
+
width: 100%;
|
|
3
|
+
margin-bottom: 2rem;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.base64-card {
|
|
7
|
+
background: var(--bg-surface);
|
|
8
|
+
border: 1px solid var(--border-base);
|
|
9
|
+
border-radius: 20px;
|
|
10
|
+
|
|
11
|
+
--card-shadow: rgba(0, 0, 0, 0.04);
|
|
12
|
+
--card-shadow-blur: 20px;
|
|
13
|
+
--card-shadow-y: 4px;
|
|
14
|
+
|
|
15
|
+
box-shadow: 0 var(--card-shadow-y) var(--card-shadow-blur) var(--card-shadow);
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
overflow: hidden;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@media (min-width: 800px) {
|
|
22
|
+
.base64-card {
|
|
23
|
+
flex-direction: row;
|
|
24
|
+
min-height: 550px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.upload-section {
|
|
28
|
+
width: 40%;
|
|
29
|
+
border-right: 1px solid var(--border-base);
|
|
30
|
+
background: var(--bg-muted);
|
|
31
|
+
padding: 3rem 2rem;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.result-section {
|
|
35
|
+
flex: 1;
|
|
36
|
+
padding: 3rem 2rem;
|
|
37
|
+
display: flex;
|
|
38
|
+
flex-direction: column;
|
|
39
|
+
gap: 2rem;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.upload-section {
|
|
44
|
+
display: flex;
|
|
45
|
+
flex-direction: column;
|
|
46
|
+
justify-content: center;
|
|
47
|
+
padding: 2rem;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.result-section {
|
|
51
|
+
padding: 2rem;
|
|
52
|
+
display: flex;
|
|
53
|
+
flex-direction: column;
|
|
54
|
+
gap: 1.5rem;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.drop-zone {
|
|
58
|
+
position: relative;
|
|
59
|
+
border: 2px dashed var(--border-base);
|
|
60
|
+
border-radius: 16px;
|
|
61
|
+
background: var(--bg-surface);
|
|
62
|
+
padding: 2rem 1rem;
|
|
63
|
+
text-align: center;
|
|
64
|
+
cursor: pointer;
|
|
65
|
+
transition: all 0.2s ease;
|
|
66
|
+
display: flex;
|
|
67
|
+
align-items: center;
|
|
68
|
+
justify-content: center;
|
|
69
|
+
min-height: 300px;
|
|
70
|
+
height: 100%;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.drop-zone:hover {
|
|
74
|
+
border-color: var(--accent);
|
|
75
|
+
background: var(--bg-muted);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.drop-content {
|
|
79
|
+
display: flex;
|
|
80
|
+
flex-direction: column;
|
|
81
|
+
align-items: center;
|
|
82
|
+
gap: 0.5rem;
|
|
83
|
+
pointer-events: none;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.upload-icon {
|
|
87
|
+
width: 40px;
|
|
88
|
+
height: 40px;
|
|
89
|
+
color: var(--text-muted);
|
|
90
|
+
margin-bottom: 0.5rem;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.drop-content h3 {
|
|
94
|
+
margin: 0;
|
|
95
|
+
font-size: 1.05rem;
|
|
96
|
+
font-weight: 700;
|
|
97
|
+
color: var(--text-base);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.drop-content p {
|
|
101
|
+
margin: 0;
|
|
102
|
+
font-size: 0.85rem;
|
|
103
|
+
color: var(--text-muted);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.file-input-native {
|
|
107
|
+
margin-top: 1.5rem;
|
|
108
|
+
padding: 0.5rem;
|
|
109
|
+
font-size: 0.85rem;
|
|
110
|
+
color: var(--text-muted);
|
|
111
|
+
background: var(--bg-surface);
|
|
112
|
+
border: 1px solid var(--border-base);
|
|
113
|
+
border-radius: 8px;
|
|
114
|
+
max-width: 100%;
|
|
115
|
+
cursor: pointer;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.drop-zone .file-input-native {
|
|
119
|
+
pointer-events: auto;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.preview-container {
|
|
123
|
+
position: absolute;
|
|
124
|
+
inset: 0;
|
|
125
|
+
background: var(--bg-surface);
|
|
126
|
+
z-index: 10;
|
|
127
|
+
display: flex;
|
|
128
|
+
flex-direction: column;
|
|
129
|
+
align-items: center;
|
|
130
|
+
justify-content: center;
|
|
131
|
+
padding: 1.25rem;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.preview-container.hidden {
|
|
135
|
+
display: none;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
#b64-image-preview {
|
|
139
|
+
max-width: 100%;
|
|
140
|
+
max-height: 250px;
|
|
141
|
+
object-fit: contain;
|
|
142
|
+
border-radius: 8px;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.clear-btn {
|
|
146
|
+
position: absolute;
|
|
147
|
+
top: 1rem;
|
|
148
|
+
right: 1rem;
|
|
149
|
+
background: var(--bg-surface);
|
|
150
|
+
border: 1px solid var(--border-base);
|
|
151
|
+
border-radius: 50%;
|
|
152
|
+
width: 32px;
|
|
153
|
+
height: 32px;
|
|
154
|
+
display: flex;
|
|
155
|
+
align-items: center;
|
|
156
|
+
justify-content: center;
|
|
157
|
+
color: var(--text-muted);
|
|
158
|
+
cursor: pointer;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.image-info {
|
|
162
|
+
position: absolute;
|
|
163
|
+
bottom: 1rem;
|
|
164
|
+
display: flex;
|
|
165
|
+
background: var(--bg-muted);
|
|
166
|
+
padding: 0.4rem 0.8rem;
|
|
167
|
+
border-radius: 8px;
|
|
168
|
+
border: 1px solid var(--border-base);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.info-pill {
|
|
172
|
+
font-size: 0.7rem;
|
|
173
|
+
font-weight: 600;
|
|
174
|
+
color: var(--text-muted);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.name-pill {
|
|
178
|
+
max-width: 120px;
|
|
179
|
+
overflow: hidden;
|
|
180
|
+
text-overflow: ellipsis;
|
|
181
|
+
white-space: nowrap;
|
|
182
|
+
padding-right: 0.5rem;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.size-pill {
|
|
186
|
+
color: var(--accent);
|
|
187
|
+
padding-left: 0.5rem;
|
|
188
|
+
border-left: 1px solid var(--border-base);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.output-group {
|
|
192
|
+
display: flex;
|
|
193
|
+
flex-direction: column;
|
|
194
|
+
gap: 0.5rem;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.output-header {
|
|
198
|
+
display: flex;
|
|
199
|
+
justify-content: space-between;
|
|
200
|
+
align-items: center;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.output-header label {
|
|
204
|
+
font-weight: 700;
|
|
205
|
+
color: var(--text-base);
|
|
206
|
+
font-size: 0.95rem;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.copy-btn {
|
|
210
|
+
background: var(--bg-surface);
|
|
211
|
+
border: 1px solid var(--border-base);
|
|
212
|
+
color: var(--text-base);
|
|
213
|
+
padding: 0.35rem 0.75rem;
|
|
214
|
+
border-radius: 6px;
|
|
215
|
+
font-size: 0.8rem;
|
|
216
|
+
font-weight: 700;
|
|
217
|
+
cursor: pointer;
|
|
218
|
+
transition: all 0.2s;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.copy-btn:hover {
|
|
222
|
+
background: var(--accent);
|
|
223
|
+
color: var(--text-on-accent);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.code-wrapper {
|
|
227
|
+
background: var(--bg-muted);
|
|
228
|
+
border: 1px solid var(--border-base);
|
|
229
|
+
border-radius: 12px;
|
|
230
|
+
padding: 1rem;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
textarea {
|
|
234
|
+
width: 100%;
|
|
235
|
+
min-height: 120px;
|
|
236
|
+
background: transparent;
|
|
237
|
+
border: none;
|
|
238
|
+
color: var(--text-base);
|
|
239
|
+
font-size: 0.85rem;
|
|
240
|
+
line-height: 1.5;
|
|
241
|
+
resize: none;
|
|
242
|
+
outline: none;
|
|
243
|
+
word-break: break-all;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.toast {
|
|
247
|
+
position: fixed;
|
|
248
|
+
bottom: 2rem;
|
|
249
|
+
left: 50%;
|
|
250
|
+
transform: translateX(-50%) translateY(20px);
|
|
251
|
+
background: var(--text-base);
|
|
252
|
+
color: var(--bg-surface);
|
|
253
|
+
padding: 0.75rem 1.5rem;
|
|
254
|
+
border-radius: 50px;
|
|
255
|
+
font-weight: 700;
|
|
256
|
+
font-size: 0.9rem;
|
|
257
|
+
display: flex;
|
|
258
|
+
align-items: center;
|
|
259
|
+
gap: 0.5rem;
|
|
260
|
+
|
|
261
|
+
--toast-shadow: rgba(0, 0, 0, 0.2);
|
|
262
|
+
--toast-shadow-y: 10px;
|
|
263
|
+
--toast-shadow-blur: 30px;
|
|
264
|
+
|
|
265
|
+
box-shadow: 0 var(--toast-shadow-y) var(--toast-shadow-blur) var(--toast-shadow);
|
|
266
|
+
opacity: 0;
|
|
267
|
+
pointer-events: none;
|
|
268
|
+
transition: all 0.2s;
|
|
269
|
+
z-index: 100;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
.toast.show {
|
|
273
|
+
opacity: 1;
|
|
274
|
+
transform: translateX(-50%) translateY(0);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
@media (max-width: 600px) {
|
|
278
|
+
.card-section {
|
|
279
|
+
padding: 1rem;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
.drop-zone {
|
|
283
|
+
min-height: 280px;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
@media (max-width: 768px) {
|
|
288
|
+
.card-section {
|
|
289
|
+
padding: 1.5rem;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.drop-zone {
|
|
293
|
+
min-height: 250px;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
textarea {
|
|
297
|
+
height: 120px;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { Bibliography as SharedBibliography } 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
|
+
---
|
|
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="jpg" to="ico" 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 { JpgAIcoLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'jpg-to-ico-converter';
|
|
6
|
+
const title = 'JPG to ICO Converter | Create Official Icons for Windows and Web';
|
|
7
|
+
const description =
|
|
8
|
+
'Convert JPG photos to ICO with real Microsoft binary headers. Automatic square crop. No file uploads. Free and private.';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: 'Drag JPG files...',
|
|
12
|
+
convertText: 'To convert them to ICO 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: JpgAIcoLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: 'Is the resulting ICO file natively compatible to customize Windows folders?',
|
|
24
|
+
answer:
|
|
25
|
+
'Yes, we create a 100% authentic Microsoft Icon Format file by inserting a standardized binary header at a low level into the image matrix.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'What happens to the proportion if my original JPG is a panoramic horizontal photo?',
|
|
29
|
+
answer:
|
|
30
|
+
'The rigid global ICO standard absolutely requires a perfectly square image. Our HTML5 JS engine will center your photo and crop the excess, guaranteeing a balanced result.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'Is it dangerous to upload corporate or personal JPG logos to the converter?',
|
|
34
|
+
answer:
|
|
35
|
+
'The Canvas engine in JavaScript rests in your own physical browser. Converting hundreds of photos to ICO does not send a single megabyte to any cloud in questionable countries.',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: JpgAIcoLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: 'Gather the original JPG photos',
|
|
42
|
+
text: 'Find and collect the conventional photos and deposit them by dropping them into our friendly square.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Watch the blind hexadecimal purification',
|
|
46
|
+
text: 'The re-encoding will natively and quickly insert metadata and headers asynchronously generating a strict pure icon in memory.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Compile multiple ZIP designs',
|
|
50
|
+
text: 'Finish the job by downloading everything massively in a compact package in just seconds.',
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
const bibliography: JpgAIcoLocaleContent['bibliography'] = [
|
|
55
|
+
{
|
|
56
|
+
name: 'ICO Iconographic Structure and System Usage',
|
|
57
|
+
url: 'https://en.wikipedia.org/wiki/ICO_(file_format)',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'JPEG.org Standards',
|
|
61
|
+
url: 'https://jpeg.org/',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const seo: JpgAIcoLocaleContent['seo'] = [
|
|
66
|
+
{
|
|
67
|
+
type: 'title',
|
|
68
|
+
text: 'Free Online JPG to ICO Converter',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
type: 'paragraph',
|
|
72
|
+
html:
|
|
73
|
+
'Converting JPG to ICO is necessary when you want to create custom icons for Windows, Favicons for websites or visual identifiers for applications. Microsoft\'s ICO format is the standard for all these uses and our converter generates genuine ICO files with the correct binary structure.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'paragraph',
|
|
77
|
+
html:
|
|
78
|
+
'An important technical consideration when converting JPG to ICO is image proportion. The ICO format requires square images. If your original JPG is rectangular, our converter will center and automatically crop it to fit in a square format, preserving the central part of the image.',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'tip',
|
|
82
|
+
html:
|
|
83
|
+
'For better quality icons, always use a high-resolution square JPG (at least 256x256) as source. The converter will resize to the standard ICO size maintaining maximum possible sharpness.',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
type: 'paragraph',
|
|
87
|
+
html:
|
|
88
|
+
'ICO files for Windows can contain multiple resolutions (16x16, 32x32, 48x48, 256x256) in a single file. Our converter generates the ICO at the optimal resolution based on your source image.',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
type: 'paragraph',
|
|
92
|
+
html:
|
|
93
|
+
'Since JPG has no alpha channel, the resulting ICO will not have transparency. For icons with transparency, we recommend first removing the background in an image editor, saving as PNG and then converting from PNG to ICO to get an icon with perfect transparency.',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
type: 'paragraph',
|
|
97
|
+
html:
|
|
98
|
+
'Convert JPG to authentic ICO with real binary headers. Automatic crop for square format. Free, private and compatible with Windows and all browsers.',
|
|
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: JpgAIcoLocaleContent = {
|
|
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 { JpgAIcoLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'convertidor-jpg-a-ico';
|
|
6
|
+
const title = 'Convertidor de JPG a ICO | Crea iconos oficiales para Windows y Web';
|
|
7
|
+
const description =
|
|
8
|
+
'Convierte fotos JPG a ICO con cabeceras binarias reales de Microsoft. Recorte automático cuadrado. Sin subir archivos. Gratis y privado.';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: 'Arrastra archivos JPG...',
|
|
12
|
+
convertText: 'Para convertirlos a ICO 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: JpgAIcoLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: '¿El archivo ICO que resulta es compatible nativamente para personalizar carpetas Windows?',
|
|
24
|
+
answer:
|
|
25
|
+
'Sí, creamos un archivo Microsoft Icon Format 100% auténtico insertando a bajo nivel una cabecera binaria estandarizada a la matriz de imagen.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: '¿Qué pasa con la proporción si mi JPG original es una foto horizontal panorámica?',
|
|
29
|
+
answer:
|
|
30
|
+
'El estándar rígido global del ICO requiere obligatoriamente una imagen perfectamente cuadrada. Nuestro motor JS HTML5 centrará tu foto y recortará los excedentes garantizando un resultado equilibrado.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: '¿Es peligroso subir corporativos o logotipos personales JPG al conversor?',
|
|
34
|
+
answer:
|
|
35
|
+
'El motor Canvas en JavaScript descansa en tu propio explorador físico. Convertir cientos de fotos a ICO no manda un solo megabyte hacia ninguna nube en países dudosos.',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: JpgAIcoLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: 'Junta las Fotocopias JPG Originales',
|
|
42
|
+
text: 'Busca y acapara las fotos convencionales y deposítalas tirándolas en nuestro cuadrado amigable.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Observa la Purificación Hexadecimal Ciega',
|
|
46
|
+
text: 'La recodificación insertará nativa y velozmente los metadatos y encabezados generando asincrónico por memoria un estricto icono puro.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Compila Múltiples Diseños ZIP',
|
|
50
|
+
text: 'Termina la labor descargando todo masivamente en paquete compacto en pocos segundos.',
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
const bibliography: JpgAIcoLocaleContent['bibliography'] = [
|
|
55
|
+
{
|
|
56
|
+
name: 'Estructura Iconográfica y Uso en Sistemas ICO',
|
|
57
|
+
url: 'https://en.wikipedia.org/wiki/ICO_(file_format)',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'JPEG.org Standards',
|
|
61
|
+
url: 'https://jpeg.org/',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const seo: JpgAIcoLocaleContent['seo'] = [
|
|
66
|
+
{
|
|
67
|
+
type: 'title',
|
|
68
|
+
text: 'Convertidor JPG a ICO Online Gratuito',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
type: 'paragraph',
|
|
72
|
+
html:
|
|
73
|
+
'Convertir JPG a ICO es necesario cuando quieres crear iconos personalizados para Windows, Favicons para sitios web o identificadores visuales para aplicaciones. El formato ICO de Microsoft es el estándar para todos estos usos y nuestro convertidor genera archivos ICO genuinos con la estructura binaria correcta.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'paragraph',
|
|
77
|
+
html:
|
|
78
|
+
'Una consideración técnica importante al convertir JPG a ICO es la proporción de la imagen. El formato ICO requiere imágenes cuadradas. Si tu foto JPG original es rectangular (horizontal o vertical), nuestro convertidor la centrará y recortará automáticamente para que quepa en un formato cuadrado, preservando la parte central de la imagen.',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html:
|
|
83
|
+
'Como el JPG no tiene canal alfa, el ICO resultante no tendrá transparencia. Para iconos con transparencia, te recomendamos primero eliminar el fondo en un editor de imágenes, guardar como PNG y luego convertir de PNG a ICO para obtener un icono con transparencia perfecta.',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
type: 'tip',
|
|
87
|
+
html:
|
|
88
|
+
'Para iconos de mejor calidad, usa siempre una imagen JPG cuadrada de alta resolución (al menos 256x256) como fuente. El convertidor redimensionará al tamaño ICO estándar manteniendo la máxima nitidez posible.',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
type: 'paragraph',
|
|
92
|
+
html:
|
|
93
|
+
'Los archivos ICO para Windows pueden contener múltiples resoluciones (16x16, 32x32, 48x48, 256x256) en un mismo archivo. Nuestro convertidor genera el ICO en la resolución óptima según tu imagen de origen.',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
type: 'paragraph',
|
|
97
|
+
html:
|
|
98
|
+
'Convierte JPG a ICO auténtico con cabeceras binarias reales. Recorte automático para formato cuadrado. Gratis, privado y compatible con Windows y todos los navegadores.',
|
|
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: JpgAIcoLocaleContent = {
|
|
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 { JpgAIcoLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'convertisseur-jpg-en-ico';
|
|
6
|
+
const title = 'Convertisseur JPG vers ICO | Créez des Icônes Officielles pour Windows et Web';
|
|
7
|
+
const description =
|
|
8
|
+
'Convertissez des photos JPG en ICO avec de vrais en-têtes binaires Microsoft. Recadrage carré automatique. Sans téléchargement. Gratuit et privé.';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: 'Faites glisser des fichiers JPG...',
|
|
12
|
+
convertText: 'Pour les convertir en ICO 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: JpgAIcoLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: 'Le fichier ICO résultant est-il nativement compatible pour personnaliser les dossiers Windows ?',
|
|
24
|
+
answer:
|
|
25
|
+
'Oui, nous créons un fichier Microsoft Icon Format 100% authentique en insérant un en-tête binaire standardisé à bas niveau dans la matrice d\'image.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Que se passe-t-il avec la proportion si mon JPG original est une photo horizontale panoramique ?',
|
|
29
|
+
answer:
|
|
30
|
+
'Le standard ICO mondial rigide exige absolument une image parfaitement carrée. Notre moteur JS HTML5 centrera votre photo et rognera les excédents, garantissant un résultat équilibré.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'Est-il dangereux de télécharger des logos JPG corporatifs ou personnels dans le convertisseur ?',
|
|
34
|
+
answer:
|
|
35
|
+
'Le moteur Canvas en JavaScript repose dans votre propre navigateur physique. Convertir des centaines de photos en ICO n\'envoie pas un seul mégaoctet vers n\'importe quel cloud.',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: JpgAIcoLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: 'Rassemblez les photos JPG originales',
|
|
42
|
+
text: 'Trouvez et collectez les photos conventionnelles et déposez-les en les faisant glisser dans notre carré convivial.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Regardez la purification hexadécimale aveugle',
|
|
46
|
+
text: 'Le réencodage insérera nativement et rapidement les métadonnées et en-têtes générant de manière asynchrone une icône pure stricte en mémoire.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Compilez plusieurs designs ZIP',
|
|
50
|
+
text: 'Terminez le travail en téléchargeant tout massivement dans un package compact en quelques secondes.',
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
const bibliography: JpgAIcoLocaleContent['bibliography'] = [
|
|
55
|
+
{
|
|
56
|
+
name: 'Structure Iconographique ICO et Utilisation Système',
|
|
57
|
+
url: 'https://en.wikipedia.org/wiki/ICO_(file_format)',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'Standards JPEG.org',
|
|
61
|
+
url: 'https://jpeg.org/',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const seo: JpgAIcoLocaleContent['seo'] = [
|
|
66
|
+
{
|
|
67
|
+
type: 'title',
|
|
68
|
+
text: 'Convertisseur JPG vers ICO en Ligne Gratuit',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
type: 'paragraph',
|
|
72
|
+
html:
|
|
73
|
+
'Convertir JPG en ICO est nécessaire lorsque vous voulez créer des icônes personnalisées pour Windows, des Favicons pour des sites web ou des identificateurs visuels pour des applications. Le format ICO de Microsoft est le standard pour tous ces usages et notre convertisseur génère de vrais fichiers ICO avec la structure binaire correcte.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'paragraph',
|
|
77
|
+
html:
|
|
78
|
+
'Une considération technique importante lors de la conversion JPG en ICO est la proportion de l\'image. Le format ICO nécessite des images carrées. Si votre JPG original est rectangulaire, notre convertisseur le centrera et le recadrera automatiquement pour s\'adapter à un format carré, préservant la partie centrale de l\'image.',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'tip',
|
|
82
|
+
html:
|
|
83
|
+
'Pour des icônes de meilleure qualité, utilisez toujours un JPG carré haute résolution (au moins 256x256) comme source. Le convertisseur redimensionnera à la taille ICO standard en maintenant la netteté maximale possible.',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
type: 'paragraph',
|
|
87
|
+
html:
|
|
88
|
+
'Les fichiers ICO pour Windows peuvent contenir plusieurs résolutions (16x16, 32x32, 48x48, 256x256) dans un même fichier. Notre convertisseur génère l\'ICO à la résolution optimale selon votre image source.',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
type: 'paragraph',
|
|
92
|
+
html:
|
|
93
|
+
'Convertissez JPG en ICO authentique avec de vrais en-têtes binaires. Recadrage automatique pour format carré. Gratuit, privé et compatible avec Windows et tous les navigateurs.',
|
|
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: JpgAIcoLocaleContent = {
|
|
109
|
+
slug,
|
|
110
|
+
title,
|
|
111
|
+
description,
|
|
112
|
+
ui,
|
|
113
|
+
seo,
|
|
114
|
+
faq,
|
|
115
|
+
bibliography,
|
|
116
|
+
howTo,
|
|
117
|
+
schemas: [appSchema as any],
|
|
118
|
+
};
|