Se ha introducido el parametro tsgroup para unificar todas las imagenes en un archivo ts

master
dev 1 year ago
parent 26646a3753
commit 0b6c0ae2ca

@ -21,6 +21,7 @@ type Config struct {
height int
quality int
typescript bool
tsgroup bool
}
func main() {
@ -39,6 +40,12 @@ func main() {
os.Exit(1)
}
// Validar que no se usen -ts y -tsgroup juntos
if cfg.typescript && cfg.tsgroup {
fmt.Println("Error: No puedes usar -ts y -tsgroup simultáneamente")
os.Exit(1)
}
// Leer archivos del directorio
entries, err := os.ReadDir(cfg.dir)
if err != nil {
@ -46,6 +53,13 @@ func main() {
os.Exit(1)
}
// Si es tsgroup, procesar todas las imágenes en un solo archivo
if cfg.tsgroup {
processTsGroup(entries, cfg)
return
}
// Procesamiento individual
processed := 0
for _, entry := range entries {
if entry.IsDir() {
@ -88,7 +102,8 @@ func parseFlags() Config {
flag.IntVar(&cfg.width, "width", 0, "Ancho máximo en píxeles (mantiene proporción)")
flag.IntVar(&cfg.height, "height", 0, "Alto máximo en píxeles (mantiene proporción)")
flag.IntVar(&cfg.quality, "quality", 80, "Calidad JPEG (1-100)")
flag.BoolVar(&cfg.typescript, "ts", false, "Generar archivos TypeScript en lugar de .base64")
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.Usage = func() {
fmt.Fprintf(os.Stderr, "\n╔════════════════════════════════════════════════════════════════════╗\n")
@ -121,8 +136,14 @@ func parseFlags() Config {
fmt.Fprintf(os.Stderr, " Por defecto: 80\n\n")
fmt.Fprintf(os.Stderr, " -ts\n")
fmt.Fprintf(os.Stderr, " Generar archivos TypeScript (.b64.ts) en lugar de .base64\n")
fmt.Fprintf(os.Stderr, " Formato: export const nombre = \"data:image/jpeg;base64,...\"\n\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, " -tsgroup\n")
fmt.Fprintf(os.Stderr, " Generar un único archivo TypeScript con todas las imágenes\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, " -h, -help\n")
fmt.Fprintf(os.Stderr, " Muestra esta ayuda\n\n")
@ -137,9 +158,12 @@ func parseFlags() Config {
fmt.Fprintf(os.Stderr, " # Redimensionar por altura con calidad máxima\n")
fmt.Fprintf(os.Stderr, " %s -dir ./imagenes -height 3508 -quality 95\n\n", os.Args[0])
fmt.Fprintf(os.Stderr, " # Generar archivos TypeScript\n")
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, " %s -dir ./imagenes -width 800 -tsgroup\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])
@ -155,8 +179,12 @@ 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, " • Las imágenes más pequeñas que el tamaño especificado no se agrandan\n")
fmt.Fprintf(os.Stderr, " • Los archivos generados tienen el mismo nombre + extensión .base64 o .ts\n\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")
}
flag.Parse()
@ -295,3 +323,95 @@ func generateVarName(filename string) string {
return name
}
func processTsGroup(entries []os.DirEntry, cfg Config) {
// Obtener nombre del directorio
dirName := filepath.Base(cfg.dir)
outputPath := filepath.Join(cfg.dir, dirName+".b64.ts")
var tsContent strings.Builder
tsContent.WriteString("// Imágenes generadas automáticamente\n\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 variable
varName := generateVarName(entry.Name())
// Añadir al contenido TypeScript
tsContent.WriteString(fmt.Sprintf("export const %s = \"data:image/jpeg;base64,%s\"\n\n", varName, base64Str))
fmt.Printf(" ✓ Añadido: %s\n", varName)
processed++
}
if processed == 0 {
fmt.Println("No se encontraron imágenes para procesar")
return
}
// 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)
}
func imageToBase64(inputPath string, cfg Config) (string, error) {
// Abrir imagen
file, err := os.Open(inputPath)
if err != nil {
return "", fmt.Errorf("error al abrir archivo: %w", err)
}
defer file.Close()
// Decodificar imagen
img, format, err := image.Decode(file)
if err != nil {
return "", fmt.Errorf("error al decodificar imagen: %w", err)
}
// Redimensionar imagen
resizedImg := resizeImage(img, cfg.width, cfg.height)
// Convertir a bytes
var buf bytes.Buffer
switch format {
case "jpeg", "jpg":
err = jpeg.Encode(&buf, resizedImg, &jpeg.Options{Quality: cfg.quality})
case "png":
err = png.Encode(&buf, resizedImg)
default:
err = jpeg.Encode(&buf, resizedImg, &jpeg.Options{Quality: cfg.quality})
}
if err != nil {
return "", fmt.Errorf("error al codificar imagen: %w", err)
}
// Convertir a base64
return base64.StdEncoding.EncodeToString(buf.Bytes()), nil
}

Loading…
Cancel
Save

Powered by TurnKey Linux.