Changeset 59315
- Timestamp:
- 10/29/2024 01:11:00 AM (6 weeks ago)
- Location:
- trunk/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/js/media/controllers/library.js
r58849 r59315 197 197 // If uploading, we know the filename but not the mime type. 198 198 if ( attachment.get('uploading') ) { 199 return /\.(jpe?g|png|gif|webp|avif|heic )$/i.test( attachment.get('filename') );199 return /\.(jpe?g|png|gif|webp|avif|heic|heif)$/i.test( attachment.get('filename') ); 200 200 } 201 201 -
trunk/src/wp-includes/class-wp-image-editor-imagick.php
r59247 r59315 272 272 * are properly sized without affecting previous `getImageGeometry` behavior. 273 273 */ 274 if ( ( ! $width || ! $height ) && ( 'image/avif' === $this->mime_type || 'image/heic' === $this->mime_type) ) {274 if ( ( ! $width || ! $height ) && ( 'image/avif' === $this->mime_type || wp_is_heic_image_mime_type( $this->mime_type ) ) ) { 275 275 $size = wp_getimagesize( $this->file ); 276 276 $width = $size[0]; -
trunk/src/wp-includes/functions.php
r59242 r59315 3102 3102 $real_mime = wp_get_image_mime( $file ); 3103 3103 3104 if ( $real_mime && $real_mime !== $type ) { 3104 $heic_images_etx = array( 3105 'heif', 3106 'heics', 3107 'heifs', 3108 ); 3109 3110 if ( $real_mime && ( $real_mime !== $type || in_array( $ext, $heic_images_etx, true ) ) ) { 3105 3111 /** 3106 3112 * Filters the list mapping image mime types to their respective extensions. … … 3120 3126 'image/webp' => 'webp', 3121 3127 'image/avif' => 'avif', 3128 3129 /* 3130 * In theory there are/should be file extensions that correspond to the 3131 * mime types: .heif, .heics and .heifs. However it seems that HEIC images 3132 * with any of the mime types commonly have a .heic file extension. 3133 * Seems keeping the status quo here is best for compatibility. 3134 */ 3122 3135 'image/heic' => 'heic', 3136 'image/heif' => 'heic', 3137 'image/heic-sequence' => 'heic', 3138 'image/heif-sequence' => 'heic', 3123 3139 ) 3124 3140 ); … … 3127 3143 if ( ! empty( $mime_to_ext[ $real_mime ] ) ) { 3128 3144 $filename_parts = explode( '.', $filename ); 3145 3129 3146 array_pop( $filename_parts ); 3130 3147 $filename_parts[] = $mime_to_ext[ $real_mime ]; … … 3317 3334 } elseif ( function_exists( 'getimagesize' ) ) { 3318 3335 // Don't silence errors when in debug mode, unless running unit tests. 3319 if ( defined( 'WP_DEBUG' ) && WP_DEBUG 3320 && ! defined( 'WP_RUN_CORE_TESTS' ) 3321 ) { 3336 if ( defined( 'WP_DEBUG' ) && WP_DEBUG && ! defined( 'WP_RUN_CORE_TESTS' ) ) { 3322 3337 // Not using wp_getimagesize() here to avoid an infinite loop. 3323 3338 $imagesize = getimagesize( $file ); … … 3366 3381 $magic = str_split( $magic, 8 ); 3367 3382 3368 if ( 3369 isset( $magic[1] ) && 3370 isset( $magic[2] ) && 3371 'ftyp' === hex2bin( $magic[1] ) && 3372 ( 'avif' === hex2bin( $magic[2] ) || 'avis' === hex2bin( $magic[2] ) ) 3373 ) { 3374 $mime = 'image/avif'; 3375 } 3376 3377 if ( 3378 isset( $magic[1] ) && 3379 isset( $magic[2] ) && 3380 'ftyp' === hex2bin( $magic[1] ) && 3381 ( 'heic' === hex2bin( $magic[2] ) || 'heif' === hex2bin( $magic[2] ) ) 3382 ) { 3383 $mime = 'image/heic'; 3383 if ( isset( $magic[1] ) && isset( $magic[2] ) && 'ftyp' === hex2bin( $magic[1] ) ) { 3384 if ( 'avif' === hex2bin( $magic[2] ) || 'avis' === hex2bin( $magic[2] ) ) { 3385 $mime = 'image/avif'; 3386 } elseif ( 'heic' === hex2bin( $magic[2] ) ) { 3387 $mime = 'image/heic'; 3388 } elseif ( 'heif' === hex2bin( $magic[2] ) ) { 3389 $mime = 'image/heif'; 3390 } else { 3391 /* 3392 * HEIC/HEIF images and image sequences/animations may have other strings here 3393 * like mif1, msf1, etc. For now fall back to using finfo_file() to detect these. 3394 */ 3395 if ( extension_loaded( 'fileinfo' ) ) { 3396 $fileinfo = finfo_open( FILEINFO_MIME_TYPE ); 3397 $mime_type = finfo_file( $fileinfo, $file ); 3398 finfo_close( $fileinfo ); 3399 3400 if ( wp_is_heic_image_mime_type( $mime_type ) ) { 3401 $mime = $mime_type; 3402 } 3403 } 3404 } 3384 3405 } 3385 3406 } catch ( Exception $e ) { … … 3424 3445 'avif' => 'image/avif', 3425 3446 'ico' => 'image/x-icon', 3447 3448 // TODO: Needs improvement. All images with the following mime types seem to have .heic file extension. 3426 3449 'heic' => 'image/heic', 3450 'heif' => 'image/heif', 3451 'heics' => 'image/heic-sequence', 3452 'heifs' => 'image/heif-sequence', 3453 3427 3454 // Video formats. 3428 3455 'asf|asx' => 'video/x-ms-asf', … … 3544 3571 'ext2type', 3545 3572 array( 3546 'image' => array( 'jpg', 'jpeg', 'jpe', 'gif', 'png', 'bmp', 'tif', 'tiff', 'ico', 'heic', ' webp', 'avif' ),3573 'image' => array( 'jpg', 'jpeg', 'jpe', 'gif', 'png', 'bmp', 'tif', 'tiff', 'ico', 'heic', 'heif', 'webp', 'avif' ), 3547 3574 'audio' => array( 'aac', 'ac3', 'aif', 'aiff', 'flac', 'm3a', 'm4a', 'm4b', 'mka', 'mp1', 'mp2', 'mp3', 'ogg', 'oga', 'ram', 'wav', 'wma' ), 3548 3575 'video' => array( '3g2', '3gp', '3gpp', 'asf', 'avi', 'divx', 'dv', 'flv', 'm4v', 'mkv', 'mov', 'mp4', 'mpeg', 'mpg', 'mpv', 'ogm', 'ogv', 'qt', 'rm', 'vob', 'wmv' ), … … 9038 9065 echo wp_kses_post( wp_get_admin_notice( $message, $args ) ); 9039 9066 } 9067 9068 /** 9069 * Checks if a mime type is for a HEIC/HEIF image. 9070 * 9071 * @since 6.7.0 9072 * 9073 * @param string $mime_type The mime type to check. 9074 * @return bool Whether the mime type is for a HEIC/HEIF image. 9075 */ 9076 function wp_is_heic_image_mime_type( $mime_type ) { 9077 $heic_mime_types = array( 9078 'image/heic', 9079 'image/heif', 9080 'image/heic-sequence', 9081 'image/heif-sequence', 9082 ); 9083 9084 return in_array( $mime_type, $heic_mime_types, true ); 9085 } -
trunk/src/wp-includes/media.php
r59189 r59315 5628 5628 function wp_getimagesize( $filename, ?array &$image_info = null ) { 5629 5629 // Don't silence errors when in debug mode, unless running unit tests. 5630 if ( defined( 'WP_DEBUG' ) && WP_DEBUG 5631 && ! defined( 'WP_RUN_CORE_TESTS' ) 5632 ) { 5630 if ( defined( 'WP_DEBUG' ) && WP_DEBUG && ! defined( 'WP_RUN_CORE_TESTS' ) ) { 5633 5631 if ( 2 === func_num_args() ) { 5634 5632 $info = getimagesize( $filename, $image_info ); … … 5661 5659 } 5662 5660 5661 $image_mime_type = wp_get_image_mime( $filename ); 5662 5663 // Not an image? 5664 if ( false === $image_mime_type ) { 5665 return false; 5666 } 5667 5663 5668 /* 5664 5669 * For PHP versions that don't support WebP images, 5665 5670 * extract the image size info from the file headers. 5666 5671 */ 5667 if ( 'image/webp' === wp_get_image_mime( $filename )) {5672 if ( 'image/webp' === $image_mime_type ) { 5668 5673 $webp_info = wp_get_webp_info( $filename ); 5669 5674 $width = $webp_info['width']; … … 5687 5692 5688 5693 // For PHP versions that don't support AVIF images, extract the image size info from the file headers. 5689 if ( 'image/avif' === wp_get_image_mime( $filename )) {5694 if ( 'image/avif' === $image_mime_type ) { 5690 5695 $avif_info = wp_get_avif_info( $filename ); 5691 5696 … … 5710 5715 5711 5716 // For PHP versions that don't support HEIC images, extract the size info using Imagick when available. 5712 if ( 'image/heic' === wp_get_image_mime( $filename ) ) {5717 if ( wp_is_heic_image_mime_type( $image_mime_type ) ) { 5713 5718 $editor = wp_get_image_editor( $filename ); 5719 5714 5720 if ( is_wp_error( $editor ) ) { 5715 5721 return false; 5716 5722 } 5723 5717 5724 // If the editor for HEICs is Imagick, use it to get the image size. 5718 5725 if ( $editor instanceof WP_Image_Editor_Imagick ) {
Note: See TracChangeset
for help on using the changeset viewer.