Skip to content
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

Add AVIF support #4612

Closed
Closed
Show file tree
Hide file tree
Changes from 78 commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
b96bb09
Add AVIF support
adamsilverstein Jun 13, 2023
5b622d1
whitespace
adamsilverstein Jun 13, 2023
bb9642f
Add AVIF constants
adamsilverstein Jun 14, 2023
3bd1ae8
update magic numbers for avif detection
adamsilverstein Jun 15, 2023
bc5fc5b
Include AVIF in the displayable image types
adamsilverstein Jun 15, 2023
816dfc4
Merge branch 'trunk' into add/avif-support
adamsilverstein Jun 15, 2023
3e7228d
phpcbf
adamsilverstein Jun 15, 2023
8f64fe8
Apply phpcbf fixes to avif helper
adamsilverstein Jun 16, 2023
bb38f19
more phpcbf
adamsilverstein Jun 16, 2023
f1a90cc
yoda conditionals, other small phpcs fixes
adamsilverstein Jun 16, 2023
41762ff
Restore avif helper original and exclude from phpcs
adamsilverstein Jun 16, 2023
160791f
Merge branch 'trunk' into add/avif-support
adamsilverstein Jun 22, 2023
0259896
Merge branch 'trunk' into add/avif-support
adamsilverstein Jul 7, 2023
b0c4ded
Merge branch 'trunk' into add/avif-support
adamsilverstein Oct 6, 2023
ae6a99f
Merge branch 'trunk' into add/avif-support
adamsilverstein Oct 27, 2023
897ffb5
remove excessive whitespace
adamsilverstein Nov 13, 2023
bbcadec
Merge branch 'trunk' into add/avif-support
adamsilverstein Nov 13, 2023
e22d02a
Merge branch 'trunk' into add/avif-support
adamsilverstein Jan 11, 2024
d3fc325
Add AVIF test images
adamsilverstein Jan 12, 2024
1652946
match other test image names
adamsilverstein Jan 12, 2024
fd93e47
one more test AVIF image
adamsilverstein Jan 12, 2024
345fa5e
Add avif to get_image_mime tests
adamsilverstein Jan 12, 2024
f86c77e
Add AVIF to wp_getimagesize tests
adamsilverstein Jan 12, 2024
fd88a99
Add tests for wp_get_avif_info
adamsilverstein Jan 12, 2024
306870c
Add AVIF to file_is_valid_image_positive tests
adamsilverstein Jan 12, 2024
b50890a
Add AVIF to file_is_displayable_image_positive test
adamsilverstein Jan 12, 2024
8555bfb
Add additional magic file detection numbers for AVIF in wp_get_image_…
adamsilverstein Jan 12, 2024
e25becb
Correctly handle 0x0 sizes returned from `getimagesize`, using shim f…
adamsilverstein Jan 12, 2024
f5b39b7
Add test_resize_avif
adamsilverstein Jan 12, 2024
509ac34
phpcs
adamsilverstein Jan 12, 2024
4c5efd0
remove unused module
adamsilverstein Jan 12, 2024
b5d9624
temporarily log debug info for test runs
adamsilverstein Jan 12, 2024
22f6af1
more debug logging for tests
adamsilverstein Jan 12, 2024
2ec1d34
Imagick editor - fall back to `wp_getimagesize`
adamsilverstein Jan 12, 2024
1b247ec
Improve doc block
adamsilverstein Jan 12, 2024
547b40d
more resize logging
adamsilverstein Jan 12, 2024
07dbc24
remove image size logging
adamsilverstein Jan 12, 2024
74eb3c8
remove error logging
adamsilverstein Jan 12, 2024
82ccce5
log and skip failing test
adamsilverstein Jan 12, 2024
1823866
remove fallback
adamsilverstein Jan 13, 2024
e5ec13c
log mime type check in imagick
adamsilverstein Jan 14, 2024
055859f
better logging
adamsilverstein Jan 14, 2024
117de6d
add logging of failed avif test
adamsilverstein Jan 14, 2024
67291a6
improve logging
adamsilverstein Jan 14, 2024
e43c03e
improve logging
adamsilverstein Jan 14, 2024
13641c0
class name for log
adamsilverstein Jan 14, 2024
3e9745f
log avifinfo results after resize
adamsilverstein Jan 14, 2024
63664bc
skip if either h or w empty
adamsilverstein Jan 14, 2024
b257474
more logging
adamsilverstein Jan 14, 2024
bc38fd4
more logging
adamsilverstein Jan 14, 2024
0195d41
more logging
adamsilverstein Jan 14, 2024
efd37b9
log mime magics
adamsilverstein Jan 14, 2024
c6c3b54
adjust empty logic, log after check
adamsilverstein Jan 14, 2024
7e51218
log a mime check in test
adamsilverstein Jan 14, 2024
569fe27
fix typo
adamsilverstein Jan 14, 2024
b8290a9
add additional magic for AVIF detection
adamsilverstein Jan 14, 2024
6c10a03
remove logging
adamsilverstein Jan 14, 2024
663a424
Update doc blocks, cleanup
adamsilverstein Jan 15, 2024
ee6ad2e
Merge branch 'trunk' into add/avif-support
adamsilverstein Jan 15, 2024
0b54d59
add fallback comment
adamsilverstein Jan 15, 2024
dd14f4a
improve libavifinfo doc block, link to source
adamsilverstein Jan 17, 2024
447a44c
remove lossless AVIF image handling: not supported in PHP
adamsilverstein Jan 17, 2024
6af974c
Simplify wp_get_avif_info and improve doc blocks
adamsilverstein Jan 17, 2024
c5820c3
Add todo for detection change
adamsilverstein Jan 17, 2024
c026771
WP_Image_Editor_GD:stream - improve mime detection and fallback
adamsilverstein Jan 18, 2024
2eb1fc3
Merge branch 'trunk' into add/avif-support
adamsilverstein Jan 18, 2024
ddbd344
WP_Image_Editor_Imagick::update_size - improve logic for avif fallback
adamsilverstein Jan 18, 2024
3ecb682
Update header based AVIF detection
adamsilverstein Jan 18, 2024
b6b78d0
Add commit hash to libavifinfo reference
adamsilverstein Jan 18, 2024
8c51a64
revert creation of additional header variable
adamsilverstein Jan 18, 2024
478e5d5
Doc block cleanup.
adamsilverstein Jan 18, 2024
c773990
replace avif-transparent test image
adamsilverstein Jan 19, 2024
b2ec778
Replace @todo comment with link to specification
adamsilverstein Jan 19, 2024
5905869
Always test `wp_get_avif_info` regardless of server AVIF support
adamsilverstein Jan 19, 2024
2cb8cae
Add additional AVIF test images, remove one unused image
adamsilverstein Jan 19, 2024
79587bd
Always test wp_get_webp_info regardless of server support for webp
adamsilverstein Jan 19, 2024
b7c193c
Update avif-info doc block to indicate it will no longer be required …
adamsilverstein Jan 19, 2024
471f77c
Correct bit_depth detection bug in avif-info class, adjust tests to m…
adamsilverstein Jan 23, 2024
49f4278
Update src/wp-includes/media.php
adamsilverstein Jan 24, 2024
720910b
Update tests/phpunit/tests/image/editor.php
adamsilverstein Jan 24, 2024
609d875
Update doc block for AVIF mime detection
adamsilverstein Jan 24, 2024
b492dbf
Clean up return from `wp_get_avif_info`
adamsilverstein Jan 24, 2024
6fe2847
Correct tests for `wp_get_avif_info`
adamsilverstein Jan 24, 2024
942bfbc
wp_get_avif_info - test fix for default return
adamsilverstein Jan 24, 2024
9dd7c71
Merge branch 'trunk' into add/avif-support
adamsilverstein Jan 29, 2024
036ab53
Update src/wp-includes/class-wp-image-editor-imagick.php
adamsilverstein Jan 29, 2024
93b4cdc
Update src/wp-includes/media.php
adamsilverstein Jan 29, 2024
73c1528
Update src/wp-includes/media.php
adamsilverstein Jan 29, 2024
c2b6df1
Update phpcs.xml.dist
adamsilverstein Jan 29, 2024
9f884c1
Merge branch 'trunk' into add/avif-support
adamsilverstein Feb 2, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions phpcs.xml.dist
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@
<exclude-pattern>/src/wp-includes/class-requests\.php</exclude-pattern>
<exclude-pattern>/src/wp-includes/class-simplepie\.php</exclude-pattern>
<exclude-pattern>/src/wp-includes/class-snoopy\.php</exclude-pattern>
<exclude-pattern>/src/wp-includes/class-wp-block-parser\.php</exclude-pattern>
adamsilverstein marked this conversation as resolved.
Show resolved Hide resolved
<exclude-pattern>/src/wp-includes/class-avif-info\.php</exclude-pattern>
<exclude-pattern>/src/wp-includes/deprecated\.php</exclude-pattern>
<exclude-pattern>/src/wp-includes/ms-deprecated\.php</exclude-pattern>
<exclude-pattern>/src/wp-includes/pluggable-deprecated\.php</exclude-pattern>
Expand Down
5 changes: 5 additions & 0 deletions src/js/_enqueues/vendor/plupload/handlers.js
Original file line number Diff line number Diff line change
Expand Up @@ -608,6 +608,11 @@ jQuery( document ).ready( function( $ ) {
wpQueueError( pluploadL10n.noneditable_image );
up.removeFile( file );
return;
} else if ( file.type === 'image/avif' && up.settings.avif_upload_error ) {
// Disallow uploading of AVIF images if the server cannot edit them.
wpQueueError( pluploadL10n.noneditable_image );
up.removeFile( file );
return;
}

fileQueued( file );
Expand Down
5 changes: 5 additions & 0 deletions src/js/_enqueues/vendor/plupload/wp-plupload.js
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,11 @@ window.wp = window.wp || {};
error( pluploadL10n.noneditable_image, {}, file, 'no-retry' );
up.removeFile( file );
return;
} else if ( file.type === 'image/avif' && up.settings.avif_upload_error ) {
// Disallow uploading of AVIF images if the server cannot edit them.
error( pluploadL10n.noneditable_image, {}, file, 'no-retry' );
up.removeFile( file );
return;
}

// Generate attributes for a new `Attachment` model.
Expand Down
5 changes: 3 additions & 2 deletions src/js/_enqueues/vendor/thickbox/thickbox.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,16 @@ function tb_show(caption, url, imageGroup) {//function called when the user clic
baseURL = url;
}

var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$|\.webp$/;
var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$|\.webp$|\.avif$/;
adamsilverstein marked this conversation as resolved.
Show resolved Hide resolved
var urlType = baseURL.toLowerCase().match(urlString);

if(urlType == '.jpg' ||
urlType == '.jpeg' ||
urlType == '.png' ||
urlType == '.gif' ||
urlType == '.bmp' ||
urlType == '.webp'
urlType == '.webp' ||
urlType == '.avif'
){//code to show images

TB_PrevCaption = "";
Expand Down
2 changes: 1 addition & 1 deletion src/js/media/controllers/library.js
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ Library = wp.media.controller.State.extend(/** @lends wp.media.controller.Librar
isImageAttachment: function( attachment ) {
// If uploading, we know the filename but not the mime type.
if ( attachment.get('uploading') ) {
return /\.(jpe?g|png|gif|webp)$/i.test( attachment.get('filename') );
return /\.(jpe?g|png|gif|webp|avif)$/i.test( attachment.get('filename') );
}

return attachment.get('type') === 'image';
Expand Down
11 changes: 11 additions & 0 deletions src/wp-admin/includes/image-edit.php
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,12 @@ function wp_stream_image( $image, $mime_type, $attachment_id ) {
return imagewebp( $image, null, 90 );
}
return false;
case 'image/avif':
if ( function_exists( 'imageavif' ) ) {
header( 'Content-Type: image/avif' );
return imageavif( $image, null, 90 );
}
return false;
default:
return false;
}
Expand Down Expand Up @@ -494,6 +500,11 @@ function wp_save_image_file( $filename, $image, $mime_type, $post_id ) {
return imagewebp( $image, $filename );
}
return false;
case 'image/avif':
if ( function_exists( 'imageavif' ) ) {
return imageavif( $image, $filename );
}
return false;
default:
return false;
}
Expand Down
2 changes: 1 addition & 1 deletion src/wp-admin/includes/image.php
Original file line number Diff line number Diff line change
Expand Up @@ -1006,7 +1006,7 @@ function file_is_valid_image( $path ) {
* @return bool True if suitable, false if not suitable.
*/
function file_is_displayable_image( $path ) {
$displayable_image_types = array( IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_BMP, IMAGETYPE_ICO, IMAGETYPE_WEBP );
$displayable_image_types = array( IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_BMP, IMAGETYPE_ICO, IMAGETYPE_WEBP, IMAGETYPE_AVIF );

$info = wp_getimagesize( $path );
if ( empty( $info ) ) {
Expand Down
5 changes: 5 additions & 0 deletions src/wp-admin/includes/media.php
Original file line number Diff line number Diff line change
Expand Up @@ -2198,6 +2198,11 @@ function media_upload_form( $errors = null ) {
$plupload_init['webp_upload_error'] = true;
}

// Check if AVIF images can be edited.
if ( ! wp_image_editor_supports( array( 'mime_type' => 'image/avif' ) ) ) {
$plupload_init['avif_upload_error'] = true;
}

/**
* Filters the default Plupload settings.
*
Expand Down
1 change: 1 addition & 0 deletions src/wp-admin/includes/schema.php
Original file line number Diff line number Diff line change
Expand Up @@ -1252,6 +1252,7 @@ function populate_network_meta( $network_id, array $meta = array() ) {
'png',
'gif',
'webp',
'avif',
// Video.
'mov',
'avi',
Expand Down