0
Fork 0
mirror of https://github.com/willnorris/imageproxy.git synced 2024-12-16 21:56:43 -05:00

add options to flip horizontally and vertically

This commit is contained in:
Will Norris 2013-12-06 22:18:44 -08:00
parent d506fc6881
commit a039c1bbca
4 changed files with 36 additions and 10 deletions

View file

@ -35,6 +35,9 @@ type Options struct {
// Rotate image the specified degrees counter-clockwise. Valid values are 90, 180, 270.
Rotate int
FlipVertical bool
FlipHorizontal bool
}
func (o Options) String() string {
@ -68,6 +71,15 @@ func ParseOptions(str string) *Options {
o.Fit = true
continue
}
if part == "fv" {
o.FlipVertical = true
continue
}
if part == "fh" {
o.FlipHorizontal = true
continue
}
if len(part) > 2 && strings.HasPrefix(part, "r=") {
o.Rotate, _ = strconv.Atoi(part[2:])
continue

View file

@ -84,27 +84,27 @@ func TestNewRequest(t *testing.T) {
},
{
"http://localhost/1x/http://example.com/",
"http://example.com/", &data.Options{1, 0, false}, false,
"http://example.com/", &data.Options{1, 0, false, 0, false, false}, false,
},
{
"http://localhost/x1/http://example.com/",
"http://example.com/", &data.Options{0, 1, false}, false,
"http://example.com/", &data.Options{0, 1, false, 0, false, false}, false,
},
{
"http://localhost/1x2/http://example.com/",
"http://example.com/", &data.Options{1, 2, false}, false,
"http://example.com/", &data.Options{1, 2, false, 0, false, false}, false,
},
{
"http://localhost/0.1x0.2/http://example.com/",
"http://example.com/", &data.Options{0.1, 0.2, false, 0, false, false}, false,
},
{
"http://localhost/,fit/http://example.com/",
"http://example.com/", &data.Options{0, 0, true}, false,
"http://example.com/", &data.Options{0, 0, true, 0, false, false}, false,
},
{
"http://localhost/1x2,fit/http://example.com/",
"http://example.com/", &data.Options{1, 2, true}, false,
},
{
"http://localhost/0.1x0.2,fit/http://example.com/",
"http://example.com/", &data.Options{0.1, 0.2, true}, false,
"http://localhost/1x2,fit,r=90,fv,fh/http://example.com/",
"http://example.com/", &data.Options{1, 2, true, 90, true, true}, false,
},
}

View file

@ -65,6 +65,11 @@ The `r={degrees}` option will rotate the image the specified number of degrees,
counter-clockwise. Valid degrees values are `90`, `180`, and `270`. Images
are rotated **after** being resized.
#### Flip ####
The `fv` option will flip the image vertically. The `fh` option will flip the
image horizontally. Images are flipped **after** being resized and rotated.
### Remote URL ###
The URL of the original image to load is specified as the remainder of the
@ -92,6 +97,7 @@ x100 | 100px tall, proportional width | ![x100](https://s.wjn.me/x1
100 | 100px square, cropping as needed | ![100](https://s.wjn.me/100/https://willnorris.com/content/uploads/2013/12/small-things.jpg)
150,fit | fit to be no more than 150 by 150 pixels | ![150,fit](https://s.wjn.me/150,fit/https://willnorris.com/content/uploads/2013/12/small-things.jpg)
100,r=90| 100px square, rotated 90 degrees | ![100,r=90](https://s.wjn.me/100,r=90/https://willnorris.com/content/uploads/2013/12/small-things.jpg)
100,fv,fh | 100px square, flipped horizontal and vertical | ![100,fv,fh](https://s.wjn.me/100,fv,fh/https://willnorris.com/content/uploads/2013/12/small-things.jpg)
## License ##

View file

@ -73,6 +73,14 @@ func Transform(img data.Image, opt *data.Options) (*data.Image, error) {
}
}
// flip
if opt.FlipVertical {
m = imaging.FlipV(m)
}
if opt.FlipHorizontal {
m = imaging.FlipH(m)
}
// rotate
switch opt.Rotate {
case 90: