PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.1.3
Jetpack – WP Security, Backup, Speed, & Growth v12.1.3
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 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 / _inc / lib / class.jetpack-photon-image.php
jetpack / _inc / lib Last commit date
admin-pages 3 years ago core-api 3 years ago debugger 3 years ago markdown 4 years ago class-jetpack-ai-helper.php 3 years ago class-jetpack-currencies.php 5 years ago class-jetpack-google-drive-helper.php 3 years ago class-jetpack-instagram-gallery-helper.php 3 years ago class-jetpack-mapbox-helper.php 3 years ago class-jetpack-podcast-feed-locator.php 5 years ago class-jetpack-podcast-helper.php 3 years ago class-jetpack-recommendations.php 4 years ago class-jetpack-tweetstorm-helper.php 3 years ago class-jetpack-wizard.php 5 years ago class.color.php 4 years ago class.core-rest-api-endpoints.php 3 years ago class.jetpack-automatic-install-skin.php 4 years ago class.jetpack-iframe-embed.php 4 years ago class.jetpack-keyring-service-helper.php 4 years ago class.jetpack-password-checker.php 3 years ago class.jetpack-photon-image-sizes.php 3 years ago class.jetpack-photon-image.php 4 years ago class.jetpack-search-performance-logger.php 4 years ago class.media-extractor.php 3 years ago class.media-summary.php 3 years ago class.media.php 3 years ago components.php 3 years ago debugger.php 4 years ago functions.wp-notify.php 4 years ago icalendar-reader.php 3 years ago markdown.php 3 years ago plans.php 4 years ago plugins.php 4 years ago tonesque.php 3 years ago widgets.php 4 years ago
class.jetpack-photon-image.php
265 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * The Image Class.
4 *
5 * @package automattic/jetpack
6 */
7
8 /**
9 * Represents a resizable image, exposing properties necessary for properly generating srcset.
10 */
11 class Jetpack_Photon_Image {
12
13 /**
14 * Attachment's Filename.
15 *
16 * @var string
17 */
18 public $filename;
19
20 /**
21 * Attachment's mime-type, WP_Error on failure when recalculating the dimensions.
22 *
23 * @var string|WP_Error
24 */
25 private $mime_type;
26
27 /**
28 * Image original width.
29 *
30 * @var int
31 */
32 private $original_width;
33
34 /**
35 * Image original height.
36 *
37 * @var int
38 */
39 private $original_height;
40
41 /**
42 * Current attachment's width.
43 *
44 * @var int
45 */
46 private $width;
47
48 /**
49 * Current attachment's height.
50 *
51 * @var int
52 */
53 private $height;
54
55 /**
56 * Whether the attachment has been resized yet, or not.
57 *
58 * @var bool
59 */
60 private $is_resized = false;
61
62 /**
63 * Constructs the image object.
64 *
65 * The $data array should provide at least
66 * file : string Image file path
67 * width : int Image width
68 * height : int Image height
69 *
70 * @param array $data Array of attachment metadata, typically value of _wp_attachment_metadata postmeta.
71 * @param string|\WP_Error $mime_type Typically value returned from get_post_mime_type function.
72 */
73 public function __construct( $data, $mime_type ) {
74 $this->filename = $data['file'];
75 $this->original_width = $data['width'];
76 $this->original_height = $data['height'];
77 $this->width = $this->original_width;
78 $this->height = $this->original_height;
79 $this->mime_type = $mime_type;
80 }
81
82 /**
83 * Resizes the image to given size.
84 *
85 * @param array $size_data Array of width, height, and crop properties of a size.
86 *
87 * @return bool|\WP_Error True if resize was successful, WP_Error on failure.
88 */
89 public function resize( $size_data ) {
90
91 $dimensions = $this->image_resize_dimensions( $size_data['width'], $size_data['height'], $size_data['crop'] );
92
93 if ( true === is_wp_error( $dimensions ) ) {
94 return $dimensions; // Returns \WP_Error.
95 }
96
97 if ( true === is_wp_error( $this->mime_type ) ) {
98 return $this->mime_type; // Returns \WP_Error.
99 }
100
101 $this->set_width_height( $dimensions );
102
103 $this->is_resized = true;
104
105 return true;
106 }
107
108 /**
109 * Generates size data for usage in $metadata['sizes'];.
110 *
111 * @param array $size_data Array of width, height, and crop properties of a size.
112 *
113 * @return array|\WP_Error An array containing file, width, height, and mime-type keys and it's values. WP_Error on failure.
114 */
115 public function get_size( $size_data ) {
116
117 $is_resized = $this->resize( $size_data );
118
119 if ( true === is_wp_error( $is_resized ) ) {
120 return $is_resized;
121 }
122
123 return array(
124 'file' => $this->get_filename(),
125 'width' => $this->get_width(),
126 'height' => $this->get_height(),
127 'mime-type' => $this->get_mime_type(),
128 );
129 }
130
131 /**
132 * Resets the image to it's original dimensions.
133 *
134 * @return bool True on successful reset to original dimensions.
135 */
136 public function reset_to_original() {
137 $this->width = $this->original_width;
138 $this->height = $this->original_height;
139 $this->is_resized = false;
140
141 return true;
142 }
143
144 /**
145 * Return the basename filename. If the image has been resized, including
146 * the resizing params for Jetpack CDN.
147 *
148 * @return string Basename of the filename.
149 */
150 public function get_filename() {
151 return wp_basename( $this->get_raw_filename() );
152 }
153
154 /**
155 * Return the absolute filename. If the image has been resized, including
156 * the resizing params for Jetpack CDN.
157 *
158 * @return string Filename.
159 */
160 public function get_raw_filename() {
161 return $this->is_resized() ? $this->get_resized_filename() : $this->filename;
162 }
163
164 /**
165 * Returns current image width. Either original, or after resize.
166 *
167 * @return int
168 */
169 public function get_width() {
170 return (int) $this->width;
171 }
172
173 /**
174 * Returns current image height. Either original, or after resize.
175 *
176 * @return int
177 */
178 public function get_height() {
179 return (int) $this->height;
180 }
181
182 /**
183 * Returns image mime type.
184 *
185 * @return string|WP_Error Image's mime type or WP_Error if it was not determined.
186 */
187 public function get_mime_type() {
188 return $this->mime_type;
189 }
190
191 /**
192 * Checks the resize status of the image.
193 *
194 * @return bool If the image has been resized.
195 */
196 public function is_resized() {
197 return ( true === $this->is_resized );
198 }
199
200 /**
201 * Get filename with proper args for the Photon service.
202 *
203 * @return string Filename with query args for Photon service
204 */
205 protected function get_resized_filename() {
206 $query_args = array(
207 'resize' => join(
208 ',',
209 array(
210 $this->get_width(),
211 $this->get_height(),
212 )
213 ),
214 );
215
216 return add_query_arg( $query_args, $this->filename );
217 }
218
219 /**
220 * Get resize dimensions used for the Jetpack CDN service.
221 *
222 * Converts the list of values returned from `image_resize_dimensions()` to
223 * associative array for the sake of more readable code no relying on index
224 * nor `list`.
225 *
226 * @param int $max_width Maximum width.
227 * @param int $max_height Maximum height.
228 * @param bool|array $crop Cropping parameters.
229 *
230 * @return array|\WP_Error Array of dimensions matching the parameters to imagecopyresampled. WP_Error on failure.
231 */
232 protected function image_resize_dimensions( $max_width, $max_height, $crop ) {
233 $dimensions = image_resize_dimensions( $this->original_width, $this->original_height, $max_width, $max_height, $crop );
234 if ( ! $dimensions ) {
235 return new WP_Error( 'error_getting_dimensions', __( 'Could not calculate resized image dimensions', 'jetpack' ), $this->filename );
236 }
237
238 return array_combine(
239 array(
240 'dst_x',
241 'dst_y',
242 'src_x',
243 'src_y',
244 'dst_w',
245 'dst_h',
246 'src_w',
247 'src_h',
248 ),
249 $dimensions
250 );
251 }
252
253 /**
254 * Sets proper width and height from dimensions.
255 *
256 * @param array $dimensions an array of image dimensions.
257 * @return void
258 */
259 protected function set_width_height( $dimensions ) {
260 $this->width = (int) $dimensions['dst_w'];
261 $this->height = (int) $dimensions['dst_h'];
262 }
263
264 }
265