Make WordPress Core


Ignore:
Timestamp:
04/06/2012 08:47:24 PM (15 years ago)
Author:
ryan
Message:

Make choosing a header image from the media library play nicely with file replication plugins that do not guarantee images will be retained in the local filesystem.

  • When passing an attachment ID to wp_crop_image(), use load_image_to_edit() to fetch the image via a url fopen when the image does not exist in the filesystem.
  • Move load_image_to_edit() to wp-admin/includes/image.php so that it is always available for admin pages loads.
  • Fallback to the height and width stored in the attachment meta when the image no longer exists in the filesystem.

see #19840

File:
1 edited

Legend:

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

    r19687 r20384  
    4444 * @return string|WP_Error|false New filepath on success, WP_Error or false on failure.
    4545 */
    46 function wp_crop_image( $src_file, $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs = false, $dst_file = false ) {
    47         if ( is_numeric( $src_file ) ) // Handle int as attachment ID
    48                 $src_file = get_attached_file( $src_file );
    49 
    50         $src = wp_load_image( $src_file );
    51 
    52         if ( !is_resource( $src ) )
     46function wp_crop_image( $src, $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs = false, $dst_file = false ) {
     47        if ( is_numeric( $src ) ) { // Handle int as attachment ID
     48                $src_file = get_attached_file( $src );
     49                if ( ! file_exists( $src_file ) ) {
     50                        // If the file doesn't exist, attempt a url fopen on the src link.
     51                        // This can occur with certain file replication plugins.
     52                        $post = get_post( $src );
     53                        $src = load_image_to_edit( $src, $post->post_mime_type, 'full' );
     54                } else {
     55                        $src = wp_load_image( $src_file );
     56                }
     57        } else {
     58                $src = wp_load_image( $src_file );
     59        }
     60
     61        if ( ! is_resource( $src ) )
    5362                return new WP_Error( 'error_loading_image', $src, $src_file );
    5463
    … …  
    6069        }
    6170
    62         if (function_exists('imageantialias'))
     71        if ( function_exists( 'imageantialias' ) )
    6372                imageantialias( $dst, true );
    6473
    … …  
    7180
    7281        $dst_file = preg_replace( '/\\.[^\\.]+$/', '.jpg', $dst_file );
     82
     83        // The directory containing the original file may no longer exist when
     84        // using a replication plugin.
     85        wp_mkdir_p( dirname( $dst_file ) );
    7386
    7487        if ( imagejpeg( $dst, $dst_file, apply_filters( 'jpeg_quality', 90, 'wp_crop_image' ) ) )
    … …  
    340353        return apply_filters('file_is_displayable_image', $result, $path);
    341354}
     355
     356function load_image_to_edit($post_id, $mime_type, $size = 'full') {
     357        $filepath = get_attached_file($post_id);
     358
     359        if ( $filepath && file_exists($filepath) ) {
     360                if ( 'full' != $size && ( $data = image_get_intermediate_size($post_id, $size) ) ) {
     361                        $filepath = apply_filters('load_image_to_edit_filesystempath', path_join( dirname($filepath), $data['file'] ), $post_id, $size);
     362                }
     363        } elseif ( function_exists('fopen') && function_exists('ini_get') && true == ini_get('allow_url_fopen') ) {
     364                $filepath = apply_filters('load_image_to_edit_attachmenturl', wp_get_attachment_url($post_id) , $post_id, $size);
     365        }
     366
     367        $filepath = apply_filters('load_image_to_edit_path', $filepath, $post_id, $size);
     368        if ( empty($filepath) )
     369                return false;
     370
     371        switch ( $mime_type ) {
     372                case 'image/jpeg':
     373                        $image = imagecreatefromjpeg($filepath);
     374                        break;
     375                case 'image/png':
     376                        $image = imagecreatefrompng($filepath);
     377                        break;
     378                case 'image/gif':
     379                        $image = imagecreatefromgif($filepath);
     380                        break;
     381                default:
     382                        $image = false;
     383                        break;
     384        }
     385        if ( is_resource($image) ) {
     386                $image = apply_filters('load_image_to_edit', $image, $post_id, $size);
     387                if ( function_exists('imagealphablending') && function_exists('imagesavealpha') ) {
     388                        imagealphablending($image, false);
     389                        imagesavealpha($image, true);
     390                }
     391        }
     392        return $image;
     393}
Note: See TracChangeset for help on using the changeset viewer.