WordPress.org

Make WordPress Core

Changeset 22849


Ignore:
Timestamp:
11/26/12 22:40:34 (17 months ago)
Author:
ryan
Message:

More feature detection in WP_Image_Editor_Imagick::test().
Check existence of setIteratorIndex().

Props DH-Shredder, markoheijnen
see #22543

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/class-wp-image-editor-imagick.php

    r22817 r22849  
    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 
    4270            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 
     81            return false; 
     82        } 
    4383 
    4484        return true; 
     
    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        } 
Note: See TracChangeset for help on using the changeset viewer.