Añadido el parametro tsgrouparray

master
dev 1 year ago
parent 0b6c0ae2ca
commit 3e45105f13

Binary file not shown.

@ -16,12 +16,14 @@ import (
)
type Config struct {
dir string
width int
height int
quality int
typescript bool
tsgroup bool
dir string
width int
height int
quality int
typescript bool
tsgroup bool
tsgrouparray bool
outputName string
}
func main() {
@ -46,6 +48,18 @@ func main() {
os.Exit(1)
}
// Validar que no se usen -ts y -tsgrouparray juntos
if cfg.typescript && cfg.tsgrouparray {
fmt.Println("Error: No puedes usar -ts y -tsgrouparray simultáneamente")
os.Exit(1)
}
// Validar que no se usen -tsgroup y -tsgrouparray juntos
if cfg.tsgroup && cfg.tsgrouparray {
fmt.Println("Error: No puedes usar -tsgroup y -tsgrouparray simultáneamente")
os.Exit(1)
}
// Leer archivos del directorio
entries, err := os.ReadDir(cfg.dir)
if err != nil {
@ -53,12 +67,17 @@ func main() {
os.Exit(1)
}
// Si es tsgroup, procesar todas las imágenes en un solo archivo
// Si es tsgroup o tsgrouparray, procesar todas las imágenes en un solo archivo
if cfg.tsgroup {
processTsGroup(entries, cfg)
return
}
if cfg.tsgrouparray {
processTsGroupArray(entries, cfg)
return
}
// Procesamiento individual
processed := 0
for _, entry := range entries {
@ -104,6 +123,8 @@ func parseFlags() Config {
flag.IntVar(&cfg.quality, "quality", 80, "Calidad JPEG (1-100)")
flag.BoolVar(&cfg.typescript, "ts", false, "Generar archivos TypeScript individuales (.b64.ts)")
flag.BoolVar(&cfg.tsgroup, "tsgroup", false, "Generar un único archivo TypeScript con todas las imágenes")
flag.BoolVar(&cfg.tsgrouparray, "tsgrouparray", false, "Generar un único archivo TypeScript con Record<string, string>")
flag.StringVar(&cfg.outputName, "output", "", "Nombre del archivo de salida (solo para -tsgroup/-tsgrouparray)")
flag.Usage = func() {
fmt.Fprintf(os.Stderr, "\n╔════════════════════════════════════════════════════════════════════╗\n")
@ -138,12 +159,24 @@ func parseFlags() Config {
fmt.Fprintf(os.Stderr, " -ts\n")
fmt.Fprintf(os.Stderr, " Generar archivos TypeScript individuales (.b64.ts)\n")
fmt.Fprintf(os.Stderr, " Formato: export const nombre = \"data:image/jpeg;base64,...\"\n")
fmt.Fprintf(os.Stderr, " No se puede usar junto con -tsgroup\n\n")
fmt.Fprintf(os.Stderr, " No se puede usar con -tsgroup ni -tsgrouparray\n\n")
fmt.Fprintf(os.Stderr, " -tsgroup\n")
fmt.Fprintf(os.Stderr, " Generar un único archivo TypeScript con todas las imágenes\n")
fmt.Fprintf(os.Stderr, " Generar un único archivo TypeScript con exports individuales\n")
fmt.Fprintf(os.Stderr, " Archivo: nombre-directorio.b64.ts\n")
fmt.Fprintf(os.Stderr, " No se puede usar junto con -ts\n\n")
fmt.Fprintf(os.Stderr, " No se puede usar con -ts ni -tsgrouparray\n\n")
fmt.Fprintf(os.Stderr, " -tsgrouparray\n")
fmt.Fprintf(os.Stderr, " Generar un único archivo TypeScript con Record<string, string>\n")
fmt.Fprintf(os.Stderr, " Archivo: nombre-directorio.b64.ts (o usar -output)\n")
fmt.Fprintf(os.Stderr, " Formato: export const images: Record<string, string> = {...}\n")
fmt.Fprintf(os.Stderr, " No se puede usar con -ts ni -tsgroup\n\n")
fmt.Fprintf(os.Stderr, " -output string\n")
fmt.Fprintf(os.Stderr, " Nombre personalizado para el archivo de salida\n")
fmt.Fprintf(os.Stderr, " Solo válido con -tsgroup o -tsgrouparray\n")
fmt.Fprintf(os.Stderr, " No incluir extensión .b64.ts (se añade automáticamente)\n")
fmt.Fprintf(os.Stderr, " Ejemplo: -output miarchivo → genera miarchivo.b64.ts\n\n")
fmt.Fprintf(os.Stderr, " -h, -help\n")
fmt.Fprintf(os.Stderr, " Muestra esta ayuda\n\n")
@ -161,9 +194,15 @@ func parseFlags() Config {
fmt.Fprintf(os.Stderr, " # Generar archivos TypeScript individuales\n")
fmt.Fprintf(os.Stderr, " %s -dir ./imagenes -width 800 -ts\n\n", os.Args[0])
fmt.Fprintf(os.Stderr, " # Generar un único archivo TypeScript con todas las imágenes\n")
fmt.Fprintf(os.Stderr, " # Generar un único archivo TypeScript con exports individuales\n")
fmt.Fprintf(os.Stderr, " %s -dir ./imagenes -width 800 -tsgroup\n\n", os.Args[0])
fmt.Fprintf(os.Stderr, " # Generar un único archivo TypeScript con Record\n")
fmt.Fprintf(os.Stderr, " %s -dir ./imagenes -width 800 -tsgrouparray\n\n", os.Args[0])
fmt.Fprintf(os.Stderr, " # Generar con nombre personalizado\n")
fmt.Fprintf(os.Stderr, " %s -dir ./imagenes -tsgrouparray -output misImagenes\n\n", os.Args[0])
fmt.Fprintf(os.Stderr, " # Dimensiones para visualización web\n")
fmt.Fprintf(os.Stderr, " %s -dir ./imagenes -width 1240 -quality 85\n\n", os.Args[0])
@ -179,12 +218,13 @@ func parseFlags() Config {
fmt.Fprintf(os.Stderr, "NOTAS:\n")
fmt.Fprintf(os.Stderr, " • La relación de aspecto se mantiene automáticamente\n")
fmt.Fprintf(os.Stderr, " • No puedes usar -width y -height simultáneamente\n")
fmt.Fprintf(os.Stderr, " • No puedes usar -ts y -tsgroup simultáneamente\n")
fmt.Fprintf(os.Stderr, " • Solo puedes usar una opción de TypeScript a la vez\n")
fmt.Fprintf(os.Stderr, " • Las imágenes más pequeñas que el tamaño especificado no se agrandan\n")
fmt.Fprintf(os.Stderr, " • Archivos generados:\n")
fmt.Fprintf(os.Stderr, " - Sin flags: nombreoriginal.base64\n")
fmt.Fprintf(os.Stderr, " - Con -ts: nombreoriginal.b64.ts (uno por imagen)\n")
fmt.Fprintf(os.Stderr, " - Con -tsgroup: nombre-directorio.b64.ts (todas las imágenes)\n\n")
fmt.Fprintf(os.Stderr, " - Con -tsgroup: nombre-directorio.b64.ts (exports individuales)\n")
fmt.Fprintf(os.Stderr, " - Con -tsgrouparray: nombre-directorio.b64.ts (Record)\n\n")
}
flag.Parse()
@ -204,6 +244,12 @@ func parseFlags() Config {
os.Exit(1)
}
// Validar que -output solo se use con -tsgroup o -tsgrouparray
if cfg.outputName != "" && !cfg.tsgroup && !cfg.tsgrouparray {
fmt.Println("Error: -output solo se puede usar con -tsgroup o -tsgrouparray")
os.Exit(1)
}
return cfg
}
@ -325,9 +371,14 @@ func generateVarName(filename string) string {
}
func processTsGroup(entries []os.DirEntry, cfg Config) {
// Obtener nombre del directorio
dirName := filepath.Base(cfg.dir)
outputPath := filepath.Join(cfg.dir, dirName+".b64.ts")
// Determinar nombre del archivo de salida
var outputName string
if cfg.outputName != "" {
outputName = cfg.outputName
} else {
outputName = filepath.Base(cfg.dir)
}
outputPath := filepath.Join(cfg.dir, outputName+".b64.ts")
var tsContent strings.Builder
tsContent.WriteString("// Imágenes generadas automáticamente\n\n")
@ -415,3 +466,67 @@ func imageToBase64(inputPath string, cfg Config) (string, error) {
// Convertir a base64
return base64.StdEncoding.EncodeToString(buf.Bytes()), nil
}
func processTsGroupArray(entries []os.DirEntry, cfg Config) {
// Determinar nombre del archivo de salida
var outputName string
if cfg.outputName != "" {
outputName = cfg.outputName
} else {
outputName = filepath.Base(cfg.dir)
}
outputPath := filepath.Join(cfg.dir, outputName+".b64.ts")
var tsContent strings.Builder
tsContent.WriteString("// Imágenes generadas automáticamente\n\n")
tsContent.WriteString("export const images: Record<string, string> = {\n")
processed := 0
for _, entry := range entries {
if entry.IsDir() {
continue
}
// Verificar si es una imagen soportada
ext := strings.ToLower(filepath.Ext(entry.Name()))
if ext != ".jpg" && ext != ".jpeg" && ext != ".png" {
continue
}
inputPath := filepath.Join(cfg.dir, entry.Name())
fmt.Printf("Procesando: %s\n", entry.Name())
// Procesar imagen a base64
base64Str, err := imageToBase64(inputPath, cfg)
if err != nil {
fmt.Printf(" Error: %v\n", err)
continue
}
// Generar nombre de clave
keyName := generateVarName(entry.Name())
// Añadir al contenido TypeScript
tsContent.WriteString(fmt.Sprintf(" %s: \"data:image/jpeg;base64,%s\",\n", keyName, base64Str))
fmt.Printf(" ✓ Añadido: %s\n", keyName)
processed++
}
if processed == 0 {
fmt.Println("No se encontraron imágenes para procesar")
return
}
tsContent.WriteString("}\n")
// Guardar archivo
err := os.WriteFile(outputPath, []byte(tsContent.String()), 0644)
if err != nil {
fmt.Printf("Error al guardar archivo: %v\n", err)
os.Exit(1)
}
fmt.Printf("\n✓ Archivo generado: %s\n", filepath.Base(outputPath))
fmt.Printf("%d imágenes procesadas correctamente\n", processed)
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save

Powered by TurnKey Linux.