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

parse crop and resize params before transforms

This commit is contained in:
Will Norris 2017-09-27 00:04:04 +00:00
parent 8eee5513ab
commit ba2da75102
2 changed files with 16 additions and 3 deletions

View file

@ -251,12 +251,18 @@ func exifOrientation(r io.Reader) (opt Options) {
// transformImage modifies the image m based on the transformations specified // transformImage modifies the image m based on the transformations specified
// in opt. // in opt.
func transformImage(m image.Image, opt Options) image.Image { func transformImage(m image.Image, opt Options) image.Image {
// Parse crop and resize parameters before applying any transforms.
// This is to ensure that any percentage-based values are based off the
// size of the original image.
rect := cropParams(m, opt)
w, h, resize := resizeParams(m, opt)
// crop if needed // crop if needed
if r := cropParams(m, opt); !m.Bounds().Eq(r) { if !m.Bounds().Eq(rect) {
m = imaging.Crop(m, r) m = imaging.Crop(m, rect)
} }
// resize if needed // resize if needed
if w, h, ok := resizeParams(m, opt); ok { if resize {
if opt.Fit { if opt.Fit {
m = imaging.Fit(m, w, h, resampleFilter) m = imaging.Fit(m, w, h, resampleFilter)
} else { } else {

View file

@ -351,6 +351,13 @@ func TestTransformImage(t *testing.T) {
Options{CropHeight: 2, CropWidth: 2, CropX: 2, CropY: 2}, Options{CropHeight: 2, CropWidth: 2, CropX: 2, CropY: 2},
newImage(2, 2, yellow, yellow, yellow, yellow), newImage(2, 2, yellow, yellow, yellow, yellow),
}, },
// percentage-based resize in addition to rectangular crop
{
newImage(12, 12, red),
Options{Width: 0.5, Height: 0.5, CropWidth: 8, CropHeight: 8},
newImage(6, 6, red),
},
} }
for _, tt := range tests { for _, tt := range tests {