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-sizes.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-sizes.php
192 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * The Image Sizes library.
4 *
5 * @package automattic/jetpack
6 */
7
8 require_once JETPACK__PLUGIN_DIR . '_inc/lib/class.jetpack-photon-image.php';
9
10 /**
11 * Class Jetpack_Photon_ImageSizes
12 *
13 * Manages image resizing via Jetpack CDN Service.
14 */
15 class Jetpack_Photon_ImageSizes {
16
17 /**
18 * Attachment metadata.
19 *
20 * @var array
21 */
22 public $data;
23
24 /**
25 * Image to be resized.
26 *
27 * @var Image
28 */
29 public $image;
30
31 /**
32 * Intermediate sizes.
33 *
34 * @var null|array
35 */
36 public static $sizes = null;
37
38 /**
39 * Construct new sizes meta
40 *
41 * @param int $attachment_id Attachment ID.
42 * @param array $data Attachment metadata.
43 */
44 public function __construct( $attachment_id, $data ) {
45 $this->data = $data;
46 $this->image = new Jetpack_Photon_Image( $data, get_post_mime_type( $attachment_id ) );
47 $this->generate_sizes();
48 }
49
50 /**
51 * Generate sizes for attachment.
52 *
53 * @return array Array of sizes; empty array as failure fallback.
54 */
55 protected function generate_sizes() {
56
57 // There is no need to generate the sizes a new for every single image.
58 if ( null !== self::$sizes ) {
59 return self::$sizes;
60 }
61
62 /*
63 * The following logic is copied over from wp_generate_attachment_metadata
64 */
65 $_wp_additional_image_sizes = wp_get_additional_image_sizes();
66
67 $sizes = array();
68
69 $intermediate_image_sizes = get_intermediate_image_sizes();
70
71 foreach ( $intermediate_image_sizes as $s ) {
72 $sizes[ $s ] = array(
73 'width' => '',
74 'height' => '',
75 'crop' => false,
76 );
77 if ( isset( $_wp_additional_image_sizes[ $s ]['width'] ) ) {
78 // For theme-added sizes.
79 $sizes[ $s ]['width'] = (int) $_wp_additional_image_sizes[ $s ]['width'];
80 } else {
81 // For default sizes set in options.
82 $sizes[ $s ]['width'] = get_option( "{$s}_size_w" );
83 }
84
85 if ( isset( $_wp_additional_image_sizes[ $s ]['height'] ) ) {
86 // For theme-added sizes.
87 $sizes[ $s ]['height'] = (int) $_wp_additional_image_sizes[ $s ]['height'];
88 } else {
89 // For default sizes set in options.
90 $sizes[ $s ]['height'] = get_option( "{$s}_size_h" );
91 }
92
93 if ( isset( $_wp_additional_image_sizes[ $s ]['crop'] ) ) {
94 // For theme-added sizes.
95 $sizes[ $s ]['crop'] = $_wp_additional_image_sizes[ $s ]['crop'];
96 } else {
97 // For default sizes set in options.
98 $sizes[ $s ]['crop'] = get_option( "{$s}_crop" );
99 }
100 }
101
102 self::$sizes = $sizes;
103
104 return $sizes;
105 }
106
107 /**
108 * Add filtered sizes.
109 *
110 * @return array
111 */
112 public function filtered_sizes() {
113 // Remove filter preventing the creation of advanced sizes.
114 remove_filter(
115 'intermediate_image_sizes_advanced',
116 array( 'Jetpack_Photon', 'filter_photon_noresize_intermediate_sizes' )
117 );
118
119 /** This filter is documented in wp-admin/includes/image.php */
120 $sizes = apply_filters( 'intermediate_image_sizes_advanced', self::$sizes, $this->data );
121
122 // Re-add the filter removed above.
123 add_filter(
124 'intermediate_image_sizes_advanced',
125 array( 'Jetpack_Photon', 'filter_photon_noresize_intermediate_sizes' )
126 );
127
128 return (array) $sizes;
129 }
130
131 /**
132 * Standardises and validates the size_data array.
133 *
134 * @param array $size_data Size data array - at least containing height or width key. Can contain crop as well.
135 *
136 * @return array Array with populated width, height and crop keys; empty array if no width and height are provided.
137 */
138 public function standardize_size_data( $size_data ) {
139 $has_at_least_width_or_height = ( isset( $size_data['width'] ) || isset( $size_data['height'] ) );
140 if ( ! $has_at_least_width_or_height ) {
141 return array();
142 }
143
144 $defaults = array(
145 'width' => null,
146 'height' => null,
147 'crop' => false,
148 );
149
150 return array_merge( $defaults, $size_data );
151 }
152
153 /**
154 * Get sizes for attachment post meta.
155 *
156 * @return array ImageSizes for attachment postmeta.
157 */
158 public function generate_sizes_meta() {
159
160 $metadata = array();
161
162 foreach ( $this->filtered_sizes() as $size => $size_data ) {
163
164 $size_data = $this->standardize_size_data( $size_data );
165
166 if ( true === empty( $size_data ) ) {
167 continue;
168 }
169
170 $resized_image = $this->resize( $size_data );
171
172 if ( true === is_array( $resized_image ) ) {
173 $metadata[ $size ] = $resized_image;
174 }
175 }
176
177 return $metadata;
178 }
179
180 /**
181 * Resize image.
182 *
183 * @param array $size_data Resize parameters.
184 *
185 * @return array|\WP_Error Array for usage in $metadata['sizes']; WP_Error on failure.
186 */
187 protected function resize( $size_data ) {
188
189 return $this->image->get_size( $size_data );
190 }
191 }
192