mirror of
https://github.com/imgproxy/imgproxy.git
synced 2025-10-10 20:22:31 +02:00
Add IMGPROXY_MAX_RESULT_DIMENSION
config and max_result_dimension
processing option
This commit is contained in:
@@ -560,6 +560,435 @@ func (s *ProcessingTestSuite) TestResizeToFillDownExtendAR() {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *ProcessingTestSuite) TestResultSizeLimit() {
|
||||
imgdata := s.openFile("test2.jpg")
|
||||
|
||||
po := options.NewProcessingOptions()
|
||||
|
||||
testCases := []struct {
|
||||
limit int
|
||||
width int
|
||||
height int
|
||||
resizingType options.ResizeType
|
||||
enlarge bool
|
||||
extend bool
|
||||
extendAR bool
|
||||
padding options.PaddingOptions
|
||||
rotate int
|
||||
outWidth int
|
||||
outHeight int
|
||||
}{
|
||||
{
|
||||
limit: 1000,
|
||||
width: 100,
|
||||
height: 100,
|
||||
resizingType: options.ResizeFit,
|
||||
outWidth: 100,
|
||||
outHeight: 50,
|
||||
},
|
||||
{
|
||||
limit: 50,
|
||||
width: 100,
|
||||
height: 100,
|
||||
resizingType: options.ResizeFit,
|
||||
outWidth: 50,
|
||||
outHeight: 25,
|
||||
},
|
||||
{
|
||||
limit: 50,
|
||||
width: 0,
|
||||
height: 0,
|
||||
resizingType: options.ResizeFit,
|
||||
outWidth: 50,
|
||||
outHeight: 25,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 0,
|
||||
height: 100,
|
||||
resizingType: options.ResizeFit,
|
||||
outWidth: 100,
|
||||
outHeight: 50,
|
||||
},
|
||||
{
|
||||
limit: 50,
|
||||
width: 150,
|
||||
height: 0,
|
||||
resizingType: options.ResizeFit,
|
||||
outWidth: 50,
|
||||
outHeight: 25,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 1000,
|
||||
height: 1000,
|
||||
resizingType: options.ResizeFit,
|
||||
outWidth: 100,
|
||||
outHeight: 50,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 1000,
|
||||
height: 1000,
|
||||
resizingType: options.ResizeFit,
|
||||
enlarge: true,
|
||||
outWidth: 100,
|
||||
outHeight: 50,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 1000,
|
||||
height: 2000,
|
||||
resizingType: options.ResizeFit,
|
||||
extend: true,
|
||||
outWidth: 50,
|
||||
outHeight: 100,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 1000,
|
||||
height: 2000,
|
||||
resizingType: options.ResizeFit,
|
||||
extendAR: true,
|
||||
outWidth: 50,
|
||||
outHeight: 100,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 100,
|
||||
height: 150,
|
||||
resizingType: options.ResizeFit,
|
||||
rotate: 90,
|
||||
outWidth: 50,
|
||||
outHeight: 100,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 0,
|
||||
height: 0,
|
||||
resizingType: options.ResizeFit,
|
||||
rotate: 90,
|
||||
outWidth: 50,
|
||||
outHeight: 100,
|
||||
},
|
||||
{
|
||||
limit: 200,
|
||||
width: 100,
|
||||
height: 100,
|
||||
resizingType: options.ResizeFit,
|
||||
padding: options.PaddingOptions{
|
||||
Enabled: true,
|
||||
Top: 100,
|
||||
Right: 200,
|
||||
Bottom: 300,
|
||||
Left: 400,
|
||||
},
|
||||
outWidth: 200,
|
||||
outHeight: 129,
|
||||
},
|
||||
{
|
||||
limit: 1000,
|
||||
width: 100,
|
||||
height: 100,
|
||||
resizingType: options.ResizeFill,
|
||||
outWidth: 100,
|
||||
outHeight: 100,
|
||||
},
|
||||
{
|
||||
limit: 50,
|
||||
width: 100,
|
||||
height: 100,
|
||||
resizingType: options.ResizeFill,
|
||||
outWidth: 50,
|
||||
outHeight: 50,
|
||||
},
|
||||
{
|
||||
limit: 50,
|
||||
width: 1000,
|
||||
height: 50,
|
||||
resizingType: options.ResizeFill,
|
||||
outWidth: 50,
|
||||
outHeight: 13,
|
||||
},
|
||||
{
|
||||
limit: 50,
|
||||
width: 100,
|
||||
height: 1000,
|
||||
resizingType: options.ResizeFill,
|
||||
outWidth: 50,
|
||||
outHeight: 50,
|
||||
},
|
||||
{
|
||||
limit: 50,
|
||||
width: 0,
|
||||
height: 0,
|
||||
resizingType: options.ResizeFill,
|
||||
outWidth: 50,
|
||||
outHeight: 25,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 0,
|
||||
height: 100,
|
||||
resizingType: options.ResizeFill,
|
||||
outWidth: 100,
|
||||
outHeight: 50,
|
||||
},
|
||||
{
|
||||
limit: 50,
|
||||
width: 150,
|
||||
height: 0,
|
||||
resizingType: options.ResizeFill,
|
||||
outWidth: 50,
|
||||
outHeight: 25,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 1000,
|
||||
height: 1000,
|
||||
resizingType: options.ResizeFill,
|
||||
outWidth: 100,
|
||||
outHeight: 50,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 1000,
|
||||
height: 1000,
|
||||
resizingType: options.ResizeFill,
|
||||
enlarge: true,
|
||||
outWidth: 100,
|
||||
outHeight: 100,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 1000,
|
||||
height: 2000,
|
||||
resizingType: options.ResizeFill,
|
||||
extend: true,
|
||||
outWidth: 50,
|
||||
outHeight: 100,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 1000,
|
||||
height: 2000,
|
||||
resizingType: options.ResizeFill,
|
||||
extendAR: true,
|
||||
outWidth: 50,
|
||||
outHeight: 100,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 100,
|
||||
height: 150,
|
||||
resizingType: options.ResizeFill,
|
||||
rotate: 90,
|
||||
outWidth: 67,
|
||||
outHeight: 100,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 0,
|
||||
height: 0,
|
||||
resizingType: options.ResizeFill,
|
||||
rotate: 90,
|
||||
outWidth: 50,
|
||||
outHeight: 100,
|
||||
},
|
||||
{
|
||||
limit: 200,
|
||||
width: 100,
|
||||
height: 100,
|
||||
resizingType: options.ResizeFill,
|
||||
padding: options.PaddingOptions{
|
||||
Enabled: true,
|
||||
Top: 100,
|
||||
Right: 200,
|
||||
Bottom: 300,
|
||||
Left: 400,
|
||||
},
|
||||
outWidth: 200,
|
||||
outHeight: 144,
|
||||
},
|
||||
{
|
||||
limit: 1000,
|
||||
width: 100,
|
||||
height: 100,
|
||||
resizingType: options.ResizeFillDown,
|
||||
outWidth: 100,
|
||||
outHeight: 100,
|
||||
},
|
||||
{
|
||||
limit: 50,
|
||||
width: 100,
|
||||
height: 100,
|
||||
resizingType: options.ResizeFillDown,
|
||||
outWidth: 50,
|
||||
outHeight: 50,
|
||||
},
|
||||
{
|
||||
limit: 50,
|
||||
width: 1000,
|
||||
height: 50,
|
||||
resizingType: options.ResizeFillDown,
|
||||
outWidth: 50,
|
||||
outHeight: 3,
|
||||
},
|
||||
{
|
||||
limit: 50,
|
||||
width: 100,
|
||||
height: 1000,
|
||||
resizingType: options.ResizeFillDown,
|
||||
outWidth: 5,
|
||||
outHeight: 50,
|
||||
},
|
||||
{
|
||||
limit: 50,
|
||||
width: 0,
|
||||
height: 0,
|
||||
resizingType: options.ResizeFillDown,
|
||||
outWidth: 50,
|
||||
outHeight: 25,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 0,
|
||||
height: 100,
|
||||
resizingType: options.ResizeFillDown,
|
||||
outWidth: 100,
|
||||
outHeight: 50,
|
||||
},
|
||||
{
|
||||
limit: 50,
|
||||
width: 150,
|
||||
height: 0,
|
||||
resizingType: options.ResizeFillDown,
|
||||
outWidth: 50,
|
||||
outHeight: 25,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 1000,
|
||||
height: 1000,
|
||||
resizingType: options.ResizeFillDown,
|
||||
outWidth: 100,
|
||||
outHeight: 100,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 1000,
|
||||
height: 1000,
|
||||
resizingType: options.ResizeFillDown,
|
||||
enlarge: true,
|
||||
outWidth: 100,
|
||||
outHeight: 100,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 1000,
|
||||
height: 2000,
|
||||
resizingType: options.ResizeFillDown,
|
||||
extend: true,
|
||||
outWidth: 50,
|
||||
outHeight: 100,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 1000,
|
||||
height: 2000,
|
||||
resizingType: options.ResizeFillDown,
|
||||
extendAR: true,
|
||||
outWidth: 50,
|
||||
outHeight: 100,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 1000,
|
||||
height: 1500,
|
||||
resizingType: options.ResizeFillDown,
|
||||
rotate: 90,
|
||||
outWidth: 67,
|
||||
outHeight: 100,
|
||||
},
|
||||
{
|
||||
limit: 100,
|
||||
width: 0,
|
||||
height: 0,
|
||||
resizingType: options.ResizeFillDown,
|
||||
rotate: 90,
|
||||
outWidth: 50,
|
||||
outHeight: 100,
|
||||
},
|
||||
{
|
||||
limit: 200,
|
||||
width: 100,
|
||||
height: 100,
|
||||
resizingType: options.ResizeFillDown,
|
||||
padding: options.PaddingOptions{
|
||||
Enabled: true,
|
||||
Top: 100,
|
||||
Right: 200,
|
||||
Bottom: 300,
|
||||
Left: 400,
|
||||
},
|
||||
outWidth: 200,
|
||||
outHeight: 144,
|
||||
},
|
||||
{
|
||||
limit: 200,
|
||||
width: 1000,
|
||||
height: 1000,
|
||||
resizingType: options.ResizeFillDown,
|
||||
padding: options.PaddingOptions{
|
||||
Enabled: true,
|
||||
Top: 100,
|
||||
Right: 200,
|
||||
Bottom: 300,
|
||||
Left: 400,
|
||||
},
|
||||
outWidth: 200,
|
||||
outHeight: 144,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
name := fmt.Sprintf("%s_%dx%d_limit_%d", tc.resizingType, tc.width, tc.height, tc.limit)
|
||||
if tc.enlarge {
|
||||
name += "_enlarge"
|
||||
}
|
||||
if tc.extend {
|
||||
name += "_extend"
|
||||
}
|
||||
if tc.extendAR {
|
||||
name += "_extendAR"
|
||||
}
|
||||
if tc.rotate != 0 {
|
||||
name += fmt.Sprintf("_rot_%d", tc.rotate)
|
||||
}
|
||||
if tc.padding.Enabled {
|
||||
name += fmt.Sprintf("_padding_%dx%dx%dx%d", tc.padding.Top, tc.padding.Right, tc.padding.Bottom, tc.padding.Left)
|
||||
}
|
||||
|
||||
s.Run(name, func() {
|
||||
po.SecurityOptions.MaxResultDimension = tc.limit
|
||||
po.Width = tc.width
|
||||
po.Height = tc.height
|
||||
po.ResizingType = tc.resizingType
|
||||
po.Enlarge = tc.enlarge
|
||||
po.Extend.Enabled = tc.extend
|
||||
po.ExtendAspectRatio.Enabled = tc.extendAR
|
||||
po.Rotate = tc.rotate
|
||||
po.Padding = tc.padding
|
||||
|
||||
outImgdata, err := ProcessImage(context.Background(), imgdata, po)
|
||||
s.Require().NoError(err)
|
||||
s.Require().NotNil(outImgdata)
|
||||
|
||||
s.checkSize(outImgdata, tc.outWidth, tc.outHeight)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestProcessing(t *testing.T) {
|
||||
suite.Run(t, new(ProcessingTestSuite))
|
||||
}
|
||||
|
Reference in New Issue
Block a user