package image import ( "crypto/md5" "encoding/hex" "errors" "io/ioutil" "log" "os" "os/exec" "git.1750studios.com/gronkhDE/gogronkh/config" ) var isem = make(chan byte, 5) func ImageNameGenerator(url string) (string, string, bool) { urlBytes := []byte(url) md5Bytes := md5.Sum(urlBytes) hash := hex.EncodeToString(md5Bytes[:]) folders := config.C.ImageDirectory + hash[0:2] + "/" + hash[0:4] + "/" urls := config.C.ImageWebDirectory + hash[0:2] + "/" + hash[0:4] + "/" if err := os.MkdirAll(folders, 0775); err != nil { log.Fatalf("FAT Could not create ImageDirectory, error: %+v", err) } finalExists := true if _, err := os.Stat(folders + hash); os.IsNotExist(err) { finalExists = false } finalPath := folders + hash finalUrl := urls + hash return finalPath, finalUrl, finalExists } func ResizeAvatar(url string) (string, string, error) { isem <- 1 var out []string var size []string var name string var uname string var exists bool if name, uname, exists = ImageNameGenerator(url); exists == true { <- isem return uname + "-small.png", uname + "-big.png", nil } out = append(out, name + "-big.png") out = append(out, name + "-small.png") size = append(size, "240x240") size = append(size, "64x64") err := ResizeImage(url, out, size) if err != nil { <- isem return "", "", err } <- isem return uname + "-small.png", uname + "-big.png", err } func ResizeFanArt(url string) (string, string, error) { isem <- 1 var out []string var size []string var name string var uname string var exists bool if name, uname, exists = ImageNameGenerator(url); exists == true { <- isem return uname + "-small.png", uname + "-big.png", nil } out = append(out, name + "-big.png") out = append(out, name + "-small.png") size = append(size, "1920x1080") size = append(size, "640x360") err := ResizeImage(url, out, size) if err != nil { <- isem return "", "", err } <- isem return uname + "-small.png", uname + "-big.png", err } func ResizeCover(url string) (string, string, error) { isem <- 1 var out []string var size []string var name string var uname string var exists bool if name, uname, exists = ImageNameGenerator(url); exists == true { <- isem return uname + "-small.png", uname + "-big.png", nil } out = append(out, name + "-big.png") out = append(out, name + "-small.png") size = append(size, "600x846") size = append(size, "260x366") err := ResizeImage(url, out, size) if err != nil { <- isem return "", "", err } <- isem return uname + "-small.png", uname + "-big.png", err } func ResizeThumb(url string) (string, string, error) { isem <- 1 var out []string var size []string var name string var uname string var exists bool if name, uname, exists = ImageNameGenerator(url); exists == true { <- isem return uname + "-small.png", uname + "-big.png", nil } out = append(out, name + "-big.png") out = append(out, name + "-small.png") size = append(size, "1280x720") size = append(size, "640x360") err := ResizeImage(url, out, size) if err != nil { <- isem return "", "", err } <- isem return uname + "-small.png", uname + "-big.png", err } func ResizeImage(url string, out []string, size []string) (error) { res, err := GetHTTPResource(url) if err != nil { return err } if res == nil { return errors.New("404") } defer res.Body.Close() blob, err := ioutil.ReadAll(res.Body) if err != nil { return err } if len(blob) == 0 { return errors.New("Empty response") } f, erro := ioutil.TempFile("", "dl-") if erro != nil { return erro } tfile := f.Name() _, err = f.Write(blob) if err != nil { return err } f.Close() for i := 0; i < len(out); i++ { cmd := exec.Command("convert", tfile, "-resize", size[i] + "^", "-interlace", "PNG", "-colors", "255", "-gravity", "center", "-crop", size[i] + "+0+0", "+repage", "PNG8:" + out[i]) err = cmd.Run() if err != nil { return err } } os.Remove(tfile) return nil }