Make WordPress Core

Changeset 22510


Ignore:
Timestamp:
11/09/2012 07:38:54 PM (14 years ago)
Author:
ryan
Message:

WP_Image_Editor improvements.

  • Make test() and supports_mime_type() static.
  • Add required_methods argument to get_instance(). Allows requesting an implementation that has certain methods/capabilities.
  • Whitespace cleanup

Props markoheijnen
see #6821

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/includes/image-edit.php

    r22192 r22510  
    238238/**
    239239 * Saves Image to File
    240  * @TODO: Add mime_type support to WP_Image_Editor
    241240 *
    242241 * @param string $filename
  • trunk/wp-includes/class-wp-image-editor-gd.php

    r22463 r22510  
    2929         *
    3030         * @since 3.5.0
    31          * @access protected
     31         * @access public
    3232         *
    3333         * @return boolean
    3434         */
    35         public function test() {
     35        public static function test( $args = null ) {
    3636                if ( ! extension_loaded('gd') || ! function_exists('gd_info') )
    3737                        return false;
    … …  
    100100         * @return boolean
    101101         */
    102         public function supports_mime_type( $mime_type ) {
     102        public static function supports_mime_type( $mime_type ) {
    103103                $allowed_mime_types = array( 'image/gif', 'image/png', 'image/jpeg' );
    104104
  • trunk/wp-includes/class-wp-image-editor-imagick.php

    r22463 r22510  
    3030         *
    3131         * @since 3.5.0
    32          * @access protected
     32         * @access public
    3333         *
    3434         * @return boolean
    3535         */
    36         public function test() {
     36        public static function test( $args = null ) {
    3737                if ( ! extension_loaded( 'imagick' ) )
    3838                        return false;
    … …  
    144144         * @return boolean
    145145         */
    146         public function supports_mime_type( $mime_type ) {
     146        public static function supports_mime_type( $mime_type ) {
    147147                if ( ! $mime_type )
    148148                        return false;
  • trunk/wp-includes/class-wp-image-editor.php

    r22243 r22510  
    1818        protected $default_mime_type = 'image/jpeg';
    1919        protected $quality = 90;
    20         private static $implementation;
    2120
    2221        protected function __construct( $filename ) {
    … …  
    3130         *
    3231         * @param string $path Path to File to Load
     32         * @param array $required_methods Methods to require in implementation
    3333         * @return WP_Image_Editor|WP_Error|boolean
    3434         */
    35         public final static function get_instance( $path = null ) {
    36                 $implementation = apply_filters( 'image_editor_class', self::choose_implementation(), $path );
     35        public final static function get_instance( $path = null, $required_methods = null ) {
     36                $implementation = apply_filters( 'wp_image_editor_class', self::choose_implementation( $required_methods ), $path );
    3737
    3838                if ( $implementation ) {
    … …  
    4040                        $loaded = $editor->load();
    4141
    42                         if ( is_wp_error ( $loaded ) )
     42                        if ( is_wp_error( $loaded ) )
    4343                                return $loaded;
    4444
    … …  
    5555         * @access private
    5656         *
     57         * @param $required_methods Array String array of all methods required for implementation returned.
     58         *
    5759         * @return string|bool Class name for the first editor that claims to support the request. False if no editor claims to support the request.
    5860         */
    59         private final static function choose_implementation() {
    60 
    61                 if ( null === self::$implementation ) {
    62                         $request_order = apply_filters( 'wp_editors', array( 'imagick', 'gd' ) );
    63 
    64                         // Loop over each editor on each request looking for one which will serve this request's needs
    65                         foreach ( $request_order as $editor ) {
    66                                 $class = 'WP_Image_Editor_' . $editor;
    67 
    68                                 // Check to see if this editor is a possibility, calls the editor statically
    69                                 if ( ! call_user_func( array( $class, 'test' ) ) )
    70                                         continue;
    71 
    72                                 self::$implementation = $class;
    73                                 break;
    74                         }
    75                 }
    76                 return self::$implementation;
    77         }
    78 
    79         abstract public function test(); // returns bool
     61        private final static function choose_implementation( $required_methods = null ) {
     62                $request_order = apply_filters( 'wp_image_editors',
     63                        array( 'WP_Image_Editor_Imagick', 'WP_Image_Editor_GD' ) );
     64
     65                if ( ! $required_methods )
     66                        $required_methods = apply_filters( 'wp_image_editor_default_methods',
     67                                array( 'resize', 'multi_resize', 'crop', 'rotate', 'flip', 'stream' ) );
     68
     69                // Loop over each editor on each request looking for one which will serve this request's needs
     70                foreach ( $request_order as $editor ) {
     71                        // Check to see if this editor is a possibility, calls the editor statically
     72                        if ( ! call_user_func( array( $editor, 'test' ) ) )
     73                                continue;
     74
     75                        // Make sure that all methods are supported by editor.
     76                        if ( array_diff( $required_methods, get_class_methods( $editor ) ) )
     77                                continue;
     78
     79                        return $editor;
     80                }
     81                return false;
     82        }
     83
    8084        abstract protected function load(); // returns bool|WP_Error
    81         abstract public function supports_mime_type( $mime_type ); // returns bool
    82         abstract public function resize( $max_w, $max_h, $crop = false );
    83         abstract public function multi_resize( $sizes );
    84         abstract public function crop( $src_x, $src_y, $src_w, $src_h, $dst_w = null, $dst_h = null, $src_abs = false );
    85         abstract public function rotate( $angle );
    86         abstract public function flip( $horz, $vert );
    8785        abstract public function save( $destfilename = null, $mime_type = null );
    88         abstract public function stream( $mime_type = null );
     86
     87        /**
     88         * Implement all of the below to support natively used functions:
     89         *
     90         * public function resize( $max_w, $max_h, $crop = false )
     91         * public function multi_resize( $sizes )
     92         * public function crop( $src_x, $src_y, $src_w, $src_h, $dst_w = null, $dst_h = null, $src_abs = false )
     93         * public function rotate( $angle )
     94         * public function flip( $horz, $vert )
     95         * public function stream( $mime_type = null )
     96         */
     97
     98        /**
     99         * Checks to see if current environment supports the editor chosen.
     100         * Must be overridden in a sub-class.
     101         *
     102         * @since 3.5.0
     103         * @access public
     104         * @abstract
     105         *
     106         * @param $args array
     107         * @return boolean
     108         */
     109        public static function test( $args = null ) {
     110                return false;
     111        }
     112
     113        /**
     114         * Checks to see if editor supports mime-type specified
     115         * Must be overridden in a sub-class.
     116         *
     117         * @since 3.5.0
     118         * @access public
     119         * @abstract
     120         *
     121         * @param string $mime_type
     122         * @return boolean
     123         */
     124        public static function supports_mime_type( $mime_type ) {
     125                return false;
     126        }
    89127
    90128        /**
    … …  
    259297                $result = call_user_func_array( $function, $arguments );
    260298
    261                 if( $result && $stream ) {
     299                if ( $result && $stream ) {
    262300                        $contents = ob_get_contents();
    263301
    264302                        $fp = fopen( $dst_file, 'w' );
    265303
    266                         if( ! $fp )
     304                        if ( ! $fp )
    267305                                return false;
    268306
    … …  
    271309                }
    272310
    273                 if( $stream ) {
     311                if ( $stream ) {
    274312                        ob_end_clean();
    275313                }
    … …  
    296334
    297335                foreach( $extensions as $_extension ) {
    298                         if( preg_match("/{$extension}/i", $_extension ) ) {
    299                                 return $mime_types[ $_extension ];
     336                        if ( preg_match( "/{$extension}/i", $_extension ) ) {
     337                                return $mime_types[$_extension];
    300338                        }
    301339                }
Note: See TracChangeset for help on using the changeset viewer.