Auto resizing type

This commit is contained in:
DarthSim
2019-06-24 18:50:17 +06:00
parent 8517402e7e
commit c2ce5c5850
4 changed files with 20 additions and 3 deletions

View File

@@ -59,7 +59,8 @@ rt:%resizing_type
Defines how imgproxy will resize the source image. Supported resizing types are:
* `fit`: resizes the image while keeping aspect ratio to fit given size;
* `fill`: resizes the image while keeping aspect ratio to fill given size and cropping projecting parts.
* `fill`: resizes the image while keeping aspect ratio to fill given size and cropping projecting parts;
* `auto`: if both source and resulting dimensions have the same orientation (portrait or landscape), imgproxy will use `fill`. Otherwise, it will use `fit`.
Default: `fit`

View File

@@ -24,7 +24,8 @@ Once you set up your [URL signature](./configuration.md#url-signature), check ou
imgproxy supports the following resizing types:
* `fit`: resizes the image while keeping aspect ratio to fit given size;
* `fill`: resizes the image while keeping aspect ratio to fill given size and cropping projecting parts.
* `fill`: resizes the image while keeping aspect ratio to fill given size and cropping projecting parts;
* `auto`: if both source and resulting dimensions have the same orientation (portrait or landscape), imgproxy will use `fill`. Otherwise, it will use `fit`.
#### Width and height

View File

@@ -49,11 +49,24 @@ func calcScale(width, height int, po *processingOptions, imgtype imageType) floa
wr := float64(po.Width) / srcW
hr := float64(po.Height) / srcH
rt := po.Resize
if rt == resizeAuto {
srcD := width - height
dstD := po.Width - po.Height
if (srcD >= 0 && dstD >= 0) || (srcD < 0 && dstD < 0) {
rt = resizeFill
} else {
rt = resizeFit
}
}
if po.Width == 0 {
scale = hr
} else if po.Height == 0 {
scale = wr
} else if po.Resize == resizeFit {
} else if rt == resizeFit {
scale = math.Min(wr, hr)
} else {
scale = math.Max(wr, hr)

View File

@@ -58,12 +58,14 @@ const (
resizeFit resizeType = iota
resizeFill
resizeCrop
resizeAuto
)
var resizeTypes = map[string]resizeType{
"fit": resizeFit,
"fill": resizeFill,
"crop": resizeCrop,
"auto": resizeAuto,
}
type rgbColor struct{ R, G, B uint8 }