@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,245 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { PrintQualityCalculatorUI, PrintQualityCalculatorLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'calidad-impresion';
|
|
5
|
+
const title = 'Calculadora de Calidad de Impresión - Píxeles a CM y DPI';
|
|
6
|
+
const description = 'Calcula el tamaño máximo de impresión de tus fotos según su resolución. Convierte píxeles a centímetros y pulgadas para asegurar una impresión profesional.';
|
|
7
|
+
|
|
8
|
+
const ui: PrintQualityCalculatorUI = {
|
|
9
|
+
dropTitle: "Analizar Resolución",
|
|
10
|
+
dropSubtitle: "Arrastra tu imagen para calcular su tamaño de impresión.",
|
|
11
|
+
resultsTitle: "Especificaciones del Archivo",
|
|
12
|
+
dpiDensityLabel: "Densidad de Impresión Deseada (DPI)",
|
|
13
|
+
dpiPointsLabel: "puntos por pulgada",
|
|
14
|
+
maxPrintTitle: "Tamaño Máximo de Impresión",
|
|
15
|
+
standardFormatsTitle: "Formatos Estándar Soportados",
|
|
16
|
+
formatColumn: "Formato",
|
|
17
|
+
measureColumn: "Medidas (cm)",
|
|
18
|
+
supportColumn: "¿Soportado?",
|
|
19
|
+
qualityExcellent: "Calidad Excelente",
|
|
20
|
+
qualityGood: "Calidad Buena",
|
|
21
|
+
qualityFair: "Calidad Pantalla",
|
|
22
|
+
qualityPoor: "No Apto",
|
|
23
|
+
qualityExcellentDesc: "Ideal para revistas de arte, libros de fotografía y visualización cercana.",
|
|
24
|
+
qualityGoodDesc: "Suficiente para pósters y visualización a media distancia.",
|
|
25
|
+
qualityFairDesc: "Adecuado para visualización digital o vallas lejanas.",
|
|
26
|
+
qualityPoorDesc: "La imagen se verá pixelada. No se recomienda imprimir.",
|
|
27
|
+
unitCm: "cm",
|
|
28
|
+
unitInches: "pulg"
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const faq: PrintQualityCalculatorLocaleContent['faq'] = [
|
|
32
|
+
{
|
|
33
|
+
question: "¿Qué es el DPI y por qué importa?",
|
|
34
|
+
answer: "DPI (Dots Per Inch) indica cuántos puntos de tinta pondrá la impresora en una pulgada lineal. A mayor DPI, más nitidez, pero menor será el tamaño físico total que cubrirán tus píxeles.",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
question: "¿Cuál es el DPI ideal para imprimir una foto?",
|
|
38
|
+
answer: "El estándar industrial es 300 DPI para una calidad fotográfica excelente. Para impresiones grandes que se verán de lejos, 150 DPI puede ser suficiente.",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
question: "¿Puedo aumentar los DPI de mi imagen sin perder calidad?",
|
|
42
|
+
answer: "No. Aumentar los DPI sin cambiar los píxeles simplemente reduce el tamaño de la impresión. Si 'inventas' píxeles mediante software (upscaling), la imagen puede verse borrosa.",
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
const howTo: PrintQualityCalculatorLocaleContent['howTo'] = [
|
|
47
|
+
{
|
|
48
|
+
name: "Sube tu imagen",
|
|
49
|
+
text: "Carga la fotografía que deseas imprimir para conocer sus dimensiones en píxeles.",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: "Ajusta los DPI",
|
|
53
|
+
text: "Desliza la barra para ver cómo cambia el tamaño final según la densidad de puntos (72 a 600 DPI).",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: "Verifica el formato",
|
|
57
|
+
text: "Consulta la tabla de formatos estándar (A4, A3, etc.) para ver si tu resolución cubre el papel deseado.",
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: "Confirma la calidad",
|
|
61
|
+
text: "Asegúrate de que el indicador marque 'Calidad Excelente' antes de enviar a imprenta.",
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const bibliography: PrintQualityCalculatorLocaleContent['bibliography'] = [
|
|
66
|
+
{
|
|
67
|
+
name: "International Paper Sizes (ISO 216)",
|
|
68
|
+
url: "https://www.iso.org/standard/36631.html",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: "Guía de resolución de imagen - Adobe",
|
|
72
|
+
url: "https://www.adobe.com/es/creativecloud/photography/discover/image-resolution.html",
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
|
|
76
|
+
const seo: PrintQualityCalculatorLocaleContent['seo'] = [
|
|
77
|
+
{
|
|
78
|
+
type: 'summary',
|
|
79
|
+
title: 'Cálculo Profesional de Resolución para Impresión',
|
|
80
|
+
items: [
|
|
81
|
+
'Convierte píxeles a centímetros y pulgadas con precisión',
|
|
82
|
+
'Calcula tamaño máximo según DPI deseado',
|
|
83
|
+
'Compatibilidad con formatos estándar (A4, A3, etc.)',
|
|
84
|
+
'Guía de 4 niveles de calidad: Excelente a No Apto'
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
{ type: 'title', text: 'Guía Definitiva de Calidad de Impresión y DPI', level: 2 },
|
|
88
|
+
{ type: 'paragraph', html: '¿Alguna vez has impreso una foto y ha salido borrosa o pixelada? El secreto está en la relación matemática entre <strong>Píxeles</strong> y <strong>DPI</strong> (Dots Per Inch). Esta herramienta calcula el tamaño máximo exacto al que puedes imprimir tus imágenes sin perder calidad profesional.' },
|
|
89
|
+
|
|
90
|
+
{ type: 'stats', items: [
|
|
91
|
+
{ value: '300', label: 'DPI Estándar Profesional', icon: 'mdi:target' },
|
|
92
|
+
{ value: '100%', label: 'Cálculos Precisos', icon: 'mdi:check' },
|
|
93
|
+
{ value: 'ISO 216', label: 'Formatos Soportados', icon: 'mdi:file-document' }
|
|
94
|
+
], columns: 3 },
|
|
95
|
+
|
|
96
|
+
{ type: 'title', text: 'Entendiendo DPI: Píxeles vs Puntos', level: 3 },
|
|
97
|
+
{ type: 'paragraph', html: 'La confusión común es pensar que DPI y píxeles son lo mismo. No lo son. Los píxeles están EN tu archivo digital. Los DPI son cómo la impresora los convierte en tinta sobre papel.' },
|
|
98
|
+
{ type: 'list', items: [
|
|
99
|
+
'<strong>DPI (Dots Per Inch):</strong> Cuántos puntos de tinta la impresora coloca en una pulgada lineal (2.54 cm).',
|
|
100
|
+
'<strong>Píxeles:</strong> Pequeños cuadrados de datos en tu archivo digital. Una foto de 3000x2000 píxeles tiene información constante, independientemente de DPI.',
|
|
101
|
+
'<strong>La Fórmula:</strong> Tamaño impresión (pulgadas) = Píxeles / DPI. Ejemplo: 3000 píxeles ÷ 300 DPI = 10 pulgadas (25.4 cm)'
|
|
102
|
+
], icon: 'mdi:check' },
|
|
103
|
+
|
|
104
|
+
{ type: 'title', text: 'Niveles de Calidad DPI Explicados', level: 3 },
|
|
105
|
+
{ type: 'table', headers: ['DPI', 'Calidad Visual', 'Casos de Uso', 'Distancia de Visionado'], rows: [
|
|
106
|
+
['600+ DPI', 'Excelente (Perfecto)', 'Libros de arte, revistas de lujo, fotografía fina', 'Menos de 10 cm'],
|
|
107
|
+
['300-400 DPI', 'Excelente (Profesional)', 'Fotografía, libros, catálogos de empresa', '20-30 cm (mano)'],
|
|
108
|
+
['150-200 DPI', 'Buena (Web Print)', 'Pósters, calendarios, visualización media', '1-2 metros'],
|
|
109
|
+
['72-100 DPI', 'Pantalla (Fair)', 'Vallas publicitarias, carteles lejanos', '5+ metros'],
|
|
110
|
+
['10-30 DPI', 'Baja (No Apta)', 'Vallas gigantes, visualización extremadamente lejana', '50+ metros']
|
|
111
|
+
] },
|
|
112
|
+
|
|
113
|
+
{ type: 'card', title: 'La Regla de Oro del 300 DPI', html: 'Para impresión fotográfica y editorial profesional, el estándar de la industria es <strong>300 DPI</strong>. Esto garantiza que el ojo humano a distancia normal (20-30 cm) no perciba los puntos individuales de tinta. Menos de 300 DPI y la rejilla de píxeles se vuelve visible.' },
|
|
114
|
+
|
|
115
|
+
{ type: 'comparative', items: [
|
|
116
|
+
{
|
|
117
|
+
title: 'Fotografía de Mano (Fotos 10x15)',
|
|
118
|
+
description: '300 DPI obligatorio - se ve de cerca',
|
|
119
|
+
icon: 'mdi:image',
|
|
120
|
+
points: [
|
|
121
|
+
'A 3000x2000 píxeles = 10x6.7 pulgadas máximo',
|
|
122
|
+
'Calidad Excelente garantizada',
|
|
123
|
+
'Estándar para álbumes y regalos'
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
title: 'Póster de Pared (A3 - 30x42 cm)',
|
|
128
|
+
description: '150 DPI suficiente - se ve a distancia',
|
|
129
|
+
icon: 'mdi:wall-fire',
|
|
130
|
+
points: [
|
|
131
|
+
'Se visualiza desde 1-2 metros',
|
|
132
|
+
'Menos píxeles necesarios',
|
|
133
|
+
'Ahorras en calidad de cámara'
|
|
134
|
+
],
|
|
135
|
+
highlight: true
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
title: 'Valla Publicitaria (200x300 cm)',
|
|
139
|
+
description: '15-30 DPI - se ve a muchos metros',
|
|
140
|
+
icon: 'mdi:sign',
|
|
141
|
+
points: [
|
|
142
|
+
'Se observa a 20+ metros de distancia',
|
|
143
|
+
'Incluso baja resolución se ve bien',
|
|
144
|
+
'Optimiza archivos de gran tamaño'
|
|
145
|
+
]
|
|
146
|
+
}
|
|
147
|
+
], columns: 3 },
|
|
148
|
+
|
|
149
|
+
{ type: 'title', text: 'Preparar Archivos para Imprenta Profesional', level: 3 },
|
|
150
|
+
{ type: 'proscons', items: [
|
|
151
|
+
{
|
|
152
|
+
pro: 'CMYK vs RGB: Impresoras usan tinta (CMYK), pantallas usan luz (RGB). Convierte para evitar sorpresas de color.',
|
|
153
|
+
con: 'Los colores pueden cambiar al convertir - previsualiza antes'
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
pro: 'Sangrado (Bleed): Añade 3mm extra por lado si la imagen debe llegar al borde del papel',
|
|
157
|
+
con: 'Sin sangrado, los bordes cortados pueden quedar blancos'
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
pro: 'Upscaling NO funciona: Aumentar píxeles en Photoshop agrega información falsa (suavizado)',
|
|
161
|
+
con: 'Si necesitas imprimir grande, necesitas foto original de alta resolución'
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
pro: 'Formatos: TIFF sin compresión o JPEG alta calidad para fotos; vectorial (AI, EPS) para logos',
|
|
165
|
+
con: 'PNG no soporta CMYK nativo en la mayoría de imprentas'
|
|
166
|
+
}
|
|
167
|
+
], proTitle: 'Recomendaciones', conTitle: 'Contraindicaciones' },
|
|
168
|
+
|
|
169
|
+
{ type: 'diagnostic', variant: 'warning', title: 'Error Común: El Mito del Upscaling', icon: 'mdi:alert', badge: 'Crítico', html: '<strong>NO aumentes DPI en Photoshop sin cambiar píxeles.</strong> Aumentar de 72 DPI a 300 DPI simplemente reduce el tamaño físico de impresión. Si "añades píxeles" mediante interpolación (upscaling), la imagen se verá suavizada o borrosa. Necesitas píxeles REALES desde el origen.' },
|
|
170
|
+
|
|
171
|
+
{ type: 'glossary', items: [
|
|
172
|
+
{
|
|
173
|
+
term: 'DPI (Dots Per Inch)',
|
|
174
|
+
definition: 'Medida de resolución en impresión: cuántos puntos de tinta por pulgada lineal (2.54 cm). 300 DPI = 300x300 = 90,000 puntos por pulgada cuadrada.'
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
term: 'CMYK',
|
|
178
|
+
definition: 'Espacio de color de impresión: Cyan, Magenta, Yellow, blacK. Basado en tinta sustractiva. Diferente de RGB (luz aditiva de pantallas).'
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
term: 'Sangrado (Bleed)',
|
|
182
|
+
definition: 'Área extra (típicamente 3mm) que se imprime y luego se corta. Asegura que la imagen llegue hasta el borde sin dejar márgenes blancos.'
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
term: 'Resolución Nativa',
|
|
186
|
+
definition: 'Píxeles REALES capturados por la cámara, sin manipulación. Aumentar DPI sin cambiar píxeles no genera "resolución nativa".'
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
term: 'Interpolación (Upscaling)',
|
|
190
|
+
definition: 'Algoritmo que inventa píxeles nuevos basándose en los existentes. Útil para pequeños aumentos, pero pierde nitidez en ampliaciones grandes.'
|
|
191
|
+
}
|
|
192
|
+
] },
|
|
193
|
+
|
|
194
|
+
{ type: 'message', title: 'Precisión Técnica para Resultados Profesionales', ariaLabel: 'Información sobre cálculos de impresión', html: 'Nuestra calculadora convierte píxeles a centímetros considerando estándares internacionales (ISO 216 para papel). No es solo un calculador: es tu validador de si esa foto cabe en ese tamaño de impresión manteniendo calidad profesional.' },
|
|
195
|
+
|
|
196
|
+
{ type: 'title', text: 'Conclusión: Imprime Sin Sorpresas', level: 3 },
|
|
197
|
+
{ type: 'paragraph', html: 'La diferencia entre una impresión hermosa y una decepcionante está en conocer la relación entre píxeles y DPI. Usa esta calculadora para validar tus archivos ANTES de ir a la imprenta. Así evitas gastos innecesarios y resultados frustantes.' }
|
|
198
|
+
];
|
|
199
|
+
|
|
200
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
201
|
+
'@context': 'https://schema.org',
|
|
202
|
+
'@type': 'FAQPage',
|
|
203
|
+
mainEntity: faq.map((item) => ({
|
|
204
|
+
'@type': 'Question',
|
|
205
|
+
name: item.question,
|
|
206
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
207
|
+
})),
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
const howToSchema: WithContext<HowTo> = {
|
|
211
|
+
'@context': 'https://schema.org',
|
|
212
|
+
'@type': 'HowTo',
|
|
213
|
+
name: title,
|
|
214
|
+
description,
|
|
215
|
+
step: howTo.map((step) => ({
|
|
216
|
+
'@type': 'HowToStep',
|
|
217
|
+
name: step.name,
|
|
218
|
+
text: step.text,
|
|
219
|
+
})),
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
223
|
+
'@context': 'https://schema.org',
|
|
224
|
+
'@type': 'SoftwareApplication',
|
|
225
|
+
name: title,
|
|
226
|
+
description,
|
|
227
|
+
applicationCategory: 'UtilitiesApplication',
|
|
228
|
+
operatingSystem: 'Web',
|
|
229
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
230
|
+
inLanguage: 'es',
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
export const content: PrintQualityCalculatorLocaleContent = {
|
|
234
|
+
slug,
|
|
235
|
+
title,
|
|
236
|
+
description,
|
|
237
|
+
ui,
|
|
238
|
+
seo,
|
|
239
|
+
faq,
|
|
240
|
+
faqTitle: 'Preguntas frecuentes sobre resolución de impresión',
|
|
241
|
+
bibliography,
|
|
242
|
+
bibliographyTitle: 'Recursos técnicos sobre impresión digital',
|
|
243
|
+
howTo,
|
|
244
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
245
|
+
};
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { PrintQualityCalculatorUI, PrintQualityCalculatorLocaleContent } from '../index';
|
|
3
|
+
|
|
4
|
+
const slug = 'calculatrice-qualite-impression-pixels-cm-dpi';
|
|
5
|
+
const title = 'Calculatrice de Qualité d\'Impression - Pixels en CM et DPI';
|
|
6
|
+
const description = 'Calculez la taille d\'impression maximale de vos photos en fonction de leur résolution. Convertissez les pixels en centimètres et en pouces pour une impression professionnelle.';
|
|
7
|
+
|
|
8
|
+
const ui: PrintQualityCalculatorUI = {
|
|
9
|
+
dropTitle: "Analyser la Résolution",
|
|
10
|
+
dropSubtitle: "Faites glisser votre image pour calculer sa taille d'impression.",
|
|
11
|
+
resultsTitle: "Spécifications du Fichier",
|
|
12
|
+
dpiDensityLabel: "Densité d'Impression Souhaitée (DPI)",
|
|
13
|
+
dpiPointsLabel: "points par pouce",
|
|
14
|
+
maxPrintTitle: "Taille d'Impression Maximale",
|
|
15
|
+
standardFormatsTitle: "Formats Standards Supportés",
|
|
16
|
+
formatColumn: "Format",
|
|
17
|
+
measureColumn: "Mesures (cm)",
|
|
18
|
+
supportColumn: "Supporté ?",
|
|
19
|
+
qualityExcellent: "Qualité Excellente",
|
|
20
|
+
qualityGood: "Bonne Qualité",
|
|
21
|
+
qualityFair: "Qualité Écran",
|
|
22
|
+
qualityPoor: "Non Adapté",
|
|
23
|
+
qualityExcellentDesc: "Idéal pour les revues d'art, les livres de photographie et la visualisation rapprochée.",
|
|
24
|
+
qualityGoodDesc: "Suffisant pour les posters et la visualisation à distance moyenne.",
|
|
25
|
+
qualityFairDesc: "Adapté pour la visualisation numérique ou les panneaux lointains.",
|
|
26
|
+
qualityPoorDesc: "L'image aura l'air pixelisée. L'impression n'est pas recommandée.",
|
|
27
|
+
unitCm: "cm",
|
|
28
|
+
unitInches: "po"
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const faq: PrintQualityCalculatorLocaleContent['faq'] = [
|
|
32
|
+
{
|
|
33
|
+
question: "Qu'est-ce que le DPI et pourquoi est-ce important ?",
|
|
34
|
+
answer: "Le DPI (Dots Per Inch) indique combien de points d'encre l'imprimante mettra dans un pouce linéaire. Plus le DPI est élevé, plus l'image est nette, mais plus la taille physique totale couverte par vos pixels sera petite.",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
question: "Quel est le DPI idéal pour imprimer une photo ?",
|
|
38
|
+
answer: "Le standard industriel est de 300 DPI pour une excellente qualité photographique. Pour les impressions de grande taille vues de loin, 150 DPI peut suffire.",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
question: "Puis-je augmenter le DPI de mon image sans perdre en qualité ?",
|
|
42
|
+
answer: "Non. Augmenter le DPI sans changer les pixels réduit simplement la taille de l'impression. Si vous 'inventez' des pixels via un logiciel (upscaling), l'image peut paraître floue.",
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
const howTo: PrintQualityCalculatorLocaleContent['howTo'] = [
|
|
47
|
+
{
|
|
48
|
+
name: "Téléchargez votre image",
|
|
49
|
+
text: "Chargez la photographie que vous souhaitez imprimer pour connaître ses dimensions en pixels.",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: "Ajustez les DPI",
|
|
53
|
+
text: "Faites glisser la barre pour voir comment la taille finale change selon la densité de points (72 à 600 DPI).",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: "Vérifiez le format",
|
|
57
|
+
text: "Consultez le tableau des formats standards (A4, A3, etc.) pour voir si votre résolution couvre le papier souhaité.",
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: "Confirmez la qualité",
|
|
61
|
+
text: "Assurez-vous que l'indicateur marque 'Qualité Excellente' avant d'envoyer à l'impression.",
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const bibliography: PrintQualityCalculatorLocaleContent['bibliography'] = [
|
|
66
|
+
{
|
|
67
|
+
name: "International Paper Sizes (ISO 216)",
|
|
68
|
+
url: "https://www.iso.org/standard/36631.html",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: "Guide de résolution d'image - Adobe",
|
|
72
|
+
url: "https://www.adobe.com/fr/creativecloud/photography/discover/image-resolution.html",
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
|
|
76
|
+
const seo: PrintQualityCalculatorLocaleContent['seo'] = [
|
|
77
|
+
{
|
|
78
|
+
type: 'summary',
|
|
79
|
+
title: 'Calcul Professionnel de Résolution pour l\'Impression',
|
|
80
|
+
items: [
|
|
81
|
+
'Convertissez les pixels en centimètres et pouces avec précision',
|
|
82
|
+
'Calculez la taille maximale selon le DPI souhaité',
|
|
83
|
+
'Compatibilité avec les formats standards (A4, A3, etc.)',
|
|
84
|
+
'Guide de 4 niveaux de qualité : Excellente à Non Adapté'
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
{ type: 'title', text: 'Guide Ultime de la Qualité d\'Impression et du DPI', level: 2 },
|
|
88
|
+
{ type: 'paragraph', html: 'Avez-vous déjà imprimé une photo qui est ressortie floue ou pixelisée ? Le secret réside dans la relation mathématique entre les <strong>Pixels</strong> et le <strong>DPI</strong> (Dots Per Inch). Cet outil calcule la taille maximale exacte à laquelle vous pouvez imprimer vos images sans perdre en qualité professionnelle.' },
|
|
89
|
+
|
|
90
|
+
{ type: 'stats', items: [
|
|
91
|
+
{ value: '300', label: 'DPI Standard Professionnel', icon: 'mdi:target' },
|
|
92
|
+
{ value: '100%', label: 'Calculs Précis', icon: 'mdi:check' },
|
|
93
|
+
{ value: 'ISO 216', label: 'Formats Supportés', icon: 'mdi:file-document' }
|
|
94
|
+
], columns: 3 },
|
|
95
|
+
|
|
96
|
+
{ type: 'title', text: 'Comprendre le DPI : Pixels vs Points', level: 3 },
|
|
97
|
+
{ type: 'paragraph', html: 'La confusion courante est de penser que le DPI et les pixels sont identiques. Ce n\'est pas le cas. Les pixels sont DANS votre fichier numérique. Le DPI est la façon dont l\'imprimante les convertit en encre sur le papier.' },
|
|
98
|
+
{ type: 'list', items: [
|
|
99
|
+
'<strong>DPI (Dots Per Inch) :</strong> Combien de points d\'encre l\'imprimante place dans un pouce linéaire (2,54 cm).',
|
|
100
|
+
'<strong>Pixels :</strong> Petits carrés de données dans votre fichier numérique. Une photo de 3000x2000 pixels possède une information constante, quel que soit le DPI.',
|
|
101
|
+
'<strong>La Formule :</strong> Taille d\'impression (pouces) = Pixels / DPI. Exemple : 3000 pixels / 300 DPI = 10 pouces (25,4 cm)'
|
|
102
|
+
], icon: 'mdi:check' },
|
|
103
|
+
|
|
104
|
+
{ type: 'title', text: 'Niveaux de Qualité DPI Expliqués', level: 3 },
|
|
105
|
+
{ type: 'table', headers: ['DPI', 'Qualité Visuelle', 'Cas d\'Utilisation', 'Distance de Vue'], rows: [
|
|
106
|
+
['600+ DPI', 'Excellente (Parfait)', 'Livres d\'art, revues de luxe, photographie fine', 'Moins de 10 cm'],
|
|
107
|
+
['300-400 DPI', 'Excellente (Professionnel)', 'Photographie, livres, catalogues', '20-30 cm (main)'],
|
|
108
|
+
['150-200 DPI', 'Bonne (Impression Web)', 'Posters, calendriers, visualisation moyenne', '1-2 mètres'],
|
|
109
|
+
['72-100 DPI', 'Écran (Moyen)', 'Panneaux publicitaires, affiches lointaines', '5+ mètres'],
|
|
110
|
+
['10-30 DPI', 'Bas (Non Adapté)', 'Panneaux géants, vue extrêmement lointaine', '50+ mètres']
|
|
111
|
+
] },
|
|
112
|
+
|
|
113
|
+
{ type: 'card', title: 'La Règle d\'Or du 300 DPI', html: 'Pour l\'impression photographique et éditoriale professionnelle, le standard de l\'industrie est de <strong>300 DPI</strong>. Cela garantit que l\'œil humain à une distance normale (20-30 cm) ne perçoive pas les points d\'encre individuels. En dessous de 300 DPI, la grille de pixels devient visible.' },
|
|
114
|
+
|
|
115
|
+
{ type: 'comparative', items: [
|
|
116
|
+
{
|
|
117
|
+
title: 'Photographie Main (Photos 10x15)',
|
|
118
|
+
description: '300 DPI obligatoire - se voit de près',
|
|
119
|
+
icon: 'mdi:image',
|
|
120
|
+
points: [
|
|
121
|
+
'À 3000x2000 pixels = 10x6,7 pouces maximum',
|
|
122
|
+
'Qualité Excellente garantie',
|
|
123
|
+
'Standard pour albums et cadeaux'
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
title: 'Poster Mural (A3 - 30x42 cm)',
|
|
128
|
+
description: '150 DPI suffisant - se voit à distance',
|
|
129
|
+
icon: 'mdi:wall-fire',
|
|
130
|
+
points: [
|
|
131
|
+
'Visualisé de 1 à 2 mètres',
|
|
132
|
+
'Moins de pixels nécessaires',
|
|
133
|
+
'Économisez sur la qualité de la caméra'
|
|
134
|
+
],
|
|
135
|
+
highlight: true
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
title: 'Panneau Publicitaire (200x300 cm)',
|
|
139
|
+
description: '15-30 DPI - se voit à plusieurs mètres',
|
|
140
|
+
icon: 'mdi:sign',
|
|
141
|
+
points: [
|
|
142
|
+
'Observé à plus de 20 mètres de distance',
|
|
143
|
+
'Même une basse résolution rend bien',
|
|
144
|
+
'Optimise les fichiers de grande taille'
|
|
145
|
+
]
|
|
146
|
+
}
|
|
147
|
+
], columns: 3 },
|
|
148
|
+
|
|
149
|
+
{ type: 'title', text: 'Préparation des Fichiers pour l\'Impression Professionnelle', level: 3 },
|
|
150
|
+
{ type: 'proscons', items: [
|
|
151
|
+
{
|
|
152
|
+
pro: 'CMJN vs RVB : Les imprimantes utilisent de l\'encre (CMJN), les écrans de la lumière (RVB). Convertissez pour éviter les mauvaises surprises.',
|
|
153
|
+
con: 'Les couleurs peuvent changer lors de la conversion - prévisualisez d\'abord'
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
pro: 'Fond Perdu (Bleed) : Ajoutez 3 mm de chaque côté si l\'image doit atteindre le bord du papier',
|
|
157
|
+
con: 'Sans fond perdu, les bords coupés peuvent rester blancs'
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
pro: 'L\'Upscaling NE FONCTIONNE PAS : Augmenter les pixels dans Photoshop ajoute de fausses informations (lissage)',
|
|
161
|
+
con: 'Si vous devez imprimer en grand, il vous faut la photo originale haute résolution'
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
pro: 'Formats : TIFF sans compression ou JPEG haute qualité ; vectoriel (AI, EPS) pour les logos',
|
|
165
|
+
con: 'Le PNG ne supporte pas nativement le CMJN dans la plupart des imprimeries'
|
|
166
|
+
}
|
|
167
|
+
], proTitle: 'Recommandations', conTitle: 'Contre-indications' },
|
|
168
|
+
|
|
169
|
+
{ type: 'diagnostic', variant: 'warning', title: 'Erreur Commune : Le Mythe de l\'Upscaling', icon: 'mdi:alert', badge: 'Critique', html: '<strong>N\'augmentez PAS le DPI dans Photoshop sans changer les pixels.</strong> Passer de 72 DPI à 300 DPI réduit simplement la taille physique car le nombre de pixels reste le même. Si vous "ajoutez des pixels" par interpolation, l\'image sera floue. Il faut des pixels RÉELS dès l\'origine.' },
|
|
170
|
+
|
|
171
|
+
{ type: 'glossary', items: [
|
|
172
|
+
{
|
|
173
|
+
term: 'DPI (Dots Per Inch)',
|
|
174
|
+
definition: 'Mesure de résolution en impression : combien de points d\'encre par pouce linéaire (2,54 cm). 300 DPI = 90 000 points par pouce carré.'
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
term: 'CMJN',
|
|
178
|
+
definition: 'Espace colorimétrique d\'impression : Cyan, Magenta, Jaune, Noir (CMYK en anglais). Basé sur l\'encre soustractive.'
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
term: 'Fond Perdu (Bleed)',
|
|
182
|
+
definition: 'Zone supplémentaire (typiquement 3 mm) imprimée puis découpée. Assure que l\'image atteint le bord sans marges blanches.'
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
term: 'Résolution Native',
|
|
186
|
+
definition: 'Pixels RÉELS capturés par l\'appareil, sans manipulation. Augmenter le DPI ne génère pas de "résolution native".'
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
term: 'Interpolation (Upscaling)',
|
|
190
|
+
definition: 'Algorithme inventant de nouveaux pixels à partir de l\'existant. Utile pour de petits agrandissements, mais perd en netteté.'
|
|
191
|
+
}
|
|
192
|
+
] },
|
|
193
|
+
|
|
194
|
+
{ type: 'message', title: 'Précision Technique pour des Résultats Professionnels', ariaLabel: 'Informations sur les calculs d\'impression', html: 'Notre calculatrice convertit les pixels en centimètres en tenant compte des normes internationales (ISO 216 pour le papier). C\'est l\'outil idéal pour valider vos fichiers avant l\'impression.' },
|
|
195
|
+
|
|
196
|
+
{ type: 'title', text: 'Conclusion : Imprimez Sans Mauvaises Surprises', level: 3 },
|
|
197
|
+
{ type: 'paragraph', html: 'La différence entre une impression magnifique et décevante réside dans la relation entre pixels et DPI. Utilisez cet outil pour valider vos fichiers AVANT de passer à l\'imprimerie.' }
|
|
198
|
+
];
|
|
199
|
+
|
|
200
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
201
|
+
'@context': 'https://schema.org',
|
|
202
|
+
'@type': 'FAQPage',
|
|
203
|
+
mainEntity: faq.map((item) => ({
|
|
204
|
+
'@type': 'Question',
|
|
205
|
+
name: item.question,
|
|
206
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
207
|
+
})),
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
const howToSchema: WithContext<HowTo> = {
|
|
211
|
+
'@context': 'https://schema.org',
|
|
212
|
+
'@type': 'HowTo',
|
|
213
|
+
name: title,
|
|
214
|
+
description,
|
|
215
|
+
step: howTo.map((step) => ({
|
|
216
|
+
'@type': 'HowToStep',
|
|
217
|
+
name: step.name,
|
|
218
|
+
text: step.text,
|
|
219
|
+
})),
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
223
|
+
'@context': 'https://schema.org',
|
|
224
|
+
'@type': 'SoftwareApplication',
|
|
225
|
+
name: title,
|
|
226
|
+
description,
|
|
227
|
+
applicationCategory: 'UtilitiesApplication',
|
|
228
|
+
operatingSystem: 'Web',
|
|
229
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
230
|
+
inLanguage: 'fr',
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
export const content: PrintQualityCalculatorLocaleContent = {
|
|
234
|
+
slug,
|
|
235
|
+
title,
|
|
236
|
+
description,
|
|
237
|
+
ui,
|
|
238
|
+
seo,
|
|
239
|
+
faqTitle: "Frequently Asked Questions",
|
|
240
|
+
faq,
|
|
241
|
+
bibliography,
|
|
242
|
+
bibliographyTitle: "References",
|
|
243
|
+
howTo,
|
|
244
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
245
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { AudiovisualToolEntry, ToolLocaleContent, ToolDefinition } from '../../types';
|
|
2
|
+
import PrintQualityCalculator from './component.astro';
|
|
3
|
+
import PrintQualityCalculatorSEO from './seo.astro';
|
|
4
|
+
import PrintQualityCalculatorBibliography from './bibliography.astro';
|
|
5
|
+
|
|
6
|
+
export interface PrintQualityCalculatorUI {
|
|
7
|
+
dropTitle: string;
|
|
8
|
+
dropSubtitle: string;
|
|
9
|
+
resultsTitle: string;
|
|
10
|
+
dpiDensityLabel: string;
|
|
11
|
+
dpiPointsLabel: string;
|
|
12
|
+
maxPrintTitle: string;
|
|
13
|
+
standardFormatsTitle: string;
|
|
14
|
+
formatColumn: string;
|
|
15
|
+
measureColumn: string;
|
|
16
|
+
supportColumn: string;
|
|
17
|
+
qualityExcellent: string;
|
|
18
|
+
qualityGood: string;
|
|
19
|
+
qualityFair: string;
|
|
20
|
+
qualityPoor: string;
|
|
21
|
+
qualityExcellentDesc: string;
|
|
22
|
+
qualityGoodDesc: string;
|
|
23
|
+
qualityFairDesc: string;
|
|
24
|
+
qualityPoorDesc: string;
|
|
25
|
+
unitCm: string;
|
|
26
|
+
unitInches: string;
|
|
27
|
+
[key: string]: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export type PrintQualityCalculatorLocaleContent = ToolLocaleContent<PrintQualityCalculatorUI>;
|
|
31
|
+
|
|
32
|
+
import { content as es } from './i18n/es';
|
|
33
|
+
import { content as en } from './i18n/en';
|
|
34
|
+
import { content as fr } from './i18n/fr';
|
|
35
|
+
|
|
36
|
+
export const printQualityCalculator: AudiovisualToolEntry<PrintQualityCalculatorUI> = {
|
|
37
|
+
id: 'calidad-impresion',
|
|
38
|
+
icons: {
|
|
39
|
+
bg: 'mdi:printer',
|
|
40
|
+
fg: 'mdi:ruler-square',
|
|
41
|
+
},
|
|
42
|
+
i18n: {
|
|
43
|
+
es: async () => es as unknown as PrintQualityCalculatorLocaleContent,
|
|
44
|
+
en: async () => en as unknown as PrintQualityCalculatorLocaleContent,
|
|
45
|
+
fr: async () => fr as unknown as PrintQualityCalculatorLocaleContent,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export { PrintQualityCalculator, PrintQualityCalculatorSEO, PrintQualityCalculatorBibliography };
|
|
50
|
+
|
|
51
|
+
export const PRINT_QUALITY_CALCULATOR_TOOL: ToolDefinition = {
|
|
52
|
+
entry: printQualityCalculator as unknown as AudiovisualToolEntry,
|
|
53
|
+
Component: PrintQualityCalculator,
|
|
54
|
+
SEOComponent: PrintQualityCalculatorSEO,
|
|
55
|
+
BibliographyComponent: PrintQualityCalculatorBibliography,
|
|
56
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export interface PrintSize {
|
|
2
|
+
cmW: number;
|
|
3
|
+
cmH: number;
|
|
4
|
+
inW: number;
|
|
5
|
+
inH: number;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface PaperFormat {
|
|
9
|
+
name: string;
|
|
10
|
+
w: number;
|
|
11
|
+
h: number;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const PAPER_FORMATS: PaperFormat[] = [
|
|
15
|
+
{ name: "A6 (Postal)", w: 10.5, h: 14.8 },
|
|
16
|
+
{ name: "A5 (Cuartilla)", w: 14.8, h: 21.0 },
|
|
17
|
+
{ name: "A4 (Folio)", w: 21.0, h: 29.7 },
|
|
18
|
+
{ name: "A3 (Doble Folio)", w: 29.7, h: 42.0 },
|
|
19
|
+
{ name: "A2 (Poster Pequeño)", w: 42.0, h: 59.4 },
|
|
20
|
+
{ name: "A1 (Poster Grande)", w: 59.4, h: 84.1 },
|
|
21
|
+
{ name: "A0 (Plano)", w: 84.1, h: 118.9 },
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
export function calculatePrintSize(width: number, height: number, dpi: number): PrintSize {
|
|
25
|
+
const inW = width / dpi;
|
|
26
|
+
const inH = height / dpi;
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
inW,
|
|
30
|
+
inH,
|
|
31
|
+
cmW: inW * 2.54,
|
|
32
|
+
cmH: inH * 2.54
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function getQualityLevel(dpi: number): 'excellent' | 'good' | 'fair' | 'poor' {
|
|
37
|
+
if (dpi >= 300) return 'excellent';
|
|
38
|
+
if (dpi >= 150) return 'good';
|
|
39
|
+
if (dpi >= 72) return 'fair';
|
|
40
|
+
return 'poor';
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function checkFormatSupport(imgW: number, imgH: number, paper: PaperFormat): { supported: boolean; percentage: number } {
|
|
44
|
+
const imgMin = Math.min(imgW, imgH);
|
|
45
|
+
const imgMax = Math.max(imgW, imgH);
|
|
46
|
+
const paperMin = Math.min(paper.w, paper.h);
|
|
47
|
+
const paperMax = Math.max(paper.w, paper.h);
|
|
48
|
+
|
|
49
|
+
const supported = imgMin >= paperMin - 0.1 && imgMax >= paperMax - 0.1;
|
|
50
|
+
const percentage = Math.min(imgMin / paperMin, imgMax / paperMax) * 100;
|
|
51
|
+
|
|
52
|
+
return { supported, percentage };
|
|
53
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { printQualityCalculator } 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 localeContentLoader = (printQualityCalculator.i18n as any)[locale];
|
|
12
|
+
const content = localeContentLoader ? await localeContentLoader() : null;
|
|
13
|
+
if (!content) return null;
|
|
14
|
+
|
|
15
|
+
const seoSections = content.seo;
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
<SEORenderer content={{ locale, sections: seoSections }} />
|