nidus-sync/platform/avatar.go

41 lines
1.2 KiB
Go
Raw Permalink Normal View History

package platform
import (
"bytes"
"context"
"fmt"
"github.com/Gleipnir-Technology/nidus-sync/platform/file"
"github.com/disintegration/imaging"
"github.com/rs/zerolog/log"
)
func AvatarCreate(ctx context.Context, u User, upload file.Upload) error {
f, err := file.NewFileReader(file.CollectionAvatar, upload.UUID)
// Decode image (supports PNG, JPG, GIF)
img, err := imaging.Decode(f)
if err != nil {
return fmt.Errorf("decode: %w", err)
}
// Resize to 200x200, maintaining aspect ratio
avatar := imaging.Fill(img, 200, 200, imaging.Center, imaging.Lanczos)
// Save or encode
//filename := fmt.Sprintf("avatar-%s.jpg", upload.UUID.String())
//err = imaging.Save(avatar, filename)
//log.Info().Str("filename", filename).Msg("wrote avatar file")
// Or encode to buffer: imaging.Encode(writer, avatar, imaging.JPEG)
writer := &bytes.Buffer{}
err = imaging.Encode(writer, avatar, imaging.PNG)
if err != nil {
return fmt.Errorf("encode: %w", err)
}
err = file.FileContentWrite(writer, file.CollectionAvatar, upload.UUID)
if err != nil {
return fmt.Errorf("write content: %w", err)
}
log.Info().Str("uuid", upload.UUID.String()).Msg("wrote avatar file")
return nil
}