Add IMGPROXY_MAX_RESULT_DIMENSION config and max_result_dimension processing option

This commit is contained in:
DarthSim
2025-06-06 19:28:41 +03:00
parent 810cad5d26
commit a5a587eb39
6 changed files with 502 additions and 0 deletions

View File

@@ -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))
}