MCPcopy Create free account
hub / github.com/imgproxy/imgproxy / calcPosition

Function calcPosition

processing/calc_position.go:9–69  ·  view source on GitHub ↗
(
	width, height, innerWidth, innerHeight int,
	gravity *GravityOptions, dpr float64, allowOverflow bool,
)

Source from the content-addressed store, hash-verified

7)
8
9func calcPosition(
10 width, height, innerWidth, innerHeight int,
11 gravity *GravityOptions, dpr float64, allowOverflow bool,
12) (int, int) {
13 var left, top int
14 var minX, maxX, minY, maxY int
15
16 if gravity.Type == GravityFocusPoint {
17 pointX := imath.ScaleToEven(width, gravity.X)
18 pointY := imath.ScaleToEven(height, gravity.Y)
19
20 left = pointX - innerWidth/2
21 top = pointY - innerHeight/2
22 } else {
23 var offX, offY int
24
25 if math.Abs(gravity.X) >= 1.0 {
26 offX = imath.RoundToEven(gravity.X * dpr)
27 } else {
28 offX = imath.ScaleToEven(width, gravity.X)
29 }
30
31 if math.Abs(gravity.Y) >= 1.0 {
32 offY = imath.RoundToEven(gravity.Y * dpr)
33 } else {
34 offY = imath.ScaleToEven(height, gravity.Y)
35 }
36
37 left = imath.ShrinkToEven(width-innerWidth+1, 2) + offX
38 top = imath.ShrinkToEven(height-innerHeight+1, 2) + offY
39
40 if gravity.Type == GravityNorth || gravity.Type == GravityNorthEast || gravity.Type == GravityNorthWest {
41 top = 0 + offY
42 }
43
44 if gravity.Type == GravityEast || gravity.Type == GravityNorthEast || gravity.Type == GravitySouthEast {
45 left = width - innerWidth - offX
46 }
47
48 if gravity.Type == GravitySouth || gravity.Type == GravitySouthEast || gravity.Type == GravitySouthWest {
49 top = height - innerHeight - offY
50 }
51
52 if gravity.Type == GravityWest || gravity.Type == GravityNorthWest || gravity.Type == GravitySouthWest {
53 left = 0 + offX
54 }
55 }
56
57 if allowOverflow {
58 minX, maxX = -innerWidth+1, width-1
59 minY, maxY = -innerHeight+1, height-1
60 } else {
61 minX, maxX = 0, width-innerWidth
62 minY, maxY = 0, height-innerHeight
63 }
64
65 left = max(minX, min(left, maxX))
66 top = max(minY, min(top, maxY))

Callers 3

applyWatermarkMethod · 0.85
extendImageFunction · 0.85
cropImageFunction · 0.85

Calls 3

ScaleToEvenFunction · 0.92
RoundToEvenFunction · 0.92
ShrinkToEvenFunction · 0.92

Tested by

no test coverage detected