feat: file_save_disk, file_delete, file_serve, upload_parse, upload_handler, thumbnail_generate (issue 0014 fase 3)
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
---
|
||||
name: thumbnail_generate
|
||||
kind: function
|
||||
lang: go
|
||||
domain: infra
|
||||
version: "1.0.0"
|
||||
purity: impure
|
||||
signature: "func ThumbnailGenerate(srcPath string, dstPath string, maxWidth int, maxHeight int) error"
|
||||
description: "Lee una imagen JPEG o PNG, la redimensiona manteniendo aspect ratio para que quepa en (maxWidth, maxHeight) y la guarda en dstPath. Solo soporta entrada/salida JPEG y PNG."
|
||||
tags: [image, thumbnail, resize, file, upload, infra]
|
||||
uses_functions: []
|
||||
uses_types: []
|
||||
returns: []
|
||||
returns_optional: false
|
||||
error_type: "error_go_core"
|
||||
imports: [fmt, image, image/jpeg, image/png, os, path/filepath, strings]
|
||||
params:
|
||||
- name: srcPath
|
||||
desc: "ruta de la imagen original (JPEG o PNG)"
|
||||
- name: dstPath
|
||||
desc: "ruta destino del thumbnail (extension determina formato de salida: .jpg/.jpeg/.png)"
|
||||
- name: maxWidth
|
||||
desc: "ancho maximo del thumbnail en pixeles (>0)"
|
||||
- name: maxHeight
|
||||
desc: "alto maximo del thumbnail en pixeles (>0)"
|
||||
output: "nil si el thumbnail se genero correctamente, error si falla la lectura, decode, encode o si la extension no es soportada"
|
||||
tested: true
|
||||
tests: ["genera thumbnail JPEG mas pequeno que el original", "preserva aspect ratio", "rechaza extension de salida no soportada", "no agranda imagenes ya pequenas"]
|
||||
test_file_path: "functions/infra/thumbnail_generate_test.go"
|
||||
file_path: "functions/infra/thumbnail_generate.go"
|
||||
---
|
||||
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
err := ThumbnailGenerate("./uploads/photo.jpg", "./uploads/thumbs/photo.jpg", 200, 200)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
```
|
||||
|
||||
## Notas
|
||||
|
||||
Implementacion solo con stdlib (`image`, `image/jpeg`, `image/png`). Resize nearest-neighbor: rapido y sin dependencias, pero baja calidad. Para apps que necesiten thumbnails de alta calidad usar `golang.org/x/image/draw` con `BiLinear` o `CatmullRom`.
|
||||
|
||||
NO soporta WebP, AVIF, HEIC ni GIF. Si la imagen original ya es mas pequena que (maxWidth, maxHeight), se guarda sin redimensionar (no se agranda).
|
||||
Reference in New Issue
Block a user