Files
Дмитрий 72c57f0de3 add media service
2026-05-08 17:36:48 +03:00

50 lines
1.2 KiB
Go

package images
import (
"bytes"
"image"
"image/jpeg"
_ "image/png"
"github.com/disintegration/imaging"
)
type Processor interface {
Process(input []byte, mode string) ([]byte, string, error)
}
type ImageProcessor struct{}
func NewImageProcessor() *ImageProcessor {
return &ImageProcessor{}
}
func (p *ImageProcessor) Process(fileBytes []byte, mode string) ([]byte, string, error) {
if mode == "raw" {
return fileBytes, "application/octet-stream", nil
}
img, _, err := image.Decode(bytes.NewReader(fileBytes))
if err != nil {
// Если это не картинка (например, документ или видео), просто возвращаем исходные байты
return fileBytes, "application/octet-stream", nil
}
var processedImg image.Image
switch mode {
case "avatar":
processedImg = imaging.Fill(img, 500, 500, imaging.Center, imaging.Lanczos)
case "chat":
processedImg = imaging.Fit(img, 1280, 1280, imaging.Lanczos)
default:
processedImg = img
}
buf := new(bytes.Buffer)
err = jpeg.Encode(buf, processedImg, &jpeg.Options{Quality: 80})
if err != nil {
return nil, "", err
}
return buf.Bytes(), "image/jpeg", nil
}