PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-image-cdn / src / class-image-cdn-image.php
jetpack / jetpack_vendor / automattic / jetpack-image-cdn / src Last commit date
compatibility 9 months ago class-image-cdn-core.php 9 months ago class-image-cdn-image-sizes.php 2 months ago class-image-cdn-image.php 2 months ago class-image-cdn-setup.php 1 year ago class-image-cdn.php 2 months ago
class-image-cdn-image.php
268 lines
1 <?php
2 /**
3 * The Image Class.
4 *
5 * @package automattic/jetpack-image-cdn
6 */
7
8 namespace Automattic\Jetpack\Image_CDN;
9
10 use WP_Error;
11
12 /**
13 * Represents a resizable image, exposing properties necessary for properly generating srcset.
14 */
15 class Image_CDN_Image {
16
17 /**
18 * Attachment's Filename.
19 *
20 * @var string
21 */
22 public $filename;
23
24 /**
25 * Attachment's mime-type, WP_Error on failure when recalculating the dimensions.
26 *
27 * @var string|WP_Error
28 */
29 private $mime_type;
30
31 /**
32 * Image original width.
33 *
34 * @var int
35 */
36 private $original_width;
37
38 /**
39 * Image original height.
40 *
41 * @var int
42 */
43 private $original_height;
44
45 /**
46 * Current attachment's width.
47 *
48 * @var int
49 */
50 private $width;
51
52 /**
53 * Current attachment's height.
54 *
55 * @var int
56 */
57 private $height;
58
59 /**
60 * Whether the attachment has been resized yet, or not.
61 *
62 * @var bool
63 */
64 private $is_resized = false;
65
66 /**
67 * Constructs the image object.
68 *
69 * The $data array should provide at least
70 * file : string Image file path
71 * width : int Image width
72 * height : int Image height
73 *
74 * @param array $data Array of attachment metadata, typically value of _wp_attachment_metadata postmeta.
75 * @param string|WP_Error $mime_type Typically value returned from get_post_mime_type function.
76 */
77 public function __construct( $data, $mime_type ) {
78 $this->filename = $data['file'];
79 $this->original_width = $data['width'];
80 $this->original_height = $data['height'];
81 $this->width = $this->original_width;
82 $this->height = $this->original_height;
83 $this->mime_type = $mime_type;
84 }
85
86 /**
87 * Resizes the image to given size.
88 *
89 * @param array $size_data Array of width, height, and crop properties of a size.
90 *
91 * @return bool|WP_Error True if resize was successful, WP_Error on failure.
92 */
93 public function resize( $size_data ) {
94
95 $dimensions = $this->image_resize_dimensions( $size_data['width'], $size_data['height'], $size_data['crop'] );
96
97 if ( true === is_wp_error( $dimensions ) ) {
98 return $dimensions; // Returns WP_Error.
99 }
100
101 if ( true === is_wp_error( $this->mime_type ) ) {
102 return $this->mime_type; // Returns WP_Error.
103 }
104
105 $this->set_width_height( $dimensions );
106
107 $this->is_resized = true;
108
109 return true;
110 }
111
112 /**
113 * Generates size data for usage in $metadata['sizes'];.
114 *
115 * @param array $size_data Array of width, height, and crop properties of a size.
116 *
117 * @return array|WP_Error An array containing file, width, height, and mime-type keys and it's values. WP_Error on failure.
118 */
119 public function get_size( $size_data ) {
120
121 $is_resized = $this->resize( $size_data );
122
123 if ( true === is_wp_error( $is_resized ) ) {
124 return $is_resized;
125 }
126
127 return array(
128 'file' => $this->get_filename(),
129 'width' => $this->get_width(),
130 'height' => $this->get_height(),
131 'mime-type' => $this->get_mime_type(),
132 );
133 }
134
135 /**
136 * Resets the image to it's original dimensions.
137 *
138 * @return bool True on successful reset to original dimensions.
139 */
140 public function reset_to_original() {
141 $this->width = $this->original_width;
142 $this->height = $this->original_height;
143 $this->is_resized = false;
144
145 return true;
146 }
147
148 /**
149 * Return the basename filename. If the image has been resized, including
150 * the resizing params for Jetpack CDN.
151 *
152 * @return string Basename of the filename.
153 */
154 public function get_filename() {
155 return wp_basename( $this->get_raw_filename() );
156 }
157
158 /**
159 * Return the absolute filename. If the image has been resized, including
160 * the resizing params for Jetpack CDN.
161 *
162 * @return string Filename.
163 */
164 public function get_raw_filename() {
165 return $this->is_resized() ? $this->get_resized_filename() : $this->filename;
166 }
167
168 /**
169 * Returns current image width. Either original, or after resize.
170 *
171 * @return int
172 */
173 public function get_width() {
174 return (int) $this->width;
175 }
176
177 /**
178 * Returns current image height. Either original, or after resize.
179 *
180 * @return int
181 */
182 public function get_height() {
183 return (int) $this->height;
184 }
185
186 /**
187 * Returns image mime type.
188 *
189 * @return string|WP_Error Image's mime type or WP_Error if it was not determined.
190 */
191 public function get_mime_type() {
192 return $this->mime_type;
193 }
194
195 /**
196 * Checks the resize status of the image.
197 *
198 * @return bool If the image has been resized.
199 */
200 public function is_resized() {
201 return ( true === $this->is_resized );
202 }
203
204 /**
205 * Get filename with proper args for the Photon service.
206 *
207 * @return string Filename with query args for Photon service
208 */
209 protected function get_resized_filename() {
210 $query_args = array(
211 'resize' => implode(
212 ',',
213 array(
214 $this->get_width(),
215 $this->get_height(),
216 )
217 ),
218 );
219
220 return add_query_arg( $query_args, $this->filename );
221 }
222
223 /**
224 * Get resize dimensions used for the Jetpack CDN service.
225 *
226 * Converts the list of values returned from `image_resize_dimensions()` to
227 * associative array for the sake of more readable code no relying on index
228 * nor `list`.
229 *
230 * @param int $max_width Maximum width.
231 * @param int $max_height Maximum height.
232 * @param bool|array $crop Cropping parameters.
233 *
234 * @return array|WP_Error Array of dimensions matching the parameters to imagecopyresampled. WP_Error on failure.
235 */
236 protected function image_resize_dimensions( $max_width, $max_height, $crop ) {
237 $dimensions = image_resize_dimensions( $this->original_width, $this->original_height, $max_width, $max_height, $crop );
238 if ( ! $dimensions ) {
239 return new WP_Error( 'error_getting_dimensions', __( 'Could not calculate resized image dimensions', 'jetpack-image-cdn' ), $this->filename );
240 }
241
242 return array_combine(
243 array(
244 'dst_x',
245 'dst_y',
246 'src_x',
247 'src_y',
248 'dst_w',
249 'dst_h',
250 'src_w',
251 'src_h',
252 ),
253 $dimensions
254 );
255 }
256
257 /**
258 * Sets proper width and height from dimensions.
259 *
260 * @param array $dimensions an array of image dimensions.
261 * @return void
262 */
263 protected function set_width_height( $dimensions ) {
264 $this->width = (int) $dimensions['dst_w'];
265 $this->height = (int) $dimensions['dst_h'];
266 }
267 }
268