sync: resize heading pictures

This commit is contained in:
nemunaire 2020-01-16 14:57:13 +01:00
parent a8b6e9fba5
commit 8f998485bb

View File

@ -3,13 +3,17 @@ package sync
import (
"errors"
"fmt"
"image"
"image/jpeg"
"math/rand"
"os"
"path"
"regexp"
"strings"
"unicode"
"github.com/julienschmidt/httprouter"
"golang.org/x/image/draw"
"gopkg.in/russross/blackfriday.v2"
"srs.epita.fr/fic-server/libfic"
)
@ -31,6 +35,42 @@ func GetThemes(i Importer) ([]string, error) {
return themes, nil
}
// resizePicture makes the given image just fill the given rectangle.
func resizePicture(importedPath string, rect image.Rectangle) error {
if fl, err := os.Open(importedPath); err != nil {
return err
} else {
if src, _, err := image.Decode(fl); err != nil {
fl.Close()
return err
} else if src.Bounds().Max.X > rect.Max.X && src.Bounds().Max.Y > rect.Max.Y {
fl.Close()
mWidth := rect.Max.Y * src.Bounds().Max.X / src.Bounds().Max.Y
mHeight := rect.Max.X * src.Bounds().Max.Y / src.Bounds().Max.X
if mWidth > rect.Max.X {
rect.Max.X = mWidth
} else {
rect.Max.Y = mHeight
}
dst := image.NewRGBA(rect)
draw.CatmullRom.Scale(dst, rect, src, src.Bounds(), draw.Over, nil)
dstFile, err := os.Create(importedPath)
if err != nil {
return err
}
defer dstFile.Close()
if err = jpeg.Encode(dstFile, dst, &jpeg.Options{100}); err != nil {
return err
}
}
}
return nil
}
// getAuthors parses the AUTHORS file.
func getAuthors(i Importer, tname string) ([]string, error) {
if authors, err := getFileContent(i, path.Join(tname, "AUTHORS.txt")); err != nil {
@ -126,6 +166,10 @@ func SyncThemes(i Importer) []string {
if len(btheme.Image) > 0 {
if _, err := i.importFile(btheme.Image,
func(filePath string, origin string) (interface{}, error) {
if err := resizePicture(filePath, image.Rect(0, 0, 500, 300)); err != nil {
return nil, err
}
btheme.Image = strings.TrimPrefix(filePath, fic.FilesDir)
return nil, nil
}); err != nil {