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:
parent
8eee5513ab
commit
ba2da75102
2 changed files with 16 additions and 3 deletions
12
transform.go
12
transform.go
|
@ -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 {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue