implemented resizing of new images before saving
arnaucode idoctnef@openmailbox.org
Tue, 20 Jun 2017 18:12:15 +0200
3 files changed,
79 insertions(+),
23 deletions(-)
M
handlers.go
→
handlers.go
@@ -2,13 +2,9 @@ package main
import ( "fmt" - "image" "image/jpeg" - "image/png" "io/ioutil" "net/http" - "os" - "strings" "github.com/gorilla/mux" )@@ -20,34 +16,17 @@
func ImageShow(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) imageName := vars["imageName"] - //fmt.Fprintln(w, "Image show:", imageName) - var imageExtension = strings.Split(imageName, ".")[1] - file, err := os.Open(imageName) + file, err := ioutil.ReadFile(imageName) if err != nil { - //log.Fatal(err) - //fmt.Fprintln(w, "la imatge no existeix al server") fmt.Fprintln(w, err) } - var img image.Image - switch imageExtension { - case "png": - img, err = png.Decode(file) - case "jpg": - img, err = jpeg.Decode(file) - case "jpeg": - img, err = jpeg.Decode(file) - default: - img = nil - } + img, err := dataToImage(file, imageName) if err != nil { - //log.Fatal(err) fmt.Fprintln(w, "la imatge no existeix al server") } else { - file.Close() - jpeg.Encode(w, img, nil) // Write to the ResponseWriter } }@@ -60,6 +39,16 @@ }
data, err := ioutil.ReadAll(file) if err != nil { fmt.Println(err) + } + + img, err := dataToImage(data, handler.Filename) + if err != nil { + fmt.Fprintln(w, "error al processar la imatge") + } + img = Resize(img) + data, err = imageToData(img, handler.Filename) + if err != nil { + fmt.Fprintln(w, "error al processar la imatge") } err = ioutil.WriteFile(handler.Filename, data, 0777) if err != nil {
A
imageOperations.go
@@ -0,0 +1,57 @@
+package main + +import ( + "bytes" + "image" + "image/jpeg" + "image/png" + "strings" + + "github.com/nfnt/resize" +) + +func dataToImage(data []byte, imageName string) (image.Image, error) { + reader := bytes.NewReader(data) + var imageExtension = strings.Split(imageName, ".")[1] + var img image.Image + var err error + switch imageExtension { + case "png": + img, err = png.Decode(reader) + case "jpg": + img, err = jpeg.Decode(reader) + case "jpeg": + img, err = jpeg.Decode(reader) + default: + img = nil + } + if err != nil { + return img, err + } + return img, err +} + +func imageToData(img image.Image, imageName string) ([]byte, error) { + buf := new(bytes.Buffer) + var imageExtension = strings.Split(imageName, ".")[1] + var err error + switch imageExtension { + case "png": + err = png.Encode(buf, img) + case "jpg": + err = jpeg.Encode(buf, img, nil) + case "jpeg": + err = jpeg.Encode(buf, img, nil) + default: + img = nil + } + if err != nil { + return buf.Bytes(), err + } + return buf.Bytes(), err +} + +func Resize(img image.Image) image.Image { + r := resize.Resize(160, 0, img, resize.Lanczos3) + return r +}