WordPress.org

Make WordPress Core

Ticket #22597: 22597.diff

File 22597.diff, 4.4 KB (added by mikeschroder, 5 years ago)
  • wp-admin/includes/image-edit.php

    diff --git wp-admin/includes/image-edit.php wp-admin/includes/image-edit.php
    index 55d5902..a7d6075 100644
    function wp_image_editor($post_id, $msg = false) { 
    4040                <div onclick="imageEdit.crop(<?php echo "$post_id, '$nonce'"; ?>, this)" class="imgedit-crop disabled" title="<?php esc_attr_e( 'Crop' ); ?>"></div><?php
    4141
    4242        // On some setups GD library does not provide imagerotate() - Ticket #11536
    43         if ( function_exists('imagerotate') ) { ?>
     43        if ( wp_image_editor_supports( array( 'methods', array( 'rotate' ) ) ) ) { ?>
    4444                <div class="imgedit-rleft"  onclick="imageEdit.rotate( 90, <?php echo "$post_id, '$nonce'"; ?>, this)" title="<?php esc_attr_e( 'Rotate counter-clockwise' ); ?>"></div>
    4545                <div class="imgedit-rright" onclick="imageEdit.rotate(-90, <?php echo "$post_id, '$nonce'"; ?>, this)" title="<?php esc_attr_e( 'Rotate clockwise' ); ?>"></div>
    4646<?php } else {
    47                 $note_gdlib = esc_attr__('Image rotation is not supported by your web host (function imagerotate() is missing)');
     47                $note_no_rotate = esc_attr__('Image rotation is not supported by your web host.');
    4848?>
    49             <div class="imgedit-rleft disabled"  title="<?php echo $note_gdlib; ?>"></div>
    50             <div class="imgedit-rright disabled" title="<?php echo $note_gdlib; ?>"></div>
     49            <div class="imgedit-rleft disabled"  title="<?php echo $note_no_rotate; ?>"></div>
     50            <div class="imgedit-rright disabled" title="<?php echo $note_no_rotate; ?>"></div>
    5151<?php } ?>
    5252
    5353                <div onclick="imageEdit.flip(1, <?php echo "$post_id, '$nonce'"; ?>, this)" class="imgedit-flipv" title="<?php esc_attr_e( 'Flip vertically' ); ?>"></div>
  • wp-includes/class-wp-image-editor-gd.php

    diff --git wp-includes/class-wp-image-editor-gd.php wp-includes/class-wp-image-editor-gd.php
    index 8a5d846..92dd287 100644
    class WP_Image_Editor_GD extends WP_Image_Editor { 
    3737                if ( ! extension_loaded('gd') || ! function_exists('gd_info') )
    3838                        return false;
    3939
     40                // On some setups GD library does not provide imagerotate() - Ticket #11536
     41                if ( isset( $args['methods'] ) &&
     42                         in_array( 'rotate', $args['methods'] ) &&
     43                         ! function_exists('imagerotate') ){
     44
     45                                return false;
     46                }
     47
    4048                return true;
    4149        }
    4250
  • wp-includes/class-wp-image-editor-imagick.php

    diff --git wp-includes/class-wp-image-editor-imagick.php wp-includes/class-wp-image-editor-imagick.php
    index ad07ae2..d29fefd 100644
    class WP_Image_Editor_Imagick extends WP_Image_Editor { 
    3838         * @return boolean
    3939         */
    4040        public static function test( $args = array() ) {
    41                 if ( ! extension_loaded( 'imagick' ) || ! is_callable( 'Imagick', 'queryFormats' ) )
     41
     42                $required_methods = array(
     43                        'clear',
     44                        'destroy',
     45                        'valid',
     46                        'getimage',
     47                        'writeimage',
     48                        'getimageblob',
     49                        'getimagegeometry',
     50                        'getimageformat',
     51                        'setimageformat',
     52                        'setimagecompression',
     53                        'setimagecompressionquality',
     54                        'setimagepage',
     55                        'scaleimage',
     56                        'cropimage',
     57                        'rotateimage',
     58                        'flipimage',
     59                        'flopimage',
     60                );
     61
     62                // Check for requirements
     63                if ( ! extension_loaded( 'imagick' ) ||
     64                         ! class_exists( 'Imagick' ) ||
     65                         ! is_callable( 'Imagick', 'queryFormats' ) ||
     66                         ! class_exists( 'ImagickPixel' ) ||
     67                         ! defined( 'imagick::COMPRESSION_JPEG' ) ||
     68                         array_diff( $required_methods, get_class_methods( 'Imagick' ) ) ) {
     69
     70                        return false;
     71                }
     72
     73                /**
     74                 * setIteratorIndex is optional unless mime is an animated format.
     75                 * Here, we just say no if a user is attempting to
     76                 * edit a GIF and setIteratorIndex isn't available.
     77                 */
     78                if ( ( ! isset( $args['mime_type'] ) || $args['mime_type'] == 'image/gif' ) &&
     79                         ! method_exists( 'Imagick', 'setIteratorIndex' ) ) {
     80
    4281                        return false;
     82                }
    4383
    4484                return true;
    4585        }
    class WP_Image_Editor_Imagick extends WP_Image_Editor { 
    88128                        if( ! $this->image->valid() )
    89129                                return new WP_Error( 'invalid_image', __('File is not an image.'), $this->file);
    90130
    91                         // Select the first frame to handle animated GIFs properly
    92                         $this->image->setIteratorIndex(0);
     131                        // Select the first frame to handle animated images properly
     132                        if ( is_callable( array( $this->image, 'setIteratorIndex' ) ) )
     133                                $this->image->setIteratorIndex(0);
     134
    93135                        $this->mime_type = $this->get_mime_type( $this->image->getImageFormat() );
    94136                }
    95137                catch ( Exception $e ) {