diff --git a/controllers.go b/controllers.go index 7efd917a..98825bfa 100644 --- a/controllers.go +++ b/controllers.go @@ -133,6 +133,13 @@ func imageHandler(w http.ResponseWriter, r *http.Request, buf []byte, operation // Expose Content-Length response header w.Header().Set("Content-Length", strconv.Itoa(len(image.Body))) w.Header().Set("Content-Type", image.Mime) + if image.Mime != "application/json" && o.ReturnSize { + meta, err := bimg.Metadata(image.Body) + if err == nil { + w.Header().Set("Image-Width", strconv.Itoa(meta.Size.Width)) + w.Header().Set("Image-Height", strconv.Itoa(meta.Size.Height)) + } + } if vary != "" { w.Header().Set("Vary", vary) } diff --git a/imaginary.go b/imaginary.go index 75ecec56..339cd004 100644 --- a/imaginary.go +++ b/imaginary.go @@ -50,6 +50,7 @@ var ( aMRelease = flag.Int("mrelease", 30, "OS memory release interval in seconds") aCpus = flag.Int("cpus", runtime.GOMAXPROCS(-1), "Number of cpu cores to use") aLogLevel = flag.String("log-level", "info", "Define log level for http-server. E.g: info,warning,error") + aReturnSize = flag.Bool("return-size", false, "Return the image size in the HTTP headers") ) const usage = `imaginary %s @@ -106,6 +107,7 @@ Options: (default for current machine is %d cores) -log-level Set log level for http-server. E.g: info,warning,error [default: info]. Or can use the environment variable GOLANG_LOG=info. + -return-size Return the image size with X-Width and X-Height HTTP header. [default: disabled]. ` type URLSignature struct { @@ -157,6 +159,7 @@ func main() { AllowedOrigins: parseOrigins(*aAllowedOrigins), MaxAllowedSize: *aMaxAllowedSize, LogLevel: getLogLevel(*aLogLevel), + ReturnSize: *aReturnSize, } // Show warning if gzip flag is passed diff --git a/server.go b/server.go index e99c1f53..c56bf149 100644 --- a/server.go +++ b/server.go @@ -43,6 +43,7 @@ type ServerOptions struct { Endpoints Endpoints AllowedOrigins []*url.URL LogLevel string + ReturnSize bool } // Endpoints represents a list of endpoint names to disable.