@jjlmoya/utils-audiovisual 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +60 -0
- package/src/category/i18n/en.ts +198 -0
- package/src/category/i18n/es.ts +198 -0
- package/src/category/i18n/fr.ts +198 -0
- package/src/category/index.ts +17 -0
- package/src/category/seo.astro +15 -0
- package/src/components/PreviewNavSidebar.astro +116 -0
- package/src/components/PreviewToolbar.astro +143 -0
- package/src/data.ts +4 -0
- package/src/env.d.ts +5 -0
- package/src/index.ts +32 -0
- package/src/layouts/PreviewLayout.astro +117 -0
- package/src/pages/[locale]/[slug].astro +146 -0
- package/src/pages/[locale].astro +251 -0
- package/src/pages/index.astro +4 -0
- package/src/tests/faq_count.test.ts +19 -0
- package/src/tests/locale_completeness.test.ts +42 -0
- package/src/tests/mocks/astro_mock.js +2 -0
- package/src/tests/no_h1_in_components.test.ts +48 -0
- package/src/tests/seo_length.test.ts +22 -0
- package/src/tests/tool_validation.test.ts +17 -0
- package/src/tool/chromaticLens/bibliography.astro +17 -0
- package/src/tool/chromaticLens/component.astro +178 -0
- package/src/tool/chromaticLens/i18n/en.ts +246 -0
- package/src/tool/chromaticLens/i18n/es.ts +244 -0
- package/src/tool/chromaticLens/i18n/fr.ts +244 -0
- package/src/tool/chromaticLens/index.ts +43 -0
- package/src/tool/chromaticLens/logic.ts +87 -0
- package/src/tool/chromaticLens/seo.astro +15 -0
- package/src/tool/chromaticLens/style.css +308 -0
- package/src/tool/chromaticLens/ui.ts +109 -0
- package/src/tool/collageMaker/bibliography.astro +17 -0
- package/src/tool/collageMaker/component.astro +302 -0
- package/src/tool/collageMaker/i18n/en.ts +233 -0
- package/src/tool/collageMaker/i18n/es.ts +231 -0
- package/src/tool/collageMaker/i18n/fr.ts +231 -0
- package/src/tool/collageMaker/index.ts +51 -0
- package/src/tool/collageMaker/logic.ts +134 -0
- package/src/tool/collageMaker/seo.astro +15 -0
- package/src/tool/collageMaker/style.css +386 -0
- package/src/tool/exifCleaner/bibliography.astro +18 -0
- package/src/tool/exifCleaner/component.astro +162 -0
- package/src/tool/exifCleaner/i18n/en.ts +277 -0
- package/src/tool/exifCleaner/i18n/es.ts +277 -0
- package/src/tool/exifCleaner/i18n/fr.ts +277 -0
- package/src/tool/exifCleaner/index.ts +57 -0
- package/src/tool/exifCleaner/logic.ts +135 -0
- package/src/tool/exifCleaner/seo.astro +18 -0
- package/src/tool/exifCleaner/style.css +289 -0
- package/src/tool/exifCleaner/ui.ts +117 -0
- package/src/tool/imageCompressor/bibliography.astro +17 -0
- package/src/tool/imageCompressor/component.astro +262 -0
- package/src/tool/imageCompressor/i18n/en.ts +232 -0
- package/src/tool/imageCompressor/i18n/es.ts +230 -0
- package/src/tool/imageCompressor/i18n/fr.ts +230 -0
- package/src/tool/imageCompressor/index.ts +50 -0
- package/src/tool/imageCompressor/logic.ts +79 -0
- package/src/tool/imageCompressor/seo.astro +15 -0
- package/src/tool/imageCompressor/style.css +503 -0
- package/src/tool/printQualityCalculator/bibliography.astro +18 -0
- package/src/tool/printQualityCalculator/component.astro +318 -0
- package/src/tool/printQualityCalculator/i18n/en.ts +247 -0
- package/src/tool/printQualityCalculator/i18n/es.ts +245 -0
- package/src/tool/printQualityCalculator/i18n/fr.ts +245 -0
- package/src/tool/printQualityCalculator/index.ts +56 -0
- package/src/tool/printQualityCalculator/logic.ts +53 -0
- package/src/tool/printQualityCalculator/seo.astro +18 -0
- package/src/tool/printQualityCalculator/style.css +491 -0
- package/src/tool/printQualityCalculator/ui.ts +122 -0
- package/src/tool/privacyBlur/bibliography.astro +17 -0
- package/src/tool/privacyBlur/component.astro +230 -0
- package/src/tool/privacyBlur/i18n/en.ts +238 -0
- package/src/tool/privacyBlur/i18n/es.ts +236 -0
- package/src/tool/privacyBlur/i18n/fr.ts +236 -0
- package/src/tool/privacyBlur/index.ts +49 -0
- package/src/tool/privacyBlur/logic.ts +249 -0
- package/src/tool/privacyBlur/seo.astro +15 -0
- package/src/tool/privacyBlur/style.css +332 -0
- package/src/tool/privacyBlur/ui.ts +124 -0
- package/src/tool/subtitleSync/bibliography.astro +17 -0
- package/src/tool/subtitleSync/component.astro +187 -0
- package/src/tool/subtitleSync/i18n/en.ts +241 -0
- package/src/tool/subtitleSync/i18n/es.ts +241 -0
- package/src/tool/subtitleSync/i18n/fr.ts +241 -0
- package/src/tool/subtitleSync/index.ts +49 -0
- package/src/tool/subtitleSync/logic.ts +91 -0
- package/src/tool/subtitleSync/seo.astro +15 -0
- package/src/tool/subtitleSync/style.css +325 -0
- package/src/tool/subtitleSync/ui.ts +152 -0
- package/src/tool/timelapseCalculator/bibliography.astro +15 -0
- package/src/tool/timelapseCalculator/component.astro +148 -0
- package/src/tool/timelapseCalculator/i18n/en.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/es.ts +169 -0
- package/src/tool/timelapseCalculator/i18n/fr.ts +169 -0
- package/src/tool/timelapseCalculator/index.ts +52 -0
- package/src/tool/timelapseCalculator/logic.ts +46 -0
- package/src/tool/timelapseCalculator/seo.astro +18 -0
- package/src/tool/timelapseCalculator/style.css +285 -0
- package/src/tool/tvDistance/bibliography.astro +17 -0
- package/src/tool/tvDistance/component.astro +178 -0
- package/src/tool/tvDistance/i18n/en.ts +223 -0
- package/src/tool/tvDistance/i18n/es.ts +223 -0
- package/src/tool/tvDistance/i18n/fr.ts +223 -0
- package/src/tool/tvDistance/index.ts +49 -0
- package/src/tool/tvDistance/logic.ts +47 -0
- package/src/tool/tvDistance/seo.astro +15 -0
- package/src/tool/tvDistance/style.css +435 -0
- package/src/tool/tvDistance/ui.ts +66 -0
- package/src/tool/videoFrameExtractor/bibliography.astro +17 -0
- package/src/tool/videoFrameExtractor/component.astro +285 -0
- package/src/tool/videoFrameExtractor/i18n/en.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/es.ts +235 -0
- package/src/tool/videoFrameExtractor/i18n/fr.ts +235 -0
- package/src/tool/videoFrameExtractor/index.ts +53 -0
- package/src/tool/videoFrameExtractor/logic.ts +49 -0
- package/src/tool/videoFrameExtractor/seo.astro +15 -0
- package/src/tool/videoFrameExtractor/style.css +426 -0
- package/src/tool/videoFrameExtractor/ui.ts +179 -0
- package/src/tools.ts +25 -0
- package/src/types.ts +72 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ChromaticLensUI, ChromaticLensLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'chromatic-lens-color-palette-extraction-online';
|
|
5
|
+
const title = 'Chromatic Lens - Online Color Palette Extraction';
|
|
6
|
+
const description = 'Extract professional color palettes from any image for free. Identify dominant colors in your photos using mathematical algorithms.';
|
|
7
|
+
|
|
8
|
+
const ui: ChromaticLensUI = {
|
|
9
|
+
dropTitle: "Analyze Colors",
|
|
10
|
+
dropSubtitle: "Drag an image to extract its chromatic DNA.",
|
|
11
|
+
processingLabel: "Extracting palette...",
|
|
12
|
+
paletteTitle: "Extracted Palette",
|
|
13
|
+
copyLabel: "Copy HEX",
|
|
14
|
+
copiedLabel: "Copied!",
|
|
15
|
+
colorCountLabel: "Number of colors",
|
|
16
|
+
changeImage: "Change image",
|
|
17
|
+
faqTitle: "Frequently asked questions about color extraction",
|
|
18
|
+
bibliographyTitle: "Resources and technical documentation"
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const faq: ChromaticLensLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: "How does color extraction work?",
|
|
24
|
+
answer: "We use the 'Median Cut' algorithm, which groups image pixels according to their proximity in RGB color space to find the most representative tones.",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: "Can I copy colors to my design editor?",
|
|
28
|
+
answer: "Yes, by clicking on each color, the HEX code will be automatically copied to your clipboard, ready to paste into Photoshop, Figma, or CSS.",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
question: "What types of images can I analyze?",
|
|
32
|
+
answer: "Any JPG, PNG, or WebP file. Processing is local, so large images will be analyzed quickly without consuming network data.",
|
|
33
|
+
},
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
const howTo: ChromaticLensLocaleContent['howTo'] = [
|
|
37
|
+
{
|
|
38
|
+
name: "Upload the image",
|
|
39
|
+
text: "Upload the photograph from which you want to extract chromatic inspiration.",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: "Adjust precision",
|
|
43
|
+
text: "Select how many dominant colors you want the tool to identify (from 3 to 12).",
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: "Analyze the result",
|
|
47
|
+
text: "The palette will appear instantly with its corresponding hexadecimal codes.",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: "Copy and use",
|
|
51
|
+
text: "Click on the tones to save them and apply them to your design project.",
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
const bibliography: ChromaticLensLocaleContent['bibliography'] = [
|
|
56
|
+
{
|
|
57
|
+
name: "Median Cut Algorithm - Wikipedia",
|
|
58
|
+
url: "https://en.wikipedia.org/wiki/Median_cut",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: "Color Theory for Designers",
|
|
62
|
+
url: "https://www.smashingmagazine.com/2010/01/color-theory-for-designers-part-1-the-meaning-of-color/",
|
|
63
|
+
},
|
|
64
|
+
];
|
|
65
|
+
|
|
66
|
+
const seo: ChromaticLensLocaleContent['seo'] = [
|
|
67
|
+
{
|
|
68
|
+
type: 'summary',
|
|
69
|
+
title: 'Intelligent Color Palette Extraction',
|
|
70
|
+
items: [
|
|
71
|
+
'Professional Median Cut algorithm for color analysis',
|
|
72
|
+
'Extract 3-12 dominant colors from any image',
|
|
73
|
+
'HEX codes clonable directly to the clipboard',
|
|
74
|
+
'100% local processing - ideal for creatives'
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
{ type: 'title', text: 'Color Palette Extraction: Science and Design', level: 2 },
|
|
78
|
+
{ type: 'paragraph', html: 'Have you ever wondered why a movie photograph feels so harmonious? It\'s not a coincidence; it\'s color theory in action. Chromatic Lens allows you to extract that harmony directly from the pixel, transforming it into HEX codes usable in your design projects.' },
|
|
79
|
+
|
|
80
|
+
{ type: 'stats', items: [
|
|
81
|
+
{ value: 'Instant', label: 'Color Analysis', icon: 'mdi:lightning-bolt' },
|
|
82
|
+
{ value: '100%', label: 'Local Privacy', icon: 'mdi:lock' },
|
|
83
|
+
{ value: 'RGB', label: 'Precise Color Space', icon: 'mdi:palette' }
|
|
84
|
+
], columns: 3 },
|
|
85
|
+
|
|
86
|
+
{ type: 'title', text: 'The Median Cut Algorithm Explained', level: 3 },
|
|
87
|
+
{ type: 'paragraph', html: 'Intelligent palette extraction is not a simple random sampling of pixels. It uses the Median Cut algorithm, a recursive partitioning technique that ensures faithful representation:' },
|
|
88
|
+
{ type: 'list', items: [
|
|
89
|
+
'<strong>Recursive Division:</strong> The RGB "color cube" of the image is recursively divided into smaller boxes.',
|
|
90
|
+
'<strong>Volume Balance:</strong> Each partition seeks to group pixels from the same color space with similar volumes.',
|
|
91
|
+
'<strong>Weighted Average:</strong> The resulting color of each box is the average of all the pixels it contains.',
|
|
92
|
+
'<strong>Faithful Representation:</strong> The dominant colors reflect the real visual atmosphere of the image, not a simple sample.'
|
|
93
|
+
], icon: 'mdi:check' },
|
|
94
|
+
|
|
95
|
+
{ type: 'card', title: 'Creative Workflow', html: 'Ideal for web developers, UX/UI designers, digital artists, and creatives looking to instantly capture the visual essence of a photograph, film, or visual reference to apply in their interfaces, illustrations, or brand palettes.' },
|
|
96
|
+
|
|
97
|
+
{ type: 'title', text: 'Use Cases in Digital Design', level: 3 },
|
|
98
|
+
{ type: 'comparative', items: [
|
|
99
|
+
{
|
|
100
|
+
title: 'UX/UI Designers',
|
|
101
|
+
description: 'Extract palettes from hero images to create cohesive interfaces',
|
|
102
|
+
icon: 'mdi:palette',
|
|
103
|
+
points: [
|
|
104
|
+
'Harmonious background colors',
|
|
105
|
+
'Buttons and secondary elements',
|
|
106
|
+
'Automatically calculated contrast'
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
title: 'Web Developers',
|
|
111
|
+
description: 'Create CSS stylesheets directly from visual references',
|
|
112
|
+
icon: 'mdi:code-braces',
|
|
113
|
+
points: [
|
|
114
|
+
'Copy HEX directly to CSS',
|
|
115
|
+
'Color variables in SCSS/CSS',
|
|
116
|
+
'Cohesive themes without prior design'
|
|
117
|
+
],
|
|
118
|
+
highlight: true
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
title: 'Digital Artists and Illustrators',
|
|
122
|
+
description: 'Capture chromatic references from films, nature, or art',
|
|
123
|
+
icon: 'mdi:brush',
|
|
124
|
+
points: [
|
|
125
|
+
'Reference palettes from masterworks',
|
|
126
|
+
'Cinematic color studies',
|
|
127
|
+
'Immediate visual inspiration'
|
|
128
|
+
]
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
title: 'Branding Specialists',
|
|
132
|
+
description: 'Develop visual identities based on guide photographs',
|
|
133
|
+
icon: 'mdi:tag-multiple',
|
|
134
|
+
points: [
|
|
135
|
+
'Extract brand colors from images',
|
|
136
|
+
'Create professional chromatic guides',
|
|
137
|
+
'Ensure visual consistency'
|
|
138
|
+
]
|
|
139
|
+
}
|
|
140
|
+
], columns: 2 },
|
|
141
|
+
|
|
142
|
+
{ type: 'title', text: 'Applied Color Theory', level: 3 },
|
|
143
|
+
{ type: 'table', headers: ['Color Concept', 'Definition', 'Practical Application'], rows: [
|
|
144
|
+
['Chromatic Harmony', 'Color combination that is visually balanced', 'Cohesive visual identity in UI'],
|
|
145
|
+
['Contrast', 'Difference in brightness between colors', 'Readability and visual hierarchy'],
|
|
146
|
+
['Saturation', 'Color intensity of a tone', 'Professionalism (low) vs Energy (high)'],
|
|
147
|
+
['Color Temperature', 'Warm colors (reds) vs cool colors (blues)', 'Emotional psychology of design'],
|
|
148
|
+
['Monochromatic Palette', 'Variations of a single tone', 'Elegance and minimalism']
|
|
149
|
+
] },
|
|
150
|
+
|
|
151
|
+
{ type: 'proscons', items: [
|
|
152
|
+
{
|
|
153
|
+
pro: 'Mathematical precision in extraction - not an approximate visual selection',
|
|
154
|
+
con: 'Hardly visible colors may be included if they have many pixels'
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
pro: 'Instant copy to clipboard - perfect integration with workflow',
|
|
158
|
+
con: 'Needs a modern browser compatible with Canvas API'
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
pro: 'Total privacy - 100% local analysis without data submission',
|
|
162
|
+
con: 'No history of previous analyses saved'
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
pro: 'Compatible with any digital image format',
|
|
166
|
+
con: 'Final colors depend on image compression and quality'
|
|
167
|
+
}
|
|
168
|
+
], proTitle: 'Advantages', conTitle: 'Limitations' },
|
|
169
|
+
|
|
170
|
+
{ type: 'diagnostic', variant: 'success', title: 'Realistic Color Representation', icon: 'mdi:check-circle-outline', badge: 'Advanced Algorithm', html: 'Unlike tools that simply sample random pixels, our system uses the Median Cut algorithm that weights the entire pixel count of each tone, ensuring the resulting palette faithfully reflects the visual atmosphere and color psychology of the original image.' },
|
|
171
|
+
|
|
172
|
+
{ type: 'glossary', items: [
|
|
173
|
+
{
|
|
174
|
+
term: 'Median Cut',
|
|
175
|
+
definition: 'Color quantization algorithm that recursively divides RGB space into boxes, ensuring uniform distribution. Historically used in GIF and indexed color technology.'
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
term: 'RGB Color Space',
|
|
179
|
+
definition: 'Color model based on red, green, and blue. Each color is represented as a combination of these three values (0-255). Standard on digital screens and web.'
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
term: 'HEX Code',
|
|
183
|
+
definition: '6-digit hexadecimal notation (#RRGGBB) representing color on web: #FF0000 (red), #00FF00 (green), #0000FF (blue). Universal in CSS, Figma, and Adobe.'
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
term: 'Color Saturation',
|
|
187
|
+
definition: 'Intensity or purity of color. High saturation = vivid color; low saturation = grayish color. Affects the emotional perception of the design.'
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
term: 'Chromatic Harmony',
|
|
191
|
+
definition: 'Selection and combination of colors result in a visually pleasing result. It can be monochromatic, complementary, analogous, or triadic.'
|
|
192
|
+
}
|
|
193
|
+
] },
|
|
194
|
+
|
|
195
|
+
{ type: 'message', title: 'Professional Chromatic Analysis', ariaLabel: 'Technical information about color analysis', html: 'Chromatic Lens transforms manual visual analysis into algorithmic precision. It doesn\'t just extract colors: it captures the emotional and visual essence of any image, putting it directly on your clipboard as ready-to-use HEX codes. Total privacy, no limits on analysis volume.' },
|
|
196
|
+
|
|
197
|
+
{ type: 'title', text: 'Design from Visual Inspiration', level: 3 },
|
|
198
|
+
{ type: 'paragraph', html: 'The best color palette is the one that captures the visual intent of your reference. Chromatic Lens automates what used to be a manual process: observe, analyze, note. Now, simply drag an image and get professional HEX codes in seconds.' }
|
|
199
|
+
];
|
|
200
|
+
|
|
201
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
202
|
+
'@context': 'https://schema.org',
|
|
203
|
+
'@type': 'FAQPage',
|
|
204
|
+
mainEntity: faq.map((item) => ({
|
|
205
|
+
'@type': 'Question',
|
|
206
|
+
name: item.question,
|
|
207
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
208
|
+
})),
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
const howToSchema: WithContext<HowTo> = {
|
|
212
|
+
'@context': 'https://schema.org',
|
|
213
|
+
'@type': 'HowTo',
|
|
214
|
+
name: title,
|
|
215
|
+
description,
|
|
216
|
+
step: howTo.map((step) => ({
|
|
217
|
+
'@type': 'HowToStep',
|
|
218
|
+
name: step.name,
|
|
219
|
+
text: step.text,
|
|
220
|
+
})),
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
224
|
+
'@context': 'https://schema.org',
|
|
225
|
+
'@type': 'SoftwareApplication',
|
|
226
|
+
name: title,
|
|
227
|
+
description,
|
|
228
|
+
applicationCategory: 'UtilitiesApplication',
|
|
229
|
+
operatingSystem: 'Web',
|
|
230
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
231
|
+
inLanguage: 'en',
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
export const content: ChromaticLensLocaleContent = {
|
|
235
|
+
slug,
|
|
236
|
+
title,
|
|
237
|
+
description,
|
|
238
|
+
ui,
|
|
239
|
+
seo,
|
|
240
|
+
faqTitle: "Frequently Asked Questions",
|
|
241
|
+
faq,
|
|
242
|
+
bibliographyTitle: "References",
|
|
243
|
+
bibliography,
|
|
244
|
+
howTo,
|
|
245
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
246
|
+
};
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ChromaticLensUI, ChromaticLensLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'lente-cromatica';
|
|
5
|
+
const title = 'Lente Cromática - Extracción de Paletas de Color Online';
|
|
6
|
+
const description = 'Extrae paletas de colores profesionales de cualquier imagen de forma gratuita. Identifica los colores dominantes de tus fotos mediante algoritmos matemáticos.';
|
|
7
|
+
|
|
8
|
+
const ui: ChromaticLensUI = {
|
|
9
|
+
dropTitle: "Analizar Colores",
|
|
10
|
+
dropSubtitle: "Arrastra una imagen para extraer su ADN cromático.",
|
|
11
|
+
processingLabel: "Extrayendo paleta...",
|
|
12
|
+
paletteTitle: "Paleta Extraída",
|
|
13
|
+
copyLabel: "Copiar HEX",
|
|
14
|
+
copiedLabel: "¡Copiado!",
|
|
15
|
+
colorCountLabel: "Número de colores",
|
|
16
|
+
changeImage: "Cambiar imagen"
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const faq: ChromaticLensLocaleContent['faq'] = [
|
|
20
|
+
{
|
|
21
|
+
question: "¿Cómo funciona la extracción de colores?",
|
|
22
|
+
answer: "Utilizamos el algoritmo 'Median Cut', que agrupa los píxeles de la imagen según su proximidad en el espacio de color RGB para encontrar los tonos más representativos.",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
question: "¿Puedo copiar los colores a mi editor de diseño?",
|
|
26
|
+
answer: "Sí, al hacer clic en cada color se copiará automáticamente el código HEX al portapapeles, listo para pegar en Photoshop, Figma o CSS.",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
question: "¿Qué tipos de imágenes puedo analizar?",
|
|
30
|
+
answer: "Cualquier archivo JPG, PNG o WebP. El procesamiento es local, por lo que imágenes pesadas se analizarán rápidamente sin consumir datos de red.",
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
const howTo: ChromaticLensLocaleContent['howTo'] = [
|
|
35
|
+
{
|
|
36
|
+
name: "Carga la imagen",
|
|
37
|
+
text: "Sube la fotografía de la que quieras extraer la inspiración cromática.",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: "Ajusta la precisión",
|
|
41
|
+
text: "Selecciona cuántos colores dominantes quieres que la herramienta identifique (de 3 a 12).",
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: "Analiza el resultado",
|
|
45
|
+
text: "La paleta aparecerá instantáneamente con sus códigos hexadecimales correspondientes.",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: "Copia y utiliza",
|
|
49
|
+
text: "Haz clic en los tonos para guardarlos y aplicarlos a tu proyecto de diseño.",
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
const bibliography: ChromaticLensLocaleContent['bibliography'] = [
|
|
54
|
+
{
|
|
55
|
+
name: "Median Cut Algorithm - Wikipedia",
|
|
56
|
+
url: "https://en.wikipedia.org/wiki/Median_cut",
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: "Color Theory for Designers",
|
|
60
|
+
url: "https://www.smashingmagazine.com/2010/01/color-theory-for-designers-part-1-the-meaning-of-color/",
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
|
|
64
|
+
const seo: ChromaticLensLocaleContent['seo'] = [
|
|
65
|
+
{
|
|
66
|
+
type: 'summary',
|
|
67
|
+
title: 'Extracción Inteligente de Paletas de Color',
|
|
68
|
+
items: [
|
|
69
|
+
'Algoritmo Median Cut profesional para análisis de color',
|
|
70
|
+
'Extrae 3-12 colores dominantes de cualquier imagen',
|
|
71
|
+
'Códigos HEX copiables directamente al portapapeles',
|
|
72
|
+
'Procesamiento 100% local - ideal para creativos'
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
{ type: 'title', text: 'Extracción de Paletas de Color: Ciencia y Diseño', level: 2 },
|
|
76
|
+
{ type: 'paragraph', html: '¿Alguna vez te has preguntado por qué una fotografía de cine se siente tan armoniosa? No es casualidad; es la teoría del color en acción. Lente Cromática te permite extraer esa armonía directamente del píxel, transformándola en códigos HEX utilizables en tus proyectos de diseño.' },
|
|
77
|
+
|
|
78
|
+
{ type: 'stats', items: [
|
|
79
|
+
{ value: 'Instant', label: 'Análisis de Color', icon: 'mdi:lightning-bolt' },
|
|
80
|
+
{ value: '100%', label: 'Privacidad Local', icon: 'mdi:lock' },
|
|
81
|
+
{ value: 'RGB', label: 'Espacio de Color Preciso', icon: 'mdi:palette' }
|
|
82
|
+
], columns: 3 },
|
|
83
|
+
|
|
84
|
+
{ type: 'title', text: 'El Algoritmo Median Cut Explicado', level: 3 },
|
|
85
|
+
{ type: 'paragraph', html: 'La extracción inteligente de paletas no es un simple muestreo aleatorio de píxeles. Utiliza el algoritmo Median Cut, una técnica de particionamiento recursivo que garantiza representación fiel:' },
|
|
86
|
+
{ type: 'list', items: [
|
|
87
|
+
'<strong>División Recursiva:</strong> El "cubo de color" RGB de la imagen se divide recursivamente en cajas más pequeñas.',
|
|
88
|
+
'<strong>Equilibrio de Volumen:</strong> Cada partición busca agrupar píxeles del mismo espacio de color con volúmenes similares.',
|
|
89
|
+
'<strong>Promedio Ponderado:</strong> El color resultante de cada caja es el promedio de todos los píxeles que contiene.',
|
|
90
|
+
'<strong>Representación Fiel:</strong> Los colores dominantes reflejan la atmósfera visual real de la imagen, no un simple muestreo.'
|
|
91
|
+
], icon: 'mdi:check' },
|
|
92
|
+
|
|
93
|
+
{ type: 'card', title: 'Flujo de Trabajo Creativo', html: 'Ideal para desarrolladores web, diseñadores UX/UI, artistas digitales y creativos que buscan capturar instantáneamente la esencia visual de una fotografía, película o referencia visual para aplicarla en sus interfaces, ilustraciones o paletas de marca.' },
|
|
94
|
+
|
|
95
|
+
{ type: 'title', text: 'Casos de Uso en Diseño Digital', level: 3 },
|
|
96
|
+
{ type: 'comparative', items: [
|
|
97
|
+
{
|
|
98
|
+
title: 'Diseñadores de Interfaz (UX/UI)',
|
|
99
|
+
description: 'Extraer paletas de imágenes hero para crear interfaces cohesivas',
|
|
100
|
+
icon: 'mdi:palette',
|
|
101
|
+
points: [
|
|
102
|
+
'Colores de fondo armónicos',
|
|
103
|
+
'Botones y elementos secundarios',
|
|
104
|
+
'Contraste calculado automáticamente'
|
|
105
|
+
]
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
title: 'Desarrolladores Web',
|
|
109
|
+
description: 'Crear hojas de estilo CSS directamente desde referencias visuales',
|
|
110
|
+
icon: 'mdi:code-braces',
|
|
111
|
+
points: [
|
|
112
|
+
'Copiar HEX directamente al CSS',
|
|
113
|
+
'Variables de color en SCSS/CSS',
|
|
114
|
+
'Temas cohesivos sin diseño previo'
|
|
115
|
+
],
|
|
116
|
+
highlight: true
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
title: 'Artistas Digitales e Ilustradores',
|
|
120
|
+
description: 'Capturar referencias cromáticas de películas, naturaleza o arte',
|
|
121
|
+
icon: 'mdi:brush',
|
|
122
|
+
points: [
|
|
123
|
+
'Paletas de referencia de obras maestras',
|
|
124
|
+
'Estudios de color cinematográfico',
|
|
125
|
+
'Inspiración visual inmediata'
|
|
126
|
+
]
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
title: 'Especialistas en Branding',
|
|
130
|
+
description: 'Desarrollar identidades visuales basadas en fotografías guía',
|
|
131
|
+
icon: 'mdi:tag-multiple',
|
|
132
|
+
points: [
|
|
133
|
+
'Extraer colores de marca de imágenes',
|
|
134
|
+
'Crear guías cromáticas profesionales',
|
|
135
|
+
'Asegurar consistencia visual'
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
], columns: 2 },
|
|
139
|
+
|
|
140
|
+
{ type: 'title', text: 'Teoría del Color Aplicada', level: 3 },
|
|
141
|
+
{ type: 'table', headers: ['Concepto de Color', 'Definición', 'Aplicación Práctica'], rows: [
|
|
142
|
+
['Armonía Cromática', 'Combinación de colores que resulta visualmente equilibrada', 'Identidad visual coherente en UI'],
|
|
143
|
+
['Contraste', 'Diferencia de luminosidad entre colores', 'Legibilidad y jerarquía visual'],
|
|
144
|
+
['Saturación', 'Intensidad del color de un tono', 'Profesionalismo (baja) vs Energía (alta)'],
|
|
145
|
+
['Temperatura de Color', 'Colores cálidos (rojos) vs fríos (azules)', 'Psicología emocional del diseño'],
|
|
146
|
+
['Paleta Monocromática', 'Variaciones de un solo tono', 'Elegancia y minimalismo']
|
|
147
|
+
] },
|
|
148
|
+
|
|
149
|
+
{ type: 'proscons', items: [
|
|
150
|
+
{
|
|
151
|
+
pro: 'Precisión matemática en extracción - no es una selección visual aproximada',
|
|
152
|
+
con: 'Pueden incluirse colores poco visibles si tienen gran cantidad de píxeles'
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
pro: 'Copia instantánea a portapapeles - integración perfecta con flujo de trabajo',
|
|
156
|
+
con: 'Necesita navegador moderno compatible con Canvas API'
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
pro: 'Privacidad total - análisis 100% local sin envío de datos',
|
|
160
|
+
con: 'Sin guardar historial de análisis previos'
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
pro: 'Compatible con cualquier formato de imagen digital',
|
|
164
|
+
con: 'Colores finales dependen de compresión y calidad de la imagen'
|
|
165
|
+
}
|
|
166
|
+
], proTitle: 'Ventajas', conTitle: 'Limitaciones' },
|
|
167
|
+
|
|
168
|
+
{ type: 'diagnostic', variant: 'success', title: 'Representación Realista de Color', icon: 'mdi:check-circle-outline', badge: 'Algoritmo Avanzado', html: 'A diferencia de herramientas que simplemente samplen píxeles aleatorios, nuestro sistema utiliza el algoritmo Median Cut que pondera toda la cantidad de píxeles de cada tono, asegurando que la paleta resultante sea un reflejo fiel de la atmósfera visual y psicología del color de la imagen original.' },
|
|
169
|
+
|
|
170
|
+
{ type: 'glossary', items: [
|
|
171
|
+
{
|
|
172
|
+
term: 'Median Cut',
|
|
173
|
+
definition: 'Algoritmo de cuantización de color que divide recursivamente el espacio RGB en cajas, garantizando distribución uniforme. Usado históricamente en GIF y tecnología de color indexado.'
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
term: 'Espacio de Color RGB',
|
|
177
|
+
definition: 'Modelo de color basado en rojo, verde y azul. Cada color se representa como combinación de estos tres valores (0-255). Estándar en pantallas digitales y web.'
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
term: 'Código HEX',
|
|
181
|
+
definition: 'Notación hexadecimal de 6 dígitos (#RRGGBB) que representa color en web: #FF0000 (rojo), #00FF00 (verde), #0000FF (azul). Universal en CSS, Figma y Adobe.'
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
term: 'Saturación de Color',
|
|
185
|
+
definition: 'Intensidad o pureza del color. Alta saturación = color vivo; baja saturación = color grisáceo. Afecta la percepción emocional del diseño.'
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
term: 'Armonía Cromática',
|
|
189
|
+
definition: 'Selección y combinación de colores que resulta visualmente agradable. Puede ser monocromática, complementaria, análoga o de triada.'
|
|
190
|
+
}
|
|
191
|
+
] },
|
|
192
|
+
|
|
193
|
+
{ type: 'message', title: 'Análisis Cromático Profesional', ariaLabel: 'Información técnica sobre análisis de color', html: 'Lente Cromática transforma análisis visual manual en precisión algorítmica. No solo extrae colores: captura la esencia emocional y visual de cualquier imagen, poniéndola directamente en tu portapapeles como códigos HEX listos para usar. Privacidad total, sin límites de cantidad de análisis.' },
|
|
194
|
+
|
|
195
|
+
{ type: 'title', text: 'Diseña Desde la Inspiración Visual', level: 3 },
|
|
196
|
+
{ type: 'paragraph', html: 'La mejor paleta de color es aquella que captura la intención visual de tu referencia. Lente Cromática automatiza lo que antes era un proceso manual: observar, analizar, anotar. Ahora, simplemente arrastra una imagen y obtén códigos HEX profesionales en segundos.' }
|
|
197
|
+
];
|
|
198
|
+
|
|
199
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
200
|
+
'@context': 'https://schema.org',
|
|
201
|
+
'@type': 'FAQPage',
|
|
202
|
+
mainEntity: faq.map((item) => ({
|
|
203
|
+
'@type': 'Question',
|
|
204
|
+
name: item.question,
|
|
205
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
206
|
+
})),
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
const howToSchema: WithContext<HowTo> = {
|
|
210
|
+
'@context': 'https://schema.org',
|
|
211
|
+
'@type': 'HowTo',
|
|
212
|
+
name: title,
|
|
213
|
+
description,
|
|
214
|
+
step: howTo.map((step) => ({
|
|
215
|
+
'@type': 'HowToStep',
|
|
216
|
+
name: step.name,
|
|
217
|
+
text: step.text,
|
|
218
|
+
})),
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
222
|
+
'@context': 'https://schema.org',
|
|
223
|
+
'@type': 'SoftwareApplication',
|
|
224
|
+
name: title,
|
|
225
|
+
description,
|
|
226
|
+
applicationCategory: 'UtilitiesApplication',
|
|
227
|
+
operatingSystem: 'Web',
|
|
228
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
229
|
+
inLanguage: 'es',
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
export const content: ChromaticLensLocaleContent = {
|
|
233
|
+
slug,
|
|
234
|
+
title,
|
|
235
|
+
description,
|
|
236
|
+
ui,
|
|
237
|
+
seo,
|
|
238
|
+
faq,
|
|
239
|
+
faqTitle: 'Preguntas frecuentes sobre paletas de color',
|
|
240
|
+
bibliography,
|
|
241
|
+
bibliographyTitle: 'Recursos técnicos sobre teoría del color',
|
|
242
|
+
howTo,
|
|
243
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
244
|
+
};
|