Improved background jobs
This commit is contained in:
65
jobs/avatars/AvatarOriginalFileOutput.go
Normal file
65
jobs/avatars/AvatarOriginalFileOutput.go
Normal file
@ -0,0 +1,65 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"image/gif"
|
||||
"image/jpeg"
|
||||
"image/png"
|
||||
"io/ioutil"
|
||||
|
||||
"github.com/animenotifier/arn"
|
||||
"github.com/nfnt/resize"
|
||||
)
|
||||
|
||||
// AvatarOriginalFileOutput ...
|
||||
type AvatarOriginalFileOutput struct {
|
||||
Directory string
|
||||
Size int
|
||||
}
|
||||
|
||||
// SaveAvatar writes the original avatar to the file system.
|
||||
func (output *AvatarOriginalFileOutput) SaveAvatar(avatar *Avatar) error {
|
||||
// Determine file extension
|
||||
extension := ""
|
||||
|
||||
switch avatar.Format {
|
||||
case "jpg", "jpeg":
|
||||
extension = ".jpg"
|
||||
case "png":
|
||||
extension = ".png"
|
||||
case "gif":
|
||||
extension = ".gif"
|
||||
default:
|
||||
return errors.New("Unknown format: " + avatar.Format)
|
||||
}
|
||||
|
||||
// Resize if needed
|
||||
data := avatar.Data
|
||||
img := avatar.Image
|
||||
|
||||
if img.Bounds().Dx() != output.Size {
|
||||
img = resize.Resize(arn.AvatarSmallSize, 0, img, resize.Lanczos3)
|
||||
buffer := new(bytes.Buffer)
|
||||
|
||||
var err error
|
||||
switch extension {
|
||||
case ".jpg":
|
||||
err = jpeg.Encode(buffer, img, nil)
|
||||
case ".png":
|
||||
err = png.Encode(buffer, img)
|
||||
case ".gif":
|
||||
err = gif.Encode(buffer, img, nil)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
data = buffer.Bytes()
|
||||
}
|
||||
|
||||
// Write to file
|
||||
fileName := output.Directory + avatar.User.ID + extension
|
||||
return ioutil.WriteFile(fileName, data, 0644)
|
||||
}
|
Reference in New Issue
Block a user