Make WordPress Core

Changeset 22094

Timestamp:
10/01/2012 08:59:06 PM (12 years ago)
Author:
ryan
Message:

Introduce WP_Image_Editor, WP_Image_Editor_Imagick, and WP_Image_Editor_GD. Abstracts image editing API and adds support for ImageMagick.

Props DH-Shredder, kurtpayne, markoheijnen
see #6821

Location:
trunk
Files:
3 added
6 edited

Legend:

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

    r21808 r22094  
    198198}
    199199
    200 function wp_stream_image($image, $mime_type, $post_id) {
    201     $image = apply_filters('image_save_pre', $image, $post_id);
    202 
    203     switch ( $mime_type ) {
    204         case 'image/jpeg':
    205             header('Content-Type: image/jpeg');
    206             return imagejpeg($image, null, 90);
    207         case 'image/png':
    208             header('Content-Type: image/png');
    209             return imagepng($image);
    210         case 'image/gif':
    211             header('Content-Type: image/gif');
    212             return imagegif($image);
    213         default:
     200/**
     201 * Streams image in WP_Image_Editor to browser.
     202 * Provided for backcompat reasons
     203 *
     204 * @param WP_Image_Editor $image
     205 * @param string $mime_type
     206 * @param int $post_id
     207 * @return boolean
     208 */
     209function wp_stream_image( $image, $mime_type, $post_id ) {
     210   
     211        );
     212
     213       
    214214            return false;
    215     }
    216 }
    217 
    218 function wp_save_image_file($filename, $image, $mime_type, $post_id) {
    219     $image = apply_filters('image_save_pre', $image, $post_id);
    220     $saved = apply_filters('wp_save_image_file', null, $filename, $image, $mime_type, $post_id);
    221     if ( null !== $saved )
    222         return $saved;
    223 
    224     switch ( $mime_type ) {
    225         case 'image/jpeg':
    226             return imagejpeg( $image, $filename, apply_filters( 'jpeg_quality', 90, 'edit_image' ) );
    227         case 'image/png':
    228             return imagepng($image, $filename);
    229         case 'image/gif':
    230             return imagegif($image, $filename);
    231         default:
    232             return false;
     215
     216        return true;
     217    } else {
     218        _deprecated_argument( __FUNCTION__, '3.5', __( '$image needs to be an WP_Image_Editor object' ) );
     219
     220        $image = apply_filters('image_save_pre', $image, $post_id);
     221
     222        switch ( $mime_type ) {
     223            case 'image/jpeg':
     224                header( 'Content-Type: image/jpeg' );
     225                return imagejpeg( $image, null, 90 );
     226            case 'image/png':
     227                header( 'Content-Type: image/png' );
     228                return imagepng( $image );
     229            case 'image/gif':
     230                header( 'Content-Type: image/gif' );
     231                return imagegif( $image );
     232            default:
     233                return false;
     234        }
     235    }
     236}
     237
     238/**
     239 * Saves Image to File
     240 * @TODO: Add mime_type support to WP_Image_Editor
     241 *
     242 * @param string $filename
     243 * @param WP_Image_Editor $image
     244 * @param string $mime_type
     245 * @param int $post_id
     246 * @return boolean
     247 */
     248function wp_save_image_file( $filename, $image, $mime_type, $post_id ) {
     249    if ( $image instanceof WP_Image_Editor ) {
     250        $image = apply_filters('image_editor_save_pre', $image, $post_id);
     251        $saved = apply_filters('wp_save_image_editor_file', null, $filename, $image, $mime_type, $post_id);
     252
     253        if ( null !== $saved )
     254            return $saved;
     255
     256        return $image->save( $filename, $mime_type );
     257    } else {
     258        _deprecated_argument( __FUNCTION__, '3.5', __( '$image needs to be an WP_Image_Editor object' ) );
     259
     260        $image = apply_filters('image_save_pre', $image, $post_id);
     261        $saved = apply_filters('wp_save_image_file', null, $filename, $image, $mime_type, $post_id);
     262
     263        if ( null !== $saved )
     264            return $saved;
     265
     266        switch ( $mime_type ) {
     267            case 'image/jpeg':
     268                return imagejpeg( $image, $filename, apply_filters( 'jpeg_quality', 90, 'edit_image' ) );
     269            case 'image/png':
     270                return imagepng( $image, $filename );
     271            case 'image/gif':
     272                return imagegif( $image, $filename );
     273            default:
     274                return false;
     275        }
    233276    }
    234277}
     
    239282}
    240283
     284
    241285function _rotate_image_resource($img, $angle) {
     286
    242287    if ( function_exists('imagerotate') ) {
    243288        $rotated = imagerotate($img, $angle, 0);
     
    250295}
    251296
     297
     298
     299
     300
     301
     302
     303
     304
     305
     306
    252307function _flip_image_resource($img, $horz, $vert) {
     308
    253309    $w = imagesx($img);
    254310    $h = imagesy($img);
     
    268324}
    269325
     326
     327
     328
     329
     330
     331
     332
     333
     334
     335
     336
     337
    270338function _crop_image_resource($img, $x, $y, $w, $h) {
    271339    $dst = wp_imagecreatetruecolor($w, $h);
     
    279347}
    280348
    281 function image_edit_apply_changes($img, $changes) {
     349/**
     350 * Performs group of changes on Editor specified.
     351 *
     352 * @param WP_Image_Editor $image
     353 * @param type $changes
     354 * @return WP_Image_Editor
     355 */
     356function image_edit_apply_changes( $image, $changes ) {
     357    if ( is_resource( $image ) )
     358        _deprecated_argument( __FUNCTION__, '3.5', __( '$image needs to be an WP_Image_Editor object' ) );
    282359
    283360    if ( !is_array($changes) )
    284         return $img;
     361        return $im;
    285362
    286363    // expand change operations
     
    327404
    328405    // image resource before applying the changes
    329     $img = apply_filters('image_edit_before_change', $img, $changes);
     406    if ( $image instanceof WP_Image_Editor )
     407        $image = apply_filters('wp_image_editor_before_change', $image, $changes);
     408    elseif ( is_resource( $image ) )
     409        $image = apply_filters('image_edit_before_change', $image, $changes);
    330410
    331411    foreach ( $changes as $operation ) {
    332412        switch ( $operation->type ) {
    333413            case 'rotate':
    334                 if ( $operation->angle != 0 )
    335                     $img = _rotate_image_resource($img, $operation->angle);
     414                if ( $operation->angle != 0 ) {
     415                    if ( $image instanceof WP_Image_Editor )
     416                        $image->rotate( $operation->angle );
     417                    else
     418                        $image = _rotate_image_resource( $image, $operation->angle );
     419                }
    336420                break;
    337421            case 'flip':
    338422                if ( $operation->axis != 0 )
    339                     $img = _flip_image_resource($img, ($operation->axis & 1) != 0, ($operation->axis & 2) != 0);
     423                    if ( $image instanceof WP_Image_Editor )
     424                        $image->flip( ($operation->axis & 1) != 0, ($operation->axis & 2) != 0 );
     425                    else
     426                        $image = _flip_image_resource( $image, ( $operation->axis & 1 ) != 0, ( $operation->axis & 2 ) != 0 );
    340427                break;
    341428            case 'crop':
    342429                $sel = $operation->sel;
    343                 $scale = 1 / _image_get_preview_ratio( imagesx($img), imagesy($img) ); // discard preview scaling
    344                 $img = _crop_image_resource($img, $sel->x * $scale, $sel->y * $scale, $sel->w * $scale, $sel->h * $scale);
     430
     431                if ( $image instanceof WP_Image_Editor ) {
     432                    $size = $image->get_size();
     433                    $w = $size['width'];
     434                    $h = $size['height'];
     435
     436                    $scale = 1 / _image_get_preview_ratio( $w, $h ); // discard preview scaling
     437                    $image->crop( $sel->x * $scale, $sel->y * $scale, $sel->w * $scale, $sel->h * $scale );
     438                } else {
     439                    $scale = 1 / _image_get_preview_ratio( imagesx( $image ), imagesy( $image ) ); // discard preview scaling
     440                    $image = _crop_image_resource( $image, $sel->x * $scale, $sel->y * $scale, $sel->w * $scale, $sel->h * $scale );
     441                }
    345442                break;
    346443        }
    347444    }
    348445
    349     return $img;
    350 }
    351 
    352 function stream_preview_image($post_id) {
    353     $post = get_post($post_id);
     446    return $image;
     447}
     448
     449
     450/**
     451 * Streams image in post to browser, along with enqueued changes
     452 * in $_REQUEST['history']
     453 *
     454 * @param int $post_id
     455 * @return boolean
     456 */
     457function stream_preview_image( $post_id ) {
     458    $post = get_post( $post_id );
    354459    @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', WP_MAX_MEMORY_LIMIT ) );
    355     $img = load_image_to_edit( $post_id, $post->post_mime_type, array(400, 400) );
    356 
    357     if ( !is_resource($img) )
    358         return false;
     460
     461    $img = WP_Image_Editor::get_instance( _load_image_to_edit_path( $post_id ) );
     462
     463    if ( is_wp_error( $img ) )
     464        return false;
    359465
    360466    $changes = !empty($_REQUEST['history']) ? json_decode( stripslashes($_REQUEST['history']) ) : null;
    361467    if ( $changes )
    362         $img = image_edit_apply_changes($img, $changes);
     468        $img = image_edit_apply_changes();
    363469
    364470    // scale the image
    365     $w = imagesx($img);
    366     $h = imagesy($img);
    367     $ratio = _image_get_preview_ratio($w, $h);
     471    $size = $img->get_size();
     472    $w = $size['width'];
     473    $h = $size['height'];
     474
     475    $ratio = _image_get_preview_ratio( $w, $h );
    368476    $w2 = $w * $ratio;
    369477    $h2 = $h * $ratio;
    370478
    371     $preview = wp_imagecreatetruecolor($w2, $h2);
    372     imagecopyresampled( $preview, $img, 0, 0, 0, 0, $w2, $h2, $w, $h );
    373     wp_stream_image($preview, $post->post_mime_type, $post_id);
    374 
    375     imagedestroy($preview);
    376     imagedestroy($img);
    377     return true;
     479    if ( is_wp_error( $img->resize( $w2, $h2 ) ) )
     480        return false;
     481
     482    return wp_stream_image( $img, $post->post_mime_type, $post_id );
    378483}
    379484
     
    451556}
    452557
    453 function wp_save_image($post_id) {
     558/**
     559 * Saves image to post along with enqueued changes
     560 * in $_REQUEST['history']
     561 *
     562 * @param int $post_id
     563 * @return \stdClass
     564 */
     565function wp_save_image( $post_id ) {
    454566    $return = new stdClass;
    455567    $success = $delete = $scaled = $nocrop = false;
    456     $post = get_post($post_id);
    457     @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', WP_MAX_MEMORY_LIMIT ) );
    458     $img = load_image_to_edit($post_id, $post->post_mime_type);
    459 
    460     if ( !is_resource($img) ) {
     568    $post = get_post( $post_id );
     569
     570    $img = WP_Image_Editor::get_instance( _load_image_to_edit_path( $post_id, 'full' ) );
     571    if ( !$img ) {
    461572        $return->error = esc_js( __('Unable to create new image.') );
    462573        return $return;
     
    469580
    470581    if ( $scale && $fwidth > 0 && $fheight > 0 ) {
    471         $sX = imagesx($img);
    472         $sY = imagesy($img);
     582        $size = $img->get_size();
     583        $sX = $size['width'];
     584        $sY = $size['height'];
    473585
    474586        // check if it has roughly the same w / h ratio
     
    476588        if ( -0.1 < $diff && $diff < 0.1 ) {
    477589            // scale the full size image
    478             $dst = wp_imagecreatetruecolor($fwidth, $fheight);
    479             if ( imagecopyresampled( $dst, $img, 0, 0, 0, 0, $fwidth, $fheight, $sX, $sY ) ) {
    480                 imagedestroy($img);
    481                 $img = $dst;
     590            if ( $img->resize( $fwidth, $fheight ) )
    482591                $scaled = true;
    483             }
    484592        }
    485593
     
    552660            $backup_sizes[$tag] = array('width' => $meta['width'], 'height' => $meta['height'], 'file' => $path_parts['basename']);
    553661
    554         $success = update_attached_file($post_id, $new_path);
    555 
    556         $meta['file'] = _wp_relative_upload_path($new_path);
    557         $meta['width'] = imagesx($img);
    558         $meta['height'] = imagesy($img);
     662        $success = update_attached_file( $post_id, $new_path );
     663
     664        $meta['file'] = _wp_relative_upload_path( $new_path );
     665
     666        $size = $img->get_size();
     667        $meta['width'] = $size['width'];
     668        $meta['height'] = $size['height'];
    559669
    560670        if ( $success && ('nothumb' == $target || 'all' == $target) ) {
     
    571681    }
    572682
    573     if ( isset($sizes) ) {
     683    if ( isset( $sizes ) ) {
     684        $_sizes = array();
     685
    574686        foreach ( $sizes as $size ) {
    575687            $tag = false;
    576             if ( isset($meta['sizes'][$size]) ) {
     688            if ( isset() ) {
    577689                if ( isset($backup_sizes["$size-orig"]) ) {
    578690                    if ( ( !defined('IMAGE_EDIT_OVERWRITE') || !IMAGE_EDIT_OVERWRITE ) && $backup_sizes["$size-orig"]['file'] != $meta['sizes'][$size]['file'] )
     
    587699
    588700            $crop = $nocrop ? false : get_option("{$size}_crop");
    589             $resized = image_make_intermediate_size($new_path, get_option("{$size}_size_w"), get_option("{$size}_size_h"), $crop );
    590 
    591             if ( $resized )
    592                 $meta['sizes'][$size] = $resized;
    593             else
    594                 unset($meta['sizes'][$size]);
    595         }
    596     }
     701            $_sizes[ $size ] = array( 'width' => get_option("{$size}_size_w"), 'height' => get_option("{$size}_size_h"), 'crop' => $crop );
     702        }
     703
     704        $meta['sizes'] = $img->multi_resize( $_sizes );
     705    }
     706
     707    unset( $img );
    597708
    598709    if ( $success ) {
    599         wp_update_attachment_metadata($post_id, $meta);
     710        wp_update_attachment_metadata();
    600711        update_post_meta( $post_id, '_wp_attachment_backup_sizes', $backup_sizes);
    601712
     
    613724    if ( $delete ) {
    614725        $delpath = apply_filters('wp_delete_file', $new_path);
    615         @unlink($delpath);
    616     }
    617 
    618     imagedestroy($img);
     726        @unlink( $delpath );
     727    }
    619728
    620729    $return->msg = esc_js( __('Image saved') );
  • trunk/wp-admin/includes/image.php

    r21956 r22094  
    2323 * @return string|WP_Error|false New filepath on success, WP_Error or false on failure.
    2424 */
    25 function wp_crop_image( $src, $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs = false, $dst_file = false ) {
    26     if ( is_numeric( $src ) ) { // Handle int as attachment ID
    27         $src_file = get_attached_file( $src );
     25function wp_crop_image( $src, $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs = false, $dst_file = false ) {
     26    if ( is_numeric( $src ) ) { // Handle int as attachment ID
     27        $src_file = get_attached_file( $src );
    2828        if ( ! file_exists( $src_file ) ) {
    2929            // If the file doesn't exist, attempt a url fopen on the src link.
    3030            // This can occur with certain file replication plugins.
    31             $post = get_post( $src );
    32             $image_type = $post->post_mime_type;
    33             $src = load_image_to_edit( $src, $post->post_mime_type, 'full' );
    34         } else {
    35             $size = @getimagesize( $src_file );
    36             $image_type = ( $size ) ? $size['mime'] : '';
    37             $src = wp_load_image( $src_file );
    38         }
    39     } else {
    40         $size = @getimagesize( $src );
    41         $image_type = ( $size ) ? $size['mime'] : '';
    42         $src = wp_load_image( $src );
    43     }
    44 
    45     if ( ! is_resource( $src ) )
    46         return new WP_Error( 'error_loading_image', $src, $src_file );
    47 
    48     $dst = wp_imagecreatetruecolor( $dst_w, $dst_h );
    49 
    50     if ( $src_abs ) {
    51         $src_w -= $src_x;
    52         $src_h -= $src_y;
    53     }
    54 
    55     if ( function_exists( 'imageantialias' ) )
    56         imageantialias( $dst, true );
    57 
    58     imagecopyresampled( $dst, $src, 0, 0, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h );
    59 
    60     imagedestroy( $src ); // Free up memory
     31            $src_file = _load_image_to_edit_path( $src_file, 'full' );
     32        }
     33    }
     34
     35    $editor = WP_Image_Editor::get_instance( $src_file );
     36    $src = $editor->crop( $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs );
     37
     38    if ( is_wp_error( $src ) )
     39        return $src;
    6140
    6241    if ( ! $dst_file )
    6342        $dst_file = str_replace( basename( $src_file ), 'cropped-' . basename( $src_file ), $src_file );
    64 
    65     if ( 'image/png' != $image_type )
    66         $dst_file = preg_replace( '/\\.[^\\.]+$/', '.jpg', $dst_file );
    6743
    6844    // The directory containing the original file may no longer exist when
     
    7248    $dst_file = dirname( $dst_file ) . '/' . wp_unique_filename( dirname( $dst_file ), basename( $dst_file ) );
    7349
    74     if ( 'image/png' == $image_type && imagepng( $dst, $dst_file ) )
    75         return $dst_file;
    76     elseif ( imagejpeg( $dst, $dst_file, apply_filters( 'jpeg_quality', 90, 'wp_crop_image' ) ) )
    77         return $dst_file;
    78     else
    79         return false;
     50    $result = $editor->save( $dst_file );
     51    return $dst_file;
    8052}
    8153
     
    12294        $sizes = apply_filters( 'intermediate_image_sizes_advanced', $sizes );
    12395
    124         foreach ($sizes as $size => $size_data ) {
    125             $resized = image_make_intermediate_size( $file, $size_data['width'], $size_data['height'], $size_data['crop'] );
    126             if ( $resized )
    127                 $metadata['sizes'][$size] = $resized;
    128         }
     96        $editor = WP_Image_Editor::get_instance( $file );
     97        $metadata['sizes'] = $editor->multi_resize( $sizes );
    12998
    13099        // fetch additional metadata from exif/iptc
  • trunk/wp-includes/deprecated.php

    r21996 r22094  
    32073207
    32083208/**
     3209
     3210
     3211
     3212
     3213
     3214
     3215
     3216
     3217
     3218
     3219
     3220
     3221
     3222
     3223
     3224
     3225
     3226
     3227
     3228
     3229
     3230
     3231
     3232
     3233
     3234
     3235
     3236
     3237
     3238
     3239
     3240
     3241
     3242
     3243
     3244
     3245
     3246
     3247
     3248
     3249
     3250
     3251
     3252
     3253
     3254
     3255
     3256
     3257
     3258
     3259
     3260
     3261
     3262
     3263
     3264
     3265
     3266
     3267
     3268
     3269
     3270
     3271
     3272
     3273
     3274
     3275
     3276
     3277
     3278
     3279
     3280
     3281
     3282
     3283
     3284
     3285
    32093286 * Retrieve a single post, based on post ID.
    32103287 *
  • trunk/wp-includes/functions.php

    r22082 r22094  
    12961296 */
    12971297function wp_mkdir_p( $target ) {
     1298
     1299
     1300
     1301
     1302
     1303
     1304
    12981305    // from php.net/mkdir user contributed notes
    12991306    $target = str_replace( '//', '/', $target );
     1307
     1308
     1309
     1310
     1311
    13001312
    13011313    // safe mode fails with a trailing slash under certain PHP versions.
     
    37513763
    37523764/**
     3765
     3766
     3767
     3768
     3769
     3770
     3771
     3772
     3773
     3774
     3775
     3776
     3777
    37533778 * Test if the supplied date is valid for the Gregorian calendar
    37543779 *
  • trunk/wp-includes/media.php

    r22073 r22094  
    237237
    238238/**
    239  * Load an image from a string, if PHP supports it.
    240  *
    241  * @since 2.1.0
    242  *
    243  * @param string $file Filename of the image to load.
    244  * @return resource The resulting image resource on success, Error string on failure.
    245  */
    246 function wp_load_image( $file ) {
    247     if ( is_numeric( $file ) )
    248         $file = get_attached_file( $file );
    249 
    250     if ( ! file_exists( $file ) )
    251         return sprintf(__('File &#8220;%s&#8221; doesn&#8217;t exist?'), $file);
    252 
    253     if ( ! function_exists('imagecreatefromstring') )
    254         return __('The GD image library is not installed.');
    255 
    256     // Set artificially high because GD uses uncompressed images in memory
    257     @ini_set( 'memory_limit', apply_filters( 'image_memory_limit', WP_MAX_MEMORY_LIMIT ) );
    258     $image = imagecreatefromstring( file_get_contents( $file ) );
    259 
    260     if ( !is_resource( $image ) )
    261         return sprintf(__('File &#8220;%s&#8221; is not an image.'), $file);
    262 
    263     return $image;
    264 }
    265 
    266 /**
    267239 * Calculates the new dimensions for a downsampled image.
    268240 *
     
    394366
    395367/**
    396  * Scale down an image to fit a particular size and save a new copy of the image.
    397  *
    398  * The PNG transparency will be preserved using the function, as well as the
    399  * image type. If the file going in is PNG, then the resized image is going to
    400  * be PNG. The only supported image types are PNG, GIF, and JPEG.
    401  *
    402  * Some functionality requires API to exist, so some PHP version may lose out
    403  * support. This is not the fault of WordPress (where functionality is
    404  * downgraded, not actual defects), but of your PHP version.
    405  *
    406  * @since 2.5.0
    407  *
    408  * @param string $file Image file path.
    409  * @param int $max_w Maximum width to resize to.
    410  * @param int $max_h Maximum height to resize to.
    411  * @param bool $crop Optional. Whether to crop image or resize.
    412  * @param string $suffix Optional. File suffix.
    413  * @param string $dest_path Optional. New image file path.
    414  * @param int $jpeg_quality Optional, default is 90. Image quality percentage.
    415  * @return mixed WP_Error on failure. String with new destination path.
    416  */
    417 function image_resize( $file, $max_w, $max_h, $crop = false, $suffix = null, $dest_path = null, $jpeg_quality = 90 ) {
    418 
    419     $image = wp_load_image( $file );
    420     if ( !is_resource( $image ) )
    421         return new WP_Error( 'error_loading_image', $image, $file );
    422 
    423     $size = @getimagesize( $file );
    424     if ( !$size )
    425         return new WP_Error('invalid_image', __('Could not read image size'), $file);
    426     list($orig_w, $orig_h, $orig_type) = $size;
    427 
    428     $dims = image_resize_dimensions($orig_w, $orig_h, $max_w, $max_h, $crop);
    429     if ( !$dims )
    430         return new WP_Error( 'error_getting_dimensions', __('Could not calculate resized image dimensions') );
    431     list($dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h) = $dims;
    432 
    433     $newimage = wp_imagecreatetruecolor( $dst_w, $dst_h );
    434 
    435     imagecopyresampled( $newimage, $image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
    436 
    437     // convert from full colors to index colors, like original PNG.
    438     if ( IMAGETYPE_PNG == $orig_type && function_exists('imageistruecolor') && !imageistruecolor( $image ) )
    439         imagetruecolortopalette( $newimage, false, imagecolorstotal( $image ) );
    440 
    441     // we don't need the original in memory anymore
    442     imagedestroy( $image );
    443 
    444     // $suffix will be appended to the destination filename, just before the extension
    445     if ( !$suffix )
    446         $suffix = "{$dst_w}x{$dst_h}";
    447 
    448     $info = pathinfo($file);
    449     $dir = $info['dirname'];
    450     $ext = $info['extension'];
    451     $name = wp_basename($file, ".$ext");
    452 
    453     if ( !is_null($dest_path) and $_dest_path = realpath($dest_path) )
    454         $dir = $_dest_path;
    455     $destfilename = "{$dir}/{$name}-{$suffix}.{$ext}";
    456 
    457     if ( IMAGETYPE_GIF == $orig_type ) {
    458         if ( !imagegif( $newimage, $destfilename ) )
    459             return new WP_Error('resize_path_invalid', __( 'Resize path invalid' ));
    460     } elseif ( IMAGETYPE_PNG == $orig_type ) {
    461         if ( !imagepng( $newimage, $destfilename ) )
    462             return new WP_Error('resize_path_invalid', __( 'Resize path invalid' ));
    463     } else {
    464         // all other formats are converted to jpg
    465         if ( 'jpg' != $ext && 'jpeg' != $ext )
    466             $destfilename = "{$dir}/{$name}-{$suffix}.jpg";
    467         if ( !imagejpeg( $newimage, $destfilename, apply_filters( 'jpeg_quality', $jpeg_quality, 'image_resize' ) ) )
    468             return new WP_Error('resize_path_invalid', __( 'Resize path invalid' ));
    469     }
    470 
    471     imagedestroy( $newimage );
    472 
    473     // Set correct file permissions
    474     $stat = stat( dirname( $destfilename ));
    475     $perms = $stat['mode'] & 0000666; //same permissions as parent folder, strip off the executable bits
    476     @ chmod( $destfilename, $perms );
    477 
    478     return $destfilename;
    479 }
    480 
    481 /**
    482368 * Resize an image to make a thumbnail or intermediate size.
    483369 *
     
    494380 * @return bool|array False, if no image was created. Metadata array on success.
    495381 */
    496 function image_make_intermediate_size($file, $width, $height, $crop=false) {
     382function image_make_intermediate_size() {
    497383    if ( $width || $height ) {
    498         $resized_file = image_resize($file, $width, $height, $crop);
    499         if ( !is_wp_error($resized_file) && $resized_file && $info = getimagesize($resized_file) ) {
    500             $resized_file = apply_filters('image_make_intermediate_size', $resized_file);
    501             return array(
    502                 'file' => wp_basename( $resized_file ),
    503                 'width' => $info[0],
    504                 'height' => $info[1],
    505             );
     384        $editor = WP_Image_Editor::get_instance( $file );
     385
     386        if ( is_wp_error( $editor->resize( $width, $height, $crop ) ) );
     387            return false;
     388
     389        $resized_file = $editor->save();
     390
     391        if ( ! is_wp_error( $resized_file ) && $resized_file ) {
     392            unset( $resized_file['path'] );
     393            return $resized_file;
    506394        }
    507395    }
     
    1048936/**
    1049937 * Create new GD image resource with transparency support
     938
    1050939 *
    1051940 * @since 2.9.0
  • trunk/wp-settings.php

    r21999 r22094  
    144144require( ABSPATH . WPINC . '/admin-bar.php' );
    145145
     146
     147
     148
     149
    146150// Load multisite-specific files.
    147151if ( is_multisite() ) {
Note: See TracChangeset for help on using the changeset viewer.