GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Pull Request — master (#91)
by
unknown
01:12
created

Image::getHeight()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Spatie\Image;
4
5
use BadMethodCallException;
6
use Spatie\Image\Exceptions\InvalidImageDriver;
7
use Spatie\ImageOptimizer\OptimizerChainFactory;
8
use Intervention\Image\ImageManagerStatic as InterventionImage;
9
10
/** @mixin \Spatie\Image\Manipulations */
11
class Image
12
{
13
    /** @var string */
14
    protected $pathToImage;
15
16
    /** @var \Spatie\Image\Manipulations */
17
    protected $manipulations;
18
19
    protected $imageDriver = 'gd';
20
21
    /** @var string|null */
22
    protected $temporaryDirectory = null;
23
24
    /**
25
     * @param string $pathToImage
26
     *
27
     * @return static
28
     */
29
    public static function load(string $pathToImage)
30
    {
31
        return new static($pathToImage);
32
    }
33
34
    public function setTemporaryDirectory($tempDir)
35
    {
36
        $this->temporaryDirectory = $tempDir;
37
38
        return $this;
39
    }
40
41
    public function __construct(string $pathToImage)
42
    {
43
        $this->pathToImage = $pathToImage;
44
45
        $this->manipulations = new Manipulations();
46
    }
47
48
    /**
49
     * @param string $imageDriver
50
     *
51
     * @return $this
52
     *
53
     * @throws InvalidImageDriver
54
     */
55
    public function useImageDriver(string $imageDriver)
56
    {
57
        if (! in_array($imageDriver, ['gd', 'imagick'])) {
58
            throw InvalidImageDriver::driver($imageDriver);
59
        }
60
61
        $this->imageDriver = $imageDriver;
62
63
        InterventionImage::configure([
64
            'driver' => $this->imageDriver,
65
        ]);
66
67
        return $this;
68
    }
69
70
    /**
71
     * @param callable|$manipulations
72
     *
73
     * @return $this
74
     */
75
    public function manipulate($manipulations)
76
    {
77
        if (is_callable($manipulations)) {
78
            $manipulations($this->manipulations);
79
        }
80
81
        if ($manipulations instanceof Manipulations) {
82
            $this->manipulations->mergeManipulations($manipulations);
0 ignored issues
show
Documentation introduced by
$manipulations is of type object<Spatie\Image\Manipulations>, but the function expects a object<self>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
83
        }
84
85
        return $this;
86
    }
87
88
    public function __call($name, $arguments)
89
    {
90
        if (! method_exists($this->manipulations, $name)) {
91
            throw new BadMethodCallException("Manipulation `{$name}` does not exist");
92
        }
93
94
        $this->manipulations->$name(...$arguments);
95
96
        return $this;
97
    }
98
99
    public function getWidth(): int
100
    {
101
        return InterventionImage::make($this->pathToImage)->width();
102
    }
103
104
    public function getHeight(): int
105
    {
106
        return InterventionImage::make($this->pathToImage)->height();
107
    }
108
109
    public function getMime(): string
110
    {
111
        return InterventionImage::make($this->pathToImage)->mime();
112
    }
113
114
    public function getManipulationSequence(): ManipulationSequence
115
    {
116
        return $this->manipulations->getManipulationSequence();
117
    }
118
119
    public function save($outputPath = '')
120
    {
121
        if ($outputPath == '') {
122
            $outputPath = $this->pathToImage;
123
        }
124
125
        $this->addFormatManipulation($outputPath);
126
127
        $glideConversion = GlideConversion::create($this->pathToImage)->useImageDriver($this->imageDriver);
128
129
        if (! is_null($this->temporaryDirectory)) {
130
            $glideConversion->setTemporaryDirectory($this->temporaryDirectory);
131
        }
132
133
        $glideConversion->performManipulations($this->manipulations);
134
135
        $glideConversion->save($outputPath);
136
137
        if ($this->shouldOptimize()) {
138
            $optimizerChainConfiguration = $this->manipulations->getFirstManipulationArgument('optimize');
139
140
            $optimizerChainConfiguration = json_decode($optimizerChainConfiguration, true);
141
142
            $this->performOptimization($outputPath, $optimizerChainConfiguration);
143
        }
144
    }
145
146
    protected function shouldOptimize(): bool
147
    {
148
        return ! is_null($this->manipulations->getFirstManipulationArgument('optimize'));
149
    }
150
151
    protected function performOptimization($path, array $optimizerChainConfiguration)
152
    {
153
        $optimizerChain = OptimizerChainFactory::create();
154
155
        if (count($optimizerChainConfiguration)) {
156
            $optimizers = array_map(function (array $optimizerOptions, string $optimizerClassName) {
157
                return (new $optimizerClassName)->setOptions($optimizerOptions);
158
            }, $optimizerChainConfiguration, array_keys($optimizerChainConfiguration));
159
160
            $optimizerChain->setOptimizers($optimizers);
161
        }
162
163
        $optimizerChain->optimize($path);
164
    }
165
166
    protected function addFormatManipulation($outputPath)
167
    {
168
        if ($this->manipulations->hasManipulation('format')) {
169
            return;
170
        }
171
172
        $inputExtension = strtolower(pathinfo($this->pathToImage, PATHINFO_EXTENSION));
173
        $outputExtension = strtolower(pathinfo($outputPath, PATHINFO_EXTENSION));
174
175
        if ($inputExtension === $outputExtension) {
176
            return;
177
        }
178
179
        $supportedFormats = ['jpg', 'pjpg', 'png', 'gif', 'webp'];
180
181
        if (in_array($outputExtension, $supportedFormats)) {
182
            $this->manipulations->format($outputExtension);
183
        }
184
    }
185
}
186