package main import ( "bytes" "github.com/anthonynsimon/bild/transform" "image" "image/jpeg" "image/png" "io" "strings" ) var mimeTypes = map[string]string{ "jpg": "image/jpg", "jpeg": "image/jpeg", "png": "image/png", "json": "application/json", "html": "text/html", "xml": "application/xml", } func readMimeType(path string, mimeType string) string { if mimeType != "" { return mimeType } parts := strings.Split(path, ".") fileType := parts[len(parts)-1] if value, exists := mimeTypes[fileType]; exists { return value } return "application/octet-stream" } func resizeImage(imageBytes []byte, resizeHeight int) ([]byte, error) { img, format, err := image.Decode(bytes.NewReader(imageBytes)) if err != nil { return nil, err } var buffer bytes.Buffer writer := io.Writer(&buffer) resizeWidth := img.Bounds().Dx() * resizeHeight / img.Bounds().Dy() img = transform.Resize(img, resizeWidth, resizeHeight, transform.Gaussian) switch format { case "png": err = png.Encode(writer, img) break case "jpeg": err = jpeg.Encode(writer, img, nil) break default: err = jpeg.Encode(writer, img, nil) } if err != nil { return nil, err } return buffer.Bytes(), nil }