-
Notifications
You must be signed in to change notification settings - Fork 3.6k
Media: Add an opt-in filter to generate animated image sub-sizes #12572
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: trunk
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -1378,6 +1378,27 @@ public function get_index( $request ) { | |
|
|
||
| /** This filter is documented in wp-admin/includes/image.php */ | ||
| $available['image_size_threshold'] = (int) apply_filters( 'big_image_size_threshold', 2560, array( 0, 0 ), '', 0 ); | ||
|
|
||
| /** | ||
| * Filters whether sub-sizes of animated images should keep their animation. | ||
| * | ||
| * By default, sub-sizes of animated images (e.g. animated GIFs) are static, | ||
| * generated from the first frame only. Re-encoding every frame per sub-size | ||
| * is very resource intensive, so animated sub-sizes are opt-in. | ||
| * | ||
| * This currently only affects the client-side media processing path, | ||
| * where all frames can be decoded and re-encoded in the browser. Only | ||
| * uncropped sub-sizes keep their animation; cropped sizes (such as | ||
| * `thumbnail`) are always generated from the first frame. Uploads that | ||
| * take the server-side path also still produce static sub-sizes, as | ||
| * neither GD nor Imagick resizing preserves animation in core. | ||
| * | ||
| * @since 7.2.0 | ||
| * | ||
| * @param bool $animated_image_subsizes Whether to generate animated sub-sizes | ||
| * for animated images. Default false. | ||
| */ | ||
| $available['animated_image_subsizes'] = (bool) apply_filters( 'wp_generate_animated_image_subsizes', false ); | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. As I just commented at WordPress/gutenberg#80385 as well, |
||
| } | ||
|
|
||
| $response = new WP_REST_Response( $available ); | ||
|
|
||
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -1207,6 +1207,64 @@ public function test_get_index() { | |||||||||
| $this->assertArrayHasKey( 'site_icon_url', $data ); | ||||||||||
| } | ||||||||||
|
|
||||||||||
| /** | ||||||||||
| * @ticket 65656 | ||||||||||
| * | ||||||||||
| * @covers WP_REST_Server::get_index | ||||||||||
| */ | ||||||||||
| public function test_get_index_should_include_animated_image_subsizes(): void { | ||||||||||
| $user_id = self::factory()->user->create( array( 'role' => 'administrator' ) ); | ||||||||||
| $this->assertIsInt( $user_id ); | ||||||||||
| wp_set_current_user( $user_id ); | ||||||||||
| add_filter( 'wp_client_side_media_processing_enabled', '__return_true' ); | ||||||||||
|
|
||||||||||
| $server = new WP_REST_Server(); | ||||||||||
| $request = new WP_REST_Request( 'GET', '/' ); | ||||||||||
| $index = $server->dispatch( $request ); | ||||||||||
| $data = $index->get_data(); | ||||||||||
| $this->assertIsArray( $data ); | ||||||||||
|
|
||||||||||
| $this->assertArrayHasKey( 'animated_image_subsizes', $data ); | ||||||||||
| $this->assertFalse( $data['animated_image_subsizes'] ); | ||||||||||
| } | ||||||||||
|
|
||||||||||
| /** | ||||||||||
| * @ticket 65656 | ||||||||||
| * | ||||||||||
| * @covers WP_REST_Server::get_index | ||||||||||
| */ | ||||||||||
| public function test_get_index_should_not_include_animated_image_subsizes_without_caps(): void { | ||||||||||
| add_filter( 'wp_client_side_media_processing_enabled', '__return_true' ); | ||||||||||
|
|
||||||||||
| $server = new WP_REST_Server(); | ||||||||||
| $request = new WP_REST_Request( 'GET', '/' ); | ||||||||||
| $index = $server->dispatch( $request ); | ||||||||||
| $data = $index->get_data(); | ||||||||||
| $this->assertIsArray( $data ); | ||||||||||
|
|
||||||||||
| $this->assertArrayNotHasKey( 'animated_image_subsizes', $data ); | ||||||||||
| } | ||||||||||
|
|
||||||||||
| /** | ||||||||||
| * @ticket 65656 | ||||||||||
| * | ||||||||||
| * @covers WP_REST_Server::get_index | ||||||||||
| */ | ||||||||||
| public function test_get_index_should_honor_animated_image_subsizes_filter(): void { | ||||||||||
| $user_id = self::factory()->user->create( array( 'role' => 'administrator' ) ); | ||||||||||
| $this->assertIsInt( $user_id ); | ||||||||||
| wp_set_current_user( $user_id ); | ||||||||||
|
Comment on lines
+1254
to
+1256
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Reuse admin that already created in |
||||||||||
| add_filter( 'wp_client_side_media_processing_enabled', '__return_true' ); | ||||||||||
| add_filter( 'wp_generate_animated_image_subsizes', '__return_true' ); | ||||||||||
|
|
||||||||||
| $server = new WP_REST_Server(); | ||||||||||
| $request = new WP_REST_Request( 'GET', '/' ); | ||||||||||
| $index = $server->dispatch( $request ); | ||||||||||
| $data = $index->get_data(); | ||||||||||
|
|
||||||||||
| $this->assertTrue( $data['animated_image_subsizes'] ); | ||||||||||
| } | ||||||||||
|
|
||||||||||
| /** | ||||||||||
| * @ticket 57902 | ||||||||||
| * | ||||||||||
|
|
||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If this PR is to be committed during the 7.1 beta, let's update this.