@jjlmoya/utils-games-development 1.54.0 → 1.56.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 +1 -1
- package/src/entries.ts +7 -1
- package/src/index.ts +2 -0
- package/src/tests/contrast_legibility.test.ts +291 -0
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/itchioGameTester/itchio-game-tester.css +3 -3
- package/src/tool/localizationSanitizer/localization-sanitizer.css +17 -15
- package/src/tool/pixelArtPaletteSwapper/app-client.ts +229 -0
- package/src/tool/pixelArtPaletteSwapper/bibliography.astro +6 -0
- package/src/tool/pixelArtPaletteSwapper/bibliography.ts +16 -0
- package/src/tool/pixelArtPaletteSwapper/component.astro +153 -0
- package/src/tool/pixelArtPaletteSwapper/entry.ts +28 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/de.ts +233 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/en.ts +233 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/es.ts +233 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/fr.ts +233 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/id.ts +233 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/it.ts +233 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/ja.ts +225 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/ko.ts +225 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/nl.ts +233 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/pl.ts +233 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/pt.ts +233 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/ru.ts +233 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/sv.ts +233 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/tr.ts +233 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/zh.ts +225 -0
- package/src/tool/pixelArtPaletteSwapper/index.ts +12 -0
- package/src/tool/pixelArtPaletteSwapper/logic.test.ts +43 -0
- package/src/tool/pixelArtPaletteSwapper/logic.ts +171 -0
- package/src/tool/pixelArtPaletteSwapper/pixel-art-palette-swapper.css +728 -0
- package/src/tool/pixelArtPaletteSwapper/seo.astro +15 -0
- package/src/tool/pixelArtPaletteSwapper/ui.ts +35 -0
- package/src/tool/retroSfxGenerator/bibliography.astro +6 -0
- package/src/tool/retroSfxGenerator/bibliography.ts +16 -0
- package/src/tool/retroSfxGenerator/client.ts +263 -0
- package/src/tool/retroSfxGenerator/component.astro +146 -0
- package/src/tool/retroSfxGenerator/entry.ts +27 -0
- package/src/tool/retroSfxGenerator/i18n/de.ts +211 -0
- package/src/tool/retroSfxGenerator/i18n/en.ts +224 -0
- package/src/tool/retroSfxGenerator/i18n/es.ts +211 -0
- package/src/tool/retroSfxGenerator/i18n/fr.ts +211 -0
- package/src/tool/retroSfxGenerator/i18n/id.ts +211 -0
- package/src/tool/retroSfxGenerator/i18n/it.ts +211 -0
- package/src/tool/retroSfxGenerator/i18n/ja.ts +211 -0
- package/src/tool/retroSfxGenerator/i18n/ko.ts +211 -0
- package/src/tool/retroSfxGenerator/i18n/nl.ts +211 -0
- package/src/tool/retroSfxGenerator/i18n/pl.ts +211 -0
- package/src/tool/retroSfxGenerator/i18n/pt.ts +211 -0
- package/src/tool/retroSfxGenerator/i18n/ru.ts +211 -0
- package/src/tool/retroSfxGenerator/i18n/sv.ts +211 -0
- package/src/tool/retroSfxGenerator/i18n/tr.ts +211 -0
- package/src/tool/retroSfxGenerator/i18n/zh.ts +211 -0
- package/src/tool/retroSfxGenerator/index.ts +11 -0
- package/src/tool/retroSfxGenerator/logic.test.ts +61 -0
- package/src/tool/retroSfxGenerator/logic.ts +214 -0
- package/src/tool/retroSfxGenerator/retro-sfx-generator.css +435 -0
- package/src/tool/retroSfxGenerator/seo.astro +15 -0
- package/src/tool/retroSfxGenerator/ui.ts +41 -0
- package/src/tool/saveFileEditor/game-save-file-editor.css +5 -5
- package/src/tool/spriteSheetPacker/sprite-sheet-packer.css +5 -5
- package/src/tool/steamBbcodeTranslator/steam-bbcode-translator.css +8 -8
- package/src/tool/steamCapsuleGenerator/steam-capsule-generator.css +6 -6
- package/src/tools.ts +4 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
2
|
+
import type { PixelArtPaletteSwapperUI } from '../ui';
|
|
3
|
+
|
|
4
|
+
export const content: ToolLocaleContent<PixelArtPaletteSwapperUI> = {
|
|
5
|
+
slug: 'pixel-art-palette-swapper',
|
|
6
|
+
title: 'Pixel Art Palette Swapper',
|
|
7
|
+
description: 'Reduce sprites and spritesheets to classic console palettes or a custom set of hex colors directly in your browser.',
|
|
8
|
+
ui: {
|
|
9
|
+
uploadTitle: 'Drop a sprite or spritesheet',
|
|
10
|
+
uploadHint: 'PNG, JPEG, or WebP stays on your device',
|
|
11
|
+
chooseImage: 'Choose image',
|
|
12
|
+
replaceImage: 'Replace image',
|
|
13
|
+
paletteTitle: 'Choose palette',
|
|
14
|
+
gameBoyPalette: 'Game Boy',
|
|
15
|
+
nesPalette: 'NES inspired',
|
|
16
|
+
pico8Palette: 'PICO 8',
|
|
17
|
+
commodore64Palette: 'Commodore 64',
|
|
18
|
+
dawnBringerPalette: 'DawnBringer 16',
|
|
19
|
+
customPalette: 'Custom colors',
|
|
20
|
+
customPaletteHint: 'Separate hex values with commas, spaces, or new lines.',
|
|
21
|
+
applyCustomPalette: 'Apply palette',
|
|
22
|
+
resetCustomPalette: 'Reset',
|
|
23
|
+
sourcePreview: 'Original',
|
|
24
|
+
resultPreview: 'Limited result',
|
|
25
|
+
waitingForImage: 'Waiting for an image',
|
|
26
|
+
uploadToPreview: 'Upload an image to preview it',
|
|
27
|
+
resultEmpty: 'Your original and palette limited versions will appear side by side.',
|
|
28
|
+
downloadPng: 'Download PNG',
|
|
29
|
+
downloadDisabled: 'Upload an image to enable export.',
|
|
30
|
+
colorCount: 'Source colors',
|
|
31
|
+
mappedCount: 'Colors used',
|
|
32
|
+
imageSize: 'Image size',
|
|
33
|
+
paletteCount: 'palette colors',
|
|
34
|
+
preserveAlpha: 'Preserve transparency',
|
|
35
|
+
zoomLabel: 'Zoom',
|
|
36
|
+
processing: 'Mapping pixels',
|
|
37
|
+
invalidPalette: 'Add at least one valid hex color',
|
|
38
|
+
invalidImage: 'Choose a PNG, JPEG, or WebP image',
|
|
39
|
+
readyStatus: 'Ready',
|
|
40
|
+
dropActive: 'Release to load',
|
|
41
|
+
mappedSummary: 'Mapped {source} source colors to {mapped} palette colors',
|
|
42
|
+
},
|
|
43
|
+
seo: [
|
|
44
|
+
{
|
|
45
|
+
type: 'title',
|
|
46
|
+
level: 2,
|
|
47
|
+
text: 'Turn a Full Color Sprite Into a Deliberate Retro Palette',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
type: 'paragraph',
|
|
51
|
+
html: 'A limited palette is more than a technical restriction. It gives a sprite a repeatable color vocabulary, makes scenes feel like they belong together, and can suggest the visual character of a specific console or fantasy hardware. This browser based palette swapper lets you compare the source image with a reduced version while you experiment with Game Boy, NES inspired, PICO 8, Commodore 64, DawnBringer 16, and custom palettes.',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
type: 'title',
|
|
55
|
+
level: 2,
|
|
56
|
+
text: 'How Nearest Color Mapping Works',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
type: 'paragraph',
|
|
60
|
+
html: 'The tool reads the red, green, and blue channels for every visible pixel and compares that color with every color in the selected palette. It chooses the palette entry with the smallest squared RGB distance, then writes the replacement color to a new canvas buffer. The alpha channel is kept separate, so transparent pixels remain transparent and partially transparent edges keep their original opacity when Preserve transparency is enabled.',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
type: 'comparative',
|
|
64
|
+
columns: 2,
|
|
65
|
+
items: [
|
|
66
|
+
{
|
|
67
|
+
title: 'Palette limitation',
|
|
68
|
+
description: 'Every source color is replaced by its closest available swatch.',
|
|
69
|
+
points: [
|
|
70
|
+
'Fast and predictable for sprites, icons, tiles, and UI art',
|
|
71
|
+
'Keeps the original dimensions and pixel positions',
|
|
72
|
+
'Makes a consistent color budget easy to review',
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
title: 'Palette swapping',
|
|
77
|
+
description: 'The same artwork can be remapped to another carefully chosen set.',
|
|
78
|
+
points: [
|
|
79
|
+
'Useful for alternate costumes, biomes, and damage states',
|
|
80
|
+
'Custom hex lists let you match an existing art direction',
|
|
81
|
+
'A downloaded PNG is ready to bring back into your editor',
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
type: 'title',
|
|
88
|
+
level: 2,
|
|
89
|
+
text: 'Choosing a Palette for Pixel Art',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
type: 'table',
|
|
93
|
+
headers: ['Palette', 'Colors', 'Good fit', 'Watch for'],
|
|
94
|
+
rows: [
|
|
95
|
+
['Game Boy', '4', 'Monochrome handheld mood and strong value studies', 'Small value range can merge nearby materials'],
|
|
96
|
+
['NES inspired', '16', 'Chunky arcade sprites, characters, and tiles', 'Very bright colors can overpower small details'],
|
|
97
|
+
['PICO 8', '16', 'Compact modern pixel art with saturated accents', 'Highly saturated hues need deliberate contrast'],
|
|
98
|
+
['Commodore 64', '16', 'Muted retro scenes and computer game aesthetics', 'Low contrast benefits from clear silhouettes'],
|
|
99
|
+
['DawnBringer 16', '16', 'A flexible hand picked palette for general pixel art', 'Ramp colors still need intentional light direction'],
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
type: 'title',
|
|
104
|
+
level: 2,
|
|
105
|
+
text: 'A Practical Workflow for Spritesheets',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
type: 'paragraph',
|
|
109
|
+
html: 'Start with the largest source art you can comfortably edit, then upload the exported sprite or spritesheet here. Pick a preset to establish a direction, or paste a custom list from a palette library. Inspect the two canvases at a higher zoom and look for lost facial features, merged outlines, and highlights that no longer separate from their base color. If a result feels muddy, try a palette with a stronger value step or add one deliberate accent color to the custom list.',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
type: 'tip',
|
|
113
|
+
title: 'Keep the palette intentional',
|
|
114
|
+
html: 'A larger list is not automatically better. Start with four to sixteen colors, assign each color a job, and reserve the brightest values for focal points or readable highlights. The closest color algorithm preserves positions, but it cannot decide which colors should carry the visual hierarchy of your sprite.',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
type: 'title',
|
|
118
|
+
level: 2,
|
|
119
|
+
text: 'Pixel Art Export Checklist',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
type: 'diagnostic',
|
|
123
|
+
variant: 'info',
|
|
124
|
+
title: 'Before importing the limited PNG',
|
|
125
|
+
html: 'Check the result at 100 percent and at the final in game scale, confirm that transparent edges are still clean, verify that important silhouettes remain readable, and keep the original source file beside the export so you can revise the palette without starting over.',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'glossary',
|
|
129
|
+
items: [
|
|
130
|
+
{
|
|
131
|
+
term: 'Color quantization',
|
|
132
|
+
definition: 'The process of reducing a large set of source colors to a smaller defined set.',
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
term: 'Palette ramp',
|
|
136
|
+
definition: 'A related sequence of dark, mid, and light colors used to shade one material or surface.',
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
term: 'Indexed palette',
|
|
140
|
+
definition: 'A compact color table where image pixels refer to entries in a shared list instead of storing full colors repeatedly.',
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
],
|
|
145
|
+
faq: [
|
|
146
|
+
{
|
|
147
|
+
question: 'Does the palette swapper upload my image?',
|
|
148
|
+
answer: 'No. The image is decoded into a canvas in your browser, mapped locally with JavaScript, and exported directly as a PNG. The utility has no upload step.',
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
question: 'Can I use my own palette?',
|
|
152
|
+
answer: 'Yes. Paste six digit or three digit hex colors into the Custom colors field, separated by commas, spaces, or new lines, then choose Apply palette.',
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
question: 'Does it resize my sprite or spritesheet?',
|
|
156
|
+
answer: 'No. The output keeps the source width, height, pixel positions, and alpha values when Preserve transparency is enabled.',
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
question: 'What algorithm does it use?',
|
|
160
|
+
answer: 'Each visible pixel is assigned to the closest color in the selected palette using squared Euclidean distance in RGB space. It is fast, deterministic, and easy to preview, but it does not apply dithering or perceptual Lab color correction.',
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
howTo: [
|
|
164
|
+
{
|
|
165
|
+
name: 'Load a sprite',
|
|
166
|
+
text: 'Drop a PNG, JPEG, or WebP sprite or spritesheet into the workspace, or use Choose image.',
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
name: 'Choose a palette',
|
|
170
|
+
text: 'Select a classic preset or enter your own hex colors. The result updates immediately when a palette is applied.',
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
name: 'Compare and export',
|
|
174
|
+
text: 'Inspect the original and limited canvases, adjust the preview zoom, and download the result as a PNG.',
|
|
175
|
+
},
|
|
176
|
+
],
|
|
177
|
+
schemas: [
|
|
178
|
+
{
|
|
179
|
+
'@context': 'https://schema.org',
|
|
180
|
+
'@type': 'SoftwareApplication',
|
|
181
|
+
name: 'Pixel Art Palette Swapper',
|
|
182
|
+
applicationCategory: 'DesignApplication',
|
|
183
|
+
operatingSystem: 'Any',
|
|
184
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
'@context': 'https://schema.org',
|
|
188
|
+
'@type': 'FAQPage',
|
|
189
|
+
mainEntity: [
|
|
190
|
+
{
|
|
191
|
+
'@type': 'Question',
|
|
192
|
+
name: 'Does the palette swapper upload my image?',
|
|
193
|
+
acceptedAnswer: {
|
|
194
|
+
'@type': 'Answer',
|
|
195
|
+
text: 'No. The image is decoded and mapped locally in the browser, then exported directly as a PNG.',
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
'@type': 'Question',
|
|
200
|
+
name: 'Can I use my own palette?',
|
|
201
|
+
acceptedAnswer: {
|
|
202
|
+
'@type': 'Answer',
|
|
203
|
+
text: 'Yes. Paste valid hex colors into the Custom colors field and apply the palette.',
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
'@context': 'https://schema.org',
|
|
210
|
+
'@type': 'HowTo',
|
|
211
|
+
name: 'How to limit a sprite to a retro palette',
|
|
212
|
+
step: [
|
|
213
|
+
{ '@type': 'HowToStep', name: 'Load a sprite', text: 'Drop an image into the workspace or choose it from your device.' },
|
|
214
|
+
{ '@type': 'HowToStep', name: 'Choose a palette', text: 'Select a preset or apply a custom list of hex colors.' },
|
|
215
|
+
{ '@type': 'HowToStep', name: 'Compare and export', text: 'Review the result and download the limited PNG.' },
|
|
216
|
+
],
|
|
217
|
+
},
|
|
218
|
+
],
|
|
219
|
+
bibliography: [
|
|
220
|
+
{
|
|
221
|
+
name: 'MDN Canvas API',
|
|
222
|
+
url: 'https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API',
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
name: 'Lospec Palette List',
|
|
226
|
+
url: 'https://lospec.com/palette-list',
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
name: 'W3C Portable Network Graphics Specification',
|
|
230
|
+
url: 'https://www.w3.org/TR/png-3/',
|
|
231
|
+
},
|
|
232
|
+
],
|
|
233
|
+
};
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
2
|
+
import type { PixelArtPaletteSwapperUI } from '../ui';
|
|
3
|
+
|
|
4
|
+
export const content: ToolLocaleContent<PixelArtPaletteSwapperUI> = {
|
|
5
|
+
slug: 'cambiador-paleta-pixel-art',
|
|
6
|
+
title: 'Cambiador de Paleta para Pixel Art',
|
|
7
|
+
description: 'Reduce sprites y hojas de sprites a paletas clásicas de consola o a un conjunto personalizado de colores hexadecimales directamente en tu navegador.',
|
|
8
|
+
ui: {
|
|
9
|
+
uploadTitle: 'Arrastra un sprite o hoja de sprites',
|
|
10
|
+
uploadHint: 'Los archivos PNG, JPEG o WebP se procesan en tu dispositivo',
|
|
11
|
+
chooseImage: 'Elegir imagen',
|
|
12
|
+
replaceImage: 'Reemplazar imagen',
|
|
13
|
+
paletteTitle: 'Elegir paleta',
|
|
14
|
+
gameBoyPalette: 'Game Boy',
|
|
15
|
+
nesPalette: 'Inspirada en NES',
|
|
16
|
+
pico8Palette: 'PICO-8',
|
|
17
|
+
commodore64Palette: 'Commodore 64',
|
|
18
|
+
dawnBringerPalette: 'DawnBringer 16',
|
|
19
|
+
customPalette: 'Colores personalizados',
|
|
20
|
+
customPaletteHint: 'Separa los valores hexadecimales con comas, espacios o saltos de línea.',
|
|
21
|
+
applyCustomPalette: 'Aplicar paleta',
|
|
22
|
+
resetCustomPalette: 'Restablecer',
|
|
23
|
+
sourcePreview: 'Original',
|
|
24
|
+
resultPreview: 'Resultado limitado',
|
|
25
|
+
waitingForImage: 'Esperando una imagen',
|
|
26
|
+
uploadToPreview: 'Sube una imagen para previsualizarla',
|
|
27
|
+
resultEmpty: 'Tus versiones original y con paleta limitada aparecerán lado a lado.',
|
|
28
|
+
downloadPng: 'Descargar PNG',
|
|
29
|
+
downloadDisabled: 'Sube una imagen para habilitar la exportación.',
|
|
30
|
+
colorCount: 'Colores de origen',
|
|
31
|
+
mappedCount: 'Colores usados',
|
|
32
|
+
imageSize: 'Tamaño de imagen',
|
|
33
|
+
paletteCount: 'colores de paleta',
|
|
34
|
+
preserveAlpha: 'Conservar transparencia',
|
|
35
|
+
zoomLabel: 'Zoom',
|
|
36
|
+
processing: 'Mapeando píxeles',
|
|
37
|
+
invalidPalette: 'Añade al menos un color hexadecimal válido',
|
|
38
|
+
invalidImage: 'Elige una imagen PNG, JPEG o WebP',
|
|
39
|
+
readyStatus: 'Listo',
|
|
40
|
+
dropActive: 'Suelta para cargar',
|
|
41
|
+
mappedSummary: 'Se han mapeado {source} colores de origen a {mapped} colores de la paleta',
|
|
42
|
+
},
|
|
43
|
+
seo: [
|
|
44
|
+
{
|
|
45
|
+
type: 'title',
|
|
46
|
+
level: 2,
|
|
47
|
+
text: 'Convierte un Sprite a Todo Color en una Paleta Retro Deliberada',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
type: 'paragraph',
|
|
51
|
+
html: 'Una paleta limitada es mucho más que una restricción técnica. Otorga al sprite un vocabulario de color coherente, ayuda a que los elementos de una escena encajen visualmente y evoca el carácter de una consola o plataforma clásica. Este cambiador de paletas para navegador te permite comparar la imagen original con una versión reducida mientras experimentas con paletas de Game Boy, inspiradas en NES, PICO-8, Commodore 64, DawnBringer 16 y listas personalizadas.',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
type: 'title',
|
|
55
|
+
level: 2,
|
|
56
|
+
text: 'Cómo Funciona el Mapeo al Color Más Cercano',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
type: 'paragraph',
|
|
60
|
+
html: 'La herramienta lee los canales rojo, verde y azul de cada píxel visible y compara ese color con cada color de la paleta seleccionada. Selecciona la entrada de la paleta con la distancia RGB al cuadrado más pequeña y escribe el color de reemplazo en un nuevo búfer de lienzo. El canal alfa se mantiene independiente para preservar la transparencia original y conservar la opacidad de los bordes suavemente cuando la opción Conservar transparencia está activa.',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
type: 'comparative',
|
|
64
|
+
columns: 2,
|
|
65
|
+
items: [
|
|
66
|
+
{
|
|
67
|
+
title: 'Limitación de paleta',
|
|
68
|
+
description: 'Cada color de origen se reemplaza por la muestra disponible más cercana.',
|
|
69
|
+
points: [
|
|
70
|
+
'Rápido y predecible para sprites, iconos, baldosas e interfaces',
|
|
71
|
+
'Conserva las dimensiones y posiciones de los píxeles originales',
|
|
72
|
+
'Facilita la revisión de un presupuesto de color determinado',
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
title: 'Cambio de paleta (Palette Swapping)',
|
|
77
|
+
description: 'La misma imagen se puede remapear a otro conjunto de colores cuidadosamente elegido.',
|
|
78
|
+
points: [
|
|
79
|
+
'Útil para trajes alternativos, biomas y estados de daño',
|
|
80
|
+
'Las listas hexadecimales personalizadas permiten adaptarse a tu dirección artística',
|
|
81
|
+
'El PNG descargado queda listo para volver a importarse en tu editor',
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
type: 'title',
|
|
88
|
+
level: 2,
|
|
89
|
+
text: 'Cómo Elegir una Paleta para Pixel Art',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
type: 'table',
|
|
93
|
+
headers: ['Paleta', 'Colores', 'Uso recomendado', 'Aspectos a vigilar'],
|
|
94
|
+
rows: [
|
|
95
|
+
['Game Boy', '4', 'Estilo monocromo portátil y estudios de volumen', 'El rango reducido puede fusionar materiales de tono similar'],
|
|
96
|
+
['Inspirada en NES', '16', 'Sprites estilo arcade, personajes y baldosas', 'Los colores muy brillantes pueden eclipsar detalles pequeños'],
|
|
97
|
+
['PICO-8', '16', 'Pixel art moderno con acentos saturados', 'Los tonos muy saturados requieren un contraste intencionado'],
|
|
98
|
+
['Commodore 64', '16', 'Escenas retro suaves y estética de ordenador', 'El bajo contraste se beneficia de siluetas bien definidas'],
|
|
99
|
+
['DawnBringer 16', '16', 'Paleta artesanal versátil para uso general', 'Las rampas de color siguen exigiendo una dirección de luz clara'],
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
type: 'title',
|
|
104
|
+
level: 2,
|
|
105
|
+
text: 'Flujo de Trabajo Práctico para Hojas de Sprites',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
type: 'paragraph',
|
|
109
|
+
html: 'Comienza con la imagen de origen más grande que edites cómodamente y sube aquí el sprite o hoja exportada. Selecciona un preajuste para definir una dirección visual o pega tu propia lista de colores hexadecimales. Inspecciona ambos lienzos a mayor zoom para comprobar si se han perdido detalles en los rostros, contornos o luces clave. Si el resultado parece apagado o confuso, prueba una paleta con saltos de valor más marcados o añade un color de acento deliberado a la lista personalizada.',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
type: 'tip',
|
|
113
|
+
title: 'Mantén la paleta intencionada',
|
|
114
|
+
html: 'Una lista de colores más extensa no es automáticamente mejor. Comienza con cuatro a dieciseis colores, asigna una función a cada tono y reserva los brillos máximos para puntos de interés visual. El algoritmo del color más cercano preserva las posiciones de los píxeles, pero no puede decidir qué colores deben estructurar la jerarquía visual de tu sprite.',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
type: 'title',
|
|
118
|
+
level: 2,
|
|
119
|
+
text: 'Lista de Comprobación para Exportar Pixel Art',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
type: 'diagnostic',
|
|
123
|
+
variant: 'info',
|
|
124
|
+
title: 'Antes de importar el PNG resultante',
|
|
125
|
+
html: 'Revisa el resultado al 100% y a la escala final del juego, confirma que los bordes transparentes sigan limpios, verifica que las siluetas importantes sigan siendo legibles y conserva la imagen de origen junto con el archivo exportado para poder ajustar la paleta sin empezar desde cero.',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'glossary',
|
|
129
|
+
items: [
|
|
130
|
+
{
|
|
131
|
+
term: 'Cuantización de color',
|
|
132
|
+
definition: 'Proceso de reducir un conjunto amplio de colores a uno más reducido y definido.',
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
term: 'Rampa de paleta',
|
|
136
|
+
definition: 'Secuencia ordenada de tonos oscuros, medios y claros para sombrear un material o superficie.',
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
term: 'Paleta indexada',
|
|
140
|
+
definition: 'Tabla de color compacta donde los píxeles hacen referencia a un índice en lugar de almacenar valores de color completos.',
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
],
|
|
145
|
+
faq: [
|
|
146
|
+
{
|
|
147
|
+
question: '¿El cambiador de paletas sube mi imagen a algún servidor?',
|
|
148
|
+
answer: 'No. La imagen se decodifica en un lienzo dentro de tu navegador, se procesa localmente con JavaScript y se exporta directamente como un archivo PNG. La utilidad no tiene ningún paso de carga externa.',
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
question: '¿Puedo utilizar mi propia paleta de colores?',
|
|
152
|
+
answer: 'Sí. Pega valores hexadecimales de 6 o 3 dígitos en el campo de Colores personalizados, separados por comas, espacios o saltos de línea, y selecciona Aplicar paleta.',
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
question: '¿Cambia las dimensiones del sprite o hoja de sprites?',
|
|
156
|
+
answer: 'No. El archivo exportado mantiene el ancho, el alto, la posición de los píxeles y la transparencia original cuando la opción Conservar transparencia está activa.',
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
question: '¿Qué algoritmo utiliza para seleccionar los colores?',
|
|
160
|
+
answer: 'Asigna cada píxel al color más cercano de la paleta seleccionada mediante la distancia Euclídea al cuadrado en el espacio RGB. Es un método rápido, determinista y fácil de previsualizar, aunque no aplica tramado ni corrección perceptiva Lab.',
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
howTo: [
|
|
164
|
+
{
|
|
165
|
+
name: 'Cargar un sprite',
|
|
166
|
+
text: 'Arrastra una imagen PNG, JPEG o WebP al espacio de trabajo o usa el botón Elegir imagen.',
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
name: 'Elegir una paleta',
|
|
170
|
+
text: 'Selecciona un preajuste clásico o introduce tus propios colores hexadecimales. El resultado se actualiza al instante al aplicar una paleta.',
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
name: 'Comparar y exportar',
|
|
174
|
+
text: 'Inspecciona los lienzos original y limitado, ajusta el zoom y descarga el resultado en formato PNG.',
|
|
175
|
+
},
|
|
176
|
+
],
|
|
177
|
+
schemas: [
|
|
178
|
+
{
|
|
179
|
+
'@context': 'https://schema.org',
|
|
180
|
+
'@type': 'SoftwareApplication',
|
|
181
|
+
name: 'Cambiador de Paleta para Pixel Art',
|
|
182
|
+
applicationCategory: 'DesignApplication',
|
|
183
|
+
operatingSystem: 'Any',
|
|
184
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
'@context': 'https://schema.org',
|
|
188
|
+
'@type': 'FAQPage',
|
|
189
|
+
mainEntity: [
|
|
190
|
+
{
|
|
191
|
+
'@type': 'Question',
|
|
192
|
+
name: '¿El cambiador de paletas sube mi imagen a algún servidor?',
|
|
193
|
+
acceptedAnswer: {
|
|
194
|
+
'@type': 'Answer',
|
|
195
|
+
text: 'No. La imagen se decodifica y se procesa localmente en el navegador, y luego se exporta directamente en formato PNG.',
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
'@type': 'Question',
|
|
200
|
+
name: '¿Puedo utilizar mi propia paleta de colores?',
|
|
201
|
+
acceptedAnswer: {
|
|
202
|
+
'@type': 'Answer',
|
|
203
|
+
text: 'Sí. Pega valores hexadecimales válidos en el campo Colores personalizados y aplica la paleta.',
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
'@context': 'https://schema.org',
|
|
210
|
+
'@type': 'HowTo',
|
|
211
|
+
name: 'Cómo limitar un sprite a una paleta retro',
|
|
212
|
+
step: [
|
|
213
|
+
{ '@type': 'HowToStep', name: 'Cargar un sprite', text: 'Arrastra una imagen al espacio de trabajo o elígela desde tu dispositivo.' },
|
|
214
|
+
{ '@type': 'HowToStep', name: 'Elegir una paleta', text: 'Selecciona un preajuste o aplica una lista personalizada de colores hexadecimales.' },
|
|
215
|
+
{ '@type': 'HowToStep', name: 'Comparar y exportar', text: 'Revisa el resultado y descarga el archivo PNG resultante.' },
|
|
216
|
+
],
|
|
217
|
+
},
|
|
218
|
+
],
|
|
219
|
+
bibliography: [
|
|
220
|
+
{
|
|
221
|
+
name: 'MDN Canvas API',
|
|
222
|
+
url: 'https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API',
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
name: 'Lospec Palette List',
|
|
226
|
+
url: 'https://lospec.com/palette-list',
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
name: 'W3C Portable Network Graphics Specification',
|
|
230
|
+
url: 'https://www.w3.org/TR/png-3/',
|
|
231
|
+
},
|
|
232
|
+
],
|
|
233
|
+
};
|