Crop::getCoordinates()   C
last analyzed

Complexity

Conditions 12
Paths 2

Size

Total Lines 25

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 156

Importance

Changes 0
Metric Value
dl 0
loc 25
ccs 0
cts 23
cp 0
rs 6.9666
c 0
b 0
f 0
cc 12
nc 2
nop 1
crap 156

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace League\Glide\Manipulators;
4
5
use Intervention\Image\Image;
6
7
/**
8
 * @property string $crop
9
 */
10
class Crop extends BaseManipulator
11
{
12
    /**
13
     * Perform crop image manipulation.
14
     * @param  Image $image The source image.
15
     * @return Image The manipulated image.
16
     */
17
    public function run(Image $image)
18
    {
19
        $coordinates = $this->getCoordinates($image);
20
21
        if ($coordinates) {
22
            $coordinates = $this->limitToImageBoundaries($image, $coordinates);
23
24
            $image->crop(
25
                $coordinates[0],
26
                $coordinates[1],
27
                $coordinates[2],
28
                $coordinates[3]
29
            );
30
        }
31
32
        return $image;
33
    }
34
35
    /**
36
     * Resolve coordinates.
37
     * @param  Image $image The source image.
38
     * @return int[] The resolved coordinates.
39
     */
40
    public function getCoordinates(Image $image)
41
    {
42
        $coordinates = explode(',', $this->crop);
43
44
        if (count($coordinates) !== 4 or
45
            (!is_numeric($coordinates[0])) or
46
            (!is_numeric($coordinates[1])) or
47
            (!is_numeric($coordinates[2])) or
48
            (!is_numeric($coordinates[3])) or
49
            ($coordinates[0] <= 0) or
50
            ($coordinates[1] <= 0) or
51
            ($coordinates[2] < 0) or
52
            ($coordinates[3] < 0) or
53
            ($coordinates[2] >= $image->width()) or
54
            ($coordinates[3] >= $image->height())) {
55
            return;
56
        }
57
58
        return [
59
            (int) $coordinates[0],
60
            (int) $coordinates[1],
61
            (int) $coordinates[2],
62
            (int) $coordinates[3],
63
        ];
64
    }
65
66
    /**
67
     * Limit coordinates to image boundaries.
68
     * @param  Image $image       The source image.
69
     * @param  int[] $coordinates The coordinates.
70
     * @return int[] The limited coordinates.
71
     */
72
    public function limitToImageBoundaries(Image $image, array $coordinates)
73
    {
74
        if ($coordinates[0] > ($image->width() - $coordinates[2])) {
75
            $coordinates[0] = $image->width() - $coordinates[2];
76
        }
77
78
        if ($coordinates[1] > ($image->height() - $coordinates[3])) {
79
            $coordinates[1] = $image->height() - $coordinates[3];
80
        }
81
82
        return $coordinates;
83
    }
84
}
85