mirror of
https://git.phreedom.club/localhost_frssoft/compy.git
synced 2024-11-27 10:31:31 +00:00
Allow X-Compy-Quality override header
This allows clients to override the configured compression quality. Fixes #14.
This commit is contained in:
parent
69b89413bd
commit
defbc287f1
|
@ -145,6 +145,34 @@ func (s *CompyTest) TestJpeg(c *C) {
|
||||||
c.Assert(err, IsNil)
|
c.Assert(err, IsNil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *CompyTest) TestJpegQuality(c *C) {
|
||||||
|
req, err := http.NewRequest("GET", s.server.URL+"/image/jpeg", nil)
|
||||||
|
c.Assert(err, IsNil)
|
||||||
|
req.Header.Add("X-Compy-Quality", "10")
|
||||||
|
|
||||||
|
resp, err := s.client.Do(req)
|
||||||
|
c.Assert(err, IsNil)
|
||||||
|
defer resp.Body.Close()
|
||||||
|
c.Assert(resp.StatusCode, Equals, 200)
|
||||||
|
c.Assert(resp.Header.Get("Content-Type"), Equals, "image/jpeg")
|
||||||
|
len10, err := new(bytes.Buffer).ReadFrom(resp.Body)
|
||||||
|
c.Assert(err, IsNil)
|
||||||
|
|
||||||
|
req, err = http.NewRequest("GET", s.server.URL+"/image/jpeg", nil)
|
||||||
|
c.Assert(err, IsNil)
|
||||||
|
req.Header.Add("X-Compy-Quality", "90")
|
||||||
|
|
||||||
|
resp, err = s.client.Do(req)
|
||||||
|
c.Assert(err, IsNil)
|
||||||
|
defer resp.Body.Close()
|
||||||
|
c.Assert(resp.StatusCode, Equals, 200)
|
||||||
|
c.Assert(resp.Header.Get("Content-Type"), Equals, "image/jpeg")
|
||||||
|
len90, err := new(bytes.Buffer).ReadFrom(resp.Body)
|
||||||
|
c.Assert(err, IsNil)
|
||||||
|
|
||||||
|
c.Assert(len10 < len90, Equals, true)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *CompyTest) TestJpegToWebP(c *C) {
|
func (s *CompyTest) TestJpegToWebP(c *C) {
|
||||||
req, err := http.NewRequest("GET", s.server.URL+"/image/jpeg", nil)
|
req, err := http.NewRequest("GET", s.server.URL+"/image/jpeg", nil)
|
||||||
c.Assert(err, IsNil)
|
c.Assert(err, IsNil)
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"github.com/chai2010/webp"
|
"github.com/chai2010/webp"
|
||||||
"github.com/pixiv/go-libjpeg/jpeg"
|
"github.com/pixiv/go-libjpeg/jpeg"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Jpeg struct {
|
type Jpeg struct {
|
||||||
|
@ -28,17 +29,27 @@ func (t *Jpeg) Transcode(w *proxy.ResponseWriter, r *proxy.ResponseReader, heade
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
encOptions := t.encOptions
|
||||||
|
qualityString := headers.Get("X-Compy-Quality")
|
||||||
|
if qualityString != "" {
|
||||||
|
if quality, err := strconv.Atoi(qualityString); err != nil {
|
||||||
|
return err
|
||||||
|
} else {
|
||||||
|
encOptions.Quality = quality
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if SupportsWebP(headers) {
|
if SupportsWebP(headers) {
|
||||||
w.Header().Set("Content-Type", "image/webp")
|
w.Header().Set("Content-Type", "image/webp")
|
||||||
options := webp.Options{
|
options := webp.Options{
|
||||||
Lossless: false,
|
Lossless: false,
|
||||||
Quality: float32(t.encOptions.Quality),
|
Quality: float32(encOptions.Quality),
|
||||||
}
|
}
|
||||||
if err = webp.Encode(w, img, &options); err != nil {
|
if err = webp.Encode(w, img, &options); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if err = jpeg.Encode(w, img, t.encOptions); err != nil {
|
if err = jpeg.Encode(w, img, encOptions); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue