1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package renderer
- import (
- "errors"
- "image"
- "image/jpeg"
- "os"
- "path/filepath"
- "github.com/nfnt/resize"
- "github.com/oliamb/cutter"
- )
- // Generate thumbnail for image. Output file will have the same name as the input file with .jpg extension
- func generateThumbnailForImage(inputFile string, outputFolder string) error {
- var img image.Image
- var err error
- fileInfo, err := os.Stat(inputFile)
- if err != nil {
- return errors.New("failed to get file info: " + err.Error())
- }
- if fileInfo.Size() > (25 << 20) {
- // Maximum image size to be converted is 25MB
- return errors.New("image file too large")
- }
- srcImage, err := os.OpenFile(inputFile, os.O_RDONLY, 0775)
- if err != nil {
- return err
- }
- defer srcImage.Close()
- img, _, err = image.Decode(srcImage)
- if err != nil {
- return err
- }
- //Resize to desiered width
- //Check boundary to decide resize mode
- b := img.Bounds()
- imgWidth := b.Max.X
- imgHeight := b.Max.Y
- var m image.Image
- if imgWidth > imgHeight {
- m = resize.Resize(0, 480, img, resize.Lanczos3)
- } else {
- m = resize.Resize(480, 0, img, resize.Lanczos3)
- }
- //Crop out the center
- croppedImg, err := cutter.Crop(m, cutter.Config{
- Width: 480,
- Height: 480,
- Mode: cutter.Centered,
- })
- //Create the thumbnail
- outputFilename := filepath.Join(outputFolder, filepath.Base(inputFile))
- out, err := os.Create(outputFilename + ".jpg")
- if err != nil {
- return err
- }
- // write new image to file
- jpeg.Encode(out, croppedImg, nil)
- out.Close()
- return nil
- }
|