-
Notifications
You must be signed in to change notification settings - Fork 0
/
ImagePlaceholderAttributes.php
83 lines (69 loc) · 1.96 KB
/
ImagePlaceholderAttributes.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
class ImagePlaceholderAttributes
{
/** @param string */
protected $uri;
/** @param string */
protected $get;
/** @param int */
public $width;
/** @param int */
public $height;
/** @param array */
public $style;
/**
* Construct ImageAttributes class.
*/
public function __construct() {
$uri = explode('?', $_SERVER['REQUEST_URI'], 2);
$this->uri = substr($uri[0], 1);
$this->get = isset($uri[1]) ? explode('&', $uri[1]) : null;
if ($this->haveSize()) {
$this->width = (int) $this->imageSize('width');
$this->height = (int) $this->imageSize('height');
}
$this->styles = $this->imageAttributes();
}
public function haveSize() {
return is_numeric($this->imageSize('width'));
}
/**
* Get width and height of an image.
*
* @return array
*/
public function imageSize(string $attribute = null)
{
if (strpos($this->uri, '-') > -1) {
$attributes = explode('-', $this->uri);
} elseif (strpos($this->uri, 'x')) {
$attributes = explode('x', $this->uri);
} else {
$attributes = [$this->uri];
}
$sizes = [
'width' => $attributes[0],
'height' => isset($attributes[1]) ? $attributes[1] : $attributes[0]
];
if (isset($attribute)) {
return $sizes[$attribute];
}
return $sizes;
}
/**
* Get image attributes.
*
* @return array
*/
public function imageAttributes(): array
{
$attributes = [];
if (is_array($this->get)) {
foreach ($this->get as $attribute) {
$explode = explode('=', $attribute);
$attributes[$explode[0]] = $explode[1];
}
}
return $attributes;
}
}