WordPress.org

Make WordPress Core

Changeset 20384


Ignore:
Timestamp:
04/06/2012 08:47:24 PM (6 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

Location:
trunk/wp-admin
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/custom-header.php

    r20358 r20384  
    701701        }
    702702
    703         list($width, $height, $type, $attr) = getimagesize( $file );
     703        if ( file_exists( $file ) ) {
     704            list( $width, $height, $type, $attr ) = getimagesize( $file );
     705        } else {
     706            $data = wp_get_attachment_metadata( $id );
     707            $height = $data[ 'height' ];
     708            $width = $data[ 'width' ];
     709            unset( $data );
     710        }
    704711
    705712        $max_width = 0;
     
    717724        {
    718725            // Add the meta-data
    719             wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) );
     726            if ( file_exists( $file ) )
     727                wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) );
    720728            update_post_meta( $id, '_wp_attachment_is_custom_header', get_option('stylesheet' ) );
    721729
     
    725733        } elseif ( $width > $max_width ) {
    726734            $oitar = $width / $max_width;
    727             $image = wp_crop_image($file, 0, 0, $width, $height, $max_width, $height / $oitar, false, str_replace(basename($file), 'midsize-'.basename($file), $file));
     735            $image = wp_crop_image($id, 0, 0, $width, $height, $max_width, $height / $oitar, false, str_replace(basename($file), 'midsize-'.basename($file), $file));
    728736            if ( is_wp_error( $image ) )
    729737                wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) );
  • trunk/wp-admin/includes/image-edit.php

    r19871 r20384  
    196196    </div>
    197197<?php
    198 }
    199 
    200 function load_image_to_edit($post_id, $mime_type, $size = 'full') {
    201     $filepath = get_attached_file($post_id);
    202 
    203     if ( $filepath && file_exists($filepath) ) {
    204         if ( 'full' != $size && ( $data = image_get_intermediate_size($post_id, $size) ) ) {
    205             $filepath = apply_filters('load_image_to_edit_filesystempath', path_join( dirname($filepath), $data['file'] ), $post_id, $size);
    206         }
    207     } elseif ( function_exists('fopen') && function_exists('ini_get') && true == ini_get('allow_url_fopen') ) {
    208         $filepath = apply_filters('load_image_to_edit_attachmenturl', wp_get_attachment_url($post_id) , $post_id, $size);
    209     }
    210 
    211     $filepath = apply_filters('load_image_to_edit_path', $filepath, $post_id, $size);
    212     if ( empty($filepath) )
    213         return false;
    214 
    215     switch ( $mime_type ) {
    216         case 'image/jpeg':
    217             $image = imagecreatefromjpeg($filepath);
    218             break;
    219         case 'image/png':
    220             $image = imagecreatefrompng($filepath);
    221             break;
    222         case 'image/gif':
    223             $image = imagecreatefromgif($filepath);
    224             break;
    225         default:
    226             $image = false;
    227             break;
    228     }
    229     if ( is_resource($image) ) {
    230         $image = apply_filters('load_image_to_edit', $image, $post_id, $size);
    231         if ( function_exists('imagealphablending') && function_exists('imagesavealpha') ) {
    232             imagealphablending($image, false);
    233             imagesavealpha($image, true);
    234         }
    235     }
    236     return $image;
    237198}
    238199
  • 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.