package main import ( "bytes" "image" _ "image/gif" "image/jpeg" _ "image/png" "os" "golang.org/x/image/draw" ) func retrieveArt(path string) ([]byte, error) { //streaming PC is primarily flacs, so flacs first, then mp3s, then check for covers in folder, finally just use a default image if none of the above exist. switch { case hasFlacTrackArt(path): return getFlacArt(path) case hasMp3TrackArt(path): return getMP3Art(path) case hasCoverArtFile(path): return getCoverArtFile(path) default: return getDefaultArt() } } func writeArtFile(orig []byte) (string, error) { imageSize := 700 pathOut := "/run/user/1000/albumcover.jpg" img := make([]byte, 0) imgBuffIn, imgBuffOut := bytes.NewBuffer(orig), bytes.NewBuffer(img) imgOrig, _, err := image.Decode(imgBuffIn) if err != nil { return "", err } f, err := os.Create(pathOut) if err != nil { return "", err } defer f.Close() imgOut := image.NewRGBA(image.Rect(0, 0, imageSize, imageSize)) draw.ApproxBiLinear.Scale(imgOut, imgOut.Rect, imgOrig, imgOrig.Bounds(), draw.Over, nil) err = jpeg.Encode(imgBuffOut, imgOut, nil) if err != nil { return "", err } _, err = f.Write(imgBuffOut.Bytes()) if err != nil { return "", err } return pathOut, nil }