Make WordPress Core

Changeset 59367


Ignore:
Timestamp:
11/07/2024 01:25:10 AM (21 months ago)
Author:
peterwilsoncc
Message:

Media: Fix converting of all HEIC/HEIF images to JPEGs after uploading regardless of dimensions.

This backport includes follow up commits to improve a variable name and improve accuracy of when an image needs to be converted.

Reviewed by peterwilsoncc.
Merges [59317], [59346], [59366] to the 6.7 branch.

Props ironprogrammer, adamsilverstein, azaozz, peterwilsoncc, apermo, flixos90.
Fixes #62305.

Location:
branches/6.7
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/6.7

  • branches/6.7/src/wp-admin/includes/image.php

    r58849 r59367  
    292292                 * scale the image and use it as the "full" size.
    293293                 */
     294                $scale_down = false;
     295                $convert    = false;
     296
    294297                if ( $threshold && ( $image_meta['width'] > $threshold || $image_meta['height'] > $threshold ) ) {
     298                        // The image will be converted if needed on saving.
     299                        $scale_down = true;
     300                } else {
     301                        // The image may need to be converted regardless of its dimensions.
     302                        $output_format = wp_get_image_editor_output_format( $file, $imagesize['mime'] );
     303
     304                        if (
     305                                is_array( $output_format ) &&
     306                                array_key_exists( $imagesize['mime'], $output_format ) &&
     307                                $output_format[ $imagesize['mime'] ] !== $imagesize['mime']
     308                        ) {
     309                                $convert = true;
     310                        }
     311                }
     312
     313                if ( $scale_down || $convert ) {
    295314                        $editor = wp_get_image_editor( $file );
    296315
     
    300319                        }
    301320
    302                         // Resize the image.
    303                         $resized = $editor->resize( $threshold, $threshold );
     321                        if ( $scale_down ) {
     322                                // Resize the image. This will also convet it if needed.
     323                                $resized = $editor->resize( $threshold, $threshold );
     324                        } elseif ( $convert ) {
     325                                // The image will be converted (if possible) when saved.
     326                                $resized = true;
     327                        }
     328
    304329                        $rotated = null;
    305330
     
    307332                        if ( ! is_wp_error( $resized ) && is_array( $exif_meta ) ) {
    308333                                $resized = $editor->maybe_exif_rotate();
    309                                 $rotated = $resized;
     334                                $rotated = $resized; // bool true or WP_Error
    310335                        }
    311336
     
    315340                                 * This doesn't affect the sub-sizes names as they are generated from the original image (for best quality).
    316341                                 */
    317                                 $saved = $editor->save( $editor->generate_filename( 'scaled' ) );
     342                                if ( $scale_down ) {
     343                                        $saved = $editor->save( $editor->generate_filename( 'scaled' ) );
     344                                } else {
     345                                        $saved = $editor->save();
     346                                }
    318347
    319348                                if ( ! is_wp_error( $saved ) ) {
  • branches/6.7/src/wp-includes/media.php

    r59360 r59367  
    62346234 */
    62356235function wp_get_image_editor_output_format( $filename, $mime_type ) {
     6236        $output_format = array(
     6237                'image/heic'          => 'image/jpeg',
     6238                'image/heif'          => 'image/jpeg',
     6239                'image/heic-sequence' => 'image/jpeg',
     6240                'image/heif-sequence' => 'image/jpeg',
     6241        );
     6242
    62366243        /**
    62376244         * Filters the image editor output format mapping.
    62386245         *
    6239          * Enables filtering the mime type used to save images. By default,
    6240          * the mapping array is empty, so the mime type matches the source image.
     6246         * Enables filtering the mime type used to save images. By default HEIC/HEIF images
     6247         * are converted to JPEGs.
    62416248         *
    62426249         * @see WP_Image_Editor::get_output_format()
    62436250         *
    62446251         * @since 5.8.0
    6245          * @since 6.7.0 The default was changed from array() to array( 'image/heic' => 'image/jpeg' ).
     6252         * @since 6.7.0 The default was changed from an empty array to an array
     6253         *              containing the HEIC/HEIF images mime types.
    62466254         *
    62476255         * @param string[] $output_format {
    62486256         *     An array of mime type mappings. Maps a source mime type to a new
    6249          *     destination mime type. Default maps uploaded HEIC images to JPEG output.
     6257         *     destination mime type. By default maps HEIC/HEIF input to JPEG output.
    62506258         *
    62516259         *     @type string ...$0 The new mime type.
     
    62546262         * @param string $mime_type The source image mime type.
    62556263         */
    6256         return apply_filters( 'image_editor_output_format', array( 'image/heic' => 'image/jpeg' ), $filename, $mime_type );
    6257 }
     6264        return apply_filters( 'image_editor_output_format', $output_format, $filename, $mime_type );
     6265}
Note: See TracChangeset for help on using the changeset viewer.