WordPress.org

Make WordPress Core

Ticket #5312: 5312.diff

File 5312.diff, 11.1 KB (added by DD32, 7 years ago)

image.php cleanup

  • wp-admin/includes/image.php

     
    11<?php 
     2/** 
     3 * File contains all the administration image manipulation functions. 
     4 * 
     5 * @package WordPress 
     6 */ 
    27 
    3 function get_udims( $width, $height) { 
    4         if ( $height <= 96 && $width <= 128 ) 
    5                 return array( $width, $height); 
    6         elseif ( $width / $height > 4 / 3 ) 
    7                 return array( 128, (int) ($height / $width * 128 )); 
    8         else 
    9                 return array( (int) ($width / $height * 96 ), 96 ); 
    10 } 
     8/** 
     9 * wp_create_thumbnail() - Create a thumbnail from an Image given a maximum side size. 
     10 * 
     11 * @package WordPress 
     12 * @param       mixed   $file   Filename of the original image, Or attachment id 
     13 * @param       int             $max_side       Maximum length of a single side for the thumbnail 
     14 * @return      string                  Thumbnail path on success, Error string on failure 
     15 * 
     16 * This function can handle most image file formats which PHP supports. 
     17 * If PHP does not have the functionality to save in a file of the same format, the thumbnail will be created as a jpeg. 
     18 */ 
     19function wp_create_thumbnail( $file, $max_side, $depreciated = '' ) { 
     20        if ( ctype_digit( $file ) ) // Handle int as attachment ID 
     21                $file = get_attached_file( $file ); 
    1122 
    12 function wp_create_thumbnail( $file, $max_side, $effect = '' ) { 
     23        $image = wp_load_image( $file ); 
     24         
     25        if ( !is_resource( $image ) ) 
     26                return $image; 
    1327 
    14                 // 1 = GIF, 2 = JPEG, 3 = PNG 
     28        list($sourceImageWidth, $sourceImageHeight, $sourceImageType) = getimagesize( $file ); 
    1529 
    16         if ( file_exists( $file ) ) { 
    17                 $type = getimagesize( $file ); 
     30        if ( function_exists( 'imageantialias' )) 
     31                imageantialias( $image, true ); 
    1832 
    19                 // if the associated function doesn't exist - then it's not 
    20                 // handle. duh. i hope. 
     33        list($image_new_width, $image_new_height) = wp_shrink_dimensions( $sourceImageWidth, $sourceImageHeight, $max_side, $max_side); 
    2134 
    22                 if (!function_exists( 'imagegif' ) && $type[2] == 1 ) { 
    23                         $error = __( 'Filetype not supported. Thumbnail not created.' ); 
    24                 } 
    25                 elseif (!function_exists( 'imagejpeg' ) && $type[2] == 2 ) { 
    26                         $error = __( 'Filetype not supported. Thumbnail not created.' ); 
    27                 } 
    28                 elseif (!function_exists( 'imagepng' ) && $type[2] == 3 ) { 
    29                         $error = __( 'Filetype not supported. Thumbnail not created.' ); 
    30                 } else { 
     35        $thumbnail = imagecreatetruecolor( $image_new_width, $image_new_height); 
     36        @ imagecopyresampled( $thumbnail, $image, 0, 0, 0, 0, $image_new_width, $image_new_height, $sourceImageWidth, $sourceImageHeight ); 
    3137 
    32                         // create the initial copy from the original file 
    33                         if ( $type[2] == 1 ) { 
    34                                 $image = imagecreatefromgif( $file ); 
    35                         } 
    36                         elseif ( $type[2] == 2 ) { 
    37                                 $image = imagecreatefromjpeg( $file ); 
    38                         } 
    39                         elseif ( $type[2] == 3 ) { 
    40                                 $image = imagecreatefrompng( $file ); 
    41                         } 
     38        imagedestroy( $image ); // Free up memory  
    4239 
    43                         if ( function_exists( 'imageantialias' )) 
    44                                 imageantialias( $image, TRUE ); 
     40        // If no filters change the filename, we'll do a default transformation. 
     41        if ( basename( $file ) == $thumb = apply_filters( 'thumbnail_filename', basename( $file ) ) ) 
     42                $thumb = preg_replace( '!(\.[^.]+)?$!', '.thumbnail$1', basename( $file ), 1 ); 
    4543 
    46                         $image_attr = getimagesize( $file ); 
     44        $thumbpath = str_replace( basename( $file ), $thumb, $file ); 
    4745 
    48                         // figure out the longest side 
     46        switch( $sourceImageType ){ 
     47                default: // We'll create a Jpeg if we cant use its native file format 
     48                        $thumb = preg_replace( '/\\.[^\\.]+$/', '.jpg', $thumb ); //Change file extension to Jpg 
     49                case IMAGETYPE_JPEG: 
     50                        if (!imagejpeg( $thumbnail, $thumbpath ) ) 
     51                                return __( 'Thumbnail path invalid' ); 
     52                        break; 
     53                case IMAGETYPE_GIF: 
     54                        if (!imagegif( $thumbnail, $thumbpath ) ) 
     55                                return __( 'Thumbnail path invalid' ); 
     56                        break; 
     57                case IMAGETYPE_PNG: 
     58                        if (!imagepng( $thumbnail, $thumbpath ) ) 
     59                                return __( 'Thumbnail path invalid' ); 
     60                        break; 
     61        } 
    4962 
    50                         if ( $image_attr[0] > $image_attr[1] ) { 
    51                                 $image_width = $image_attr[0]; 
    52                                 $image_height = $image_attr[1]; 
    53                                 $image_new_width = $max_side; 
     63        imagedestroy( $thumbnail ); // Free up memory  
     64         
     65        // Set correct file permissions  
     66        $stat = stat( dirname( $thumbpath ));  
     67        $perms = $stat['mode'] & 0000666; //same permissions as parent folder, strip off the executable bits 
     68        @ chmod( $thumbpath, $perms );  
    5469 
    55                                 $image_ratio = $image_width / $image_new_width; 
    56                                 $image_new_height = $image_height / $image_ratio; 
    57                                 //width is > height 
    58                         } else { 
    59                                 $image_width = $image_attr[0]; 
    60                                 $image_height = $image_attr[1]; 
    61                                 $image_new_height = $max_side; 
    62  
    63                                 $image_ratio = $image_height / $image_new_height; 
    64                                 $image_new_width = $image_width / $image_ratio; 
    65                                 //height > width 
    66                         } 
    67  
    68                         $thumbnail = imagecreatetruecolor( $image_new_width, $image_new_height); 
    69                         @ imagecopyresampled( $thumbnail, $image, 0, 0, 0, 0, $image_new_width, $image_new_height, $image_attr[0], $image_attr[1] ); 
    70  
    71                         // If no filters change the filename, we'll do a default transformation. 
    72                         if ( basename( $file ) == $thumb = apply_filters( 'thumbnail_filename', basename( $file ) ) ) 
    73                                 $thumb = preg_replace( '!(\.[^.]+)?$!', '.thumbnail' . '$1', basename( $file ), 1 ); 
    74  
    75                         $thumbpath = str_replace( basename( $file ), $thumb, $file ); 
    76  
    77                         // move the thumbnail to its final destination 
    78                         if ( $type[2] == 1 ) { 
    79                                 if (!imagegif( $thumbnail, $thumbpath ) ) { 
    80                                         $error = __( "Thumbnail path invalid" ); 
    81                                 } 
    82                         } 
    83                         elseif ( $type[2] == 2 ) { 
    84                                 if (!imagejpeg( $thumbnail, $thumbpath ) ) { 
    85                                         $error = __( "Thumbnail path invalid" ); 
    86                                 } 
    87                         } 
    88                         elseif ( $type[2] == 3 ) { 
    89                                 if (!imagepng( $thumbnail, $thumbpath ) ) { 
    90                                         $error = __( "Thumbnail path invalid" ); 
    91                                 } 
    92                         } 
    93  
    94                 } 
    95         } else { 
    96                 $error = __( 'File not found' ); 
    97         } 
    98  
    99         if (!empty ( $error ) ) { 
    100                 return $error; 
    101         } else { 
    102                 return apply_filters( 'wp_create_thumbnail', $thumbpath ); 
    103         } 
     70        return apply_filters( 'wp_create_thumbnail', $thumbpath ); 
    10471} 
    10572 
     73/** 
     74 * wp_crop_image() - Crop an Image to a given size. 
     75 * 
     76 * @package WordPress 
     77 * @internal Missing Long Description 
     78 * @param       int     $src_file       The source file 
     79 * @param       int     $src_x          The start x position to crop from 
     80 * @param       int     $src_y          The start y position to crop from 
     81 * @param       int     $src_w          The width to crop 
     82 * @param       int     $src_h          The height to crop 
     83 * @param       int     $dst_w          The destination width 
     84 * @param       int     $dst_h          The destination height 
     85 * @param       int     $src_abs        If the source crop points are absolute 
     86 * @param       int     $dst_file       The destination file to write to 
     87 * @return      string                  New filepath on success, String error message on failure 
     88 * 
     89 */ 
    10690function wp_crop_image( $src_file, $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs = false, $dst_file = false ) { 
    10791        if ( ctype_digit( $src_file ) ) // Handle int as attachment ID 
    10892                $src_file = get_attached_file( $src_file ); 
     
    123107                imageantialias( $dst, true ); 
    124108 
    125109        imagecopyresampled( $dst, $src, 0, 0, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h ); 
     110         
     111        imagedestroy( $src ); // Free up memory  
    126112 
    127         if ( !$dst_file ) 
    128                 $dst_file = str_replace( basename( $src_file ), 'cropped-'.basename( $src_file ), $src_file ); 
     113        if ( ! $dst_file ) 
     114                $dst_file = str_replace( basename( $src_file ), 'cropped-' . basename( $src_file ), $src_file ); 
    129115 
    130116        $dst_file = preg_replace( '/\\.[^\\.]+$/', '.jpg', $dst_file ); 
    131117 
     
    135121                return false; 
    136122} 
    137123 
     124/** 
     125 * wp_generate_attachment_metadata() - Generate post Image attachment Metadata 
     126 * 
     127 * @package WordPress 
     128 * @internal Missing Long Description 
     129 * @param       int             $attachment_id  Attachment Id to process 
     130 * @param       string  $file   Filepath of the Attached image 
     131 * @return      mixed                   Metadata for attachment 
     132 * 
     133 */ 
    138134function wp_generate_attachment_metadata( $attachment_id, $file ) { 
    139135        $attachment = get_post( $attachment_id ); 
    140136 
    141137        $metadata = array(); 
    142138        if ( preg_match('!^image/!', get_post_mime_type( $attachment )) ) { 
    143                 $imagesize = getimagesize($file); 
    144                 $metadata['width'] = $imagesize['0']; 
    145                 $metadata['height'] = $imagesize['1']; 
    146                 list($uwidth, $uheight) = get_udims($metadata['width'], $metadata['height']); 
     139                $imagesize = getimagesize( $file ); 
     140                $metadata['width'] = $imagesize[0]; 
     141                $metadata['height'] = $imagesize[1]; 
     142                list($uwidth, $uheight) = wp_shrink_dimensions($metadata['width'], $metadata['height']); 
    147143                $metadata['hwstring_small'] = "height='$uheight' width='$uwidth'"; 
    148144                $metadata['file'] = $file; 
    149145 
     
    160156        return apply_filters( 'wp_generate_attachment_metadata', $metadata ); 
    161157} 
    162158 
     159/** 
     160 * wp_load_image() - Load an image which PHP Supports. 
     161 * 
     162 * @package WordPress 
     163 * @internal Missing Long Description 
     164 * @param       string  $file   Filename of the image to load 
     165 * @return      resource                The resulting image resource on success, Error string on failure. 
     166 * 
     167 */ 
    163168function wp_load_image( $file ) { 
    164169        if ( ctype_digit( $file ) ) 
    165170                $file = get_attached_file( $file ); 
    166171 
    167         if ( !file_exists( $file ) ) 
     172        if ( ! file_exists( $file ) ) 
    168173                return sprintf(__("File '%s' doesn't exist?"), $file); 
    169174 
    170175        if ( ! function_exists('imagecreatefromstring') ) 
    171176                return __('The GD image library is not installed.'); 
    172177 
    173         $contents = file_get_contents( $file ); 
     178        $image = @imagecreatefromstring( @file_get_contents( $file ) ); 
    174179 
    175         $image = imagecreatefromstring( $contents ); 
    176  
    177180        if ( !is_resource( $image ) ) 
    178181                return sprintf(__("File '%s' is not an image."), $file); 
    179182 
    180183        return $image; 
    181184} 
    182185 
     186/** 
     187 * get_udims() - Calculated the new dimentions for downsampled images 
     188 * 
     189 * @package WordPress 
     190 * @internal Missing Description 
     191 * @see wp_shrink_dimensions() 
     192 * @param       int             $width  Current width of the image 
     193 * @param       int     $height Current height of the image 
     194 * @return      mixed                   Array(height,width) of shrunk dimensions. 
     195 * 
     196 */ 
     197function get_udims( $width, $height) { 
     198        return wp_shrink_dimensions( $width, $height ); 
     199} 
     200/** 
     201 * wp_shrink_dimensions() - Calculates the new dimentions for a downsampled image. 
     202 * 
     203 * @package WordPress 
     204 * @internal Missing Long Description 
     205 * @param       int             $width  Current width of the image 
     206 * @param       int     $height Current height of the image 
     207 * @param       int             $wmax   Maximum wanted width 
     208 * @param       int             $hmax   Maximum wanted height 
     209 * @return      mixed                   Array(height,width) of shrunk dimensions. 
     210 * 
     211 */ 
    183212function wp_shrink_dimensions( $width, $height, $wmax = 128, $hmax = 96 ) { 
    184         if ( $height <= $hmax && $width <= $wmax ) 
     213        if ( $height <= $hmax && $width <= $wmax ){ 
     214                //Image is smaller than max 
    185215                return array( $width, $height); 
    186         elseif ( $width / $height > $wmax / $hmax ) 
     216        } elseif ( $width / $height > $wmax / $hmax ) { 
     217                //Image Width will be greatest 
    187218                return array( $wmax, (int) ($height / $width * $wmax )); 
    188         else 
     219        } else { 
     220                //Image Height will be greatest 
    189221                return array( (int) ($width / $height * $hmax ), $hmax ); 
     222        } 
    190223} 
    191224 
    192225?> 
  • wp-includes/compat.php

     
    147147        } 
    148148} 
    149149 
     150// Added in PHP 4.3.0? 
     151if (!defined('IMAGETYPE_GIF')) 
     152    define('IMAGETYPE_GIF', 1); 
     153 
     154if (!defined('IMAGETYPE_JPEG')) 
     155    define('IMAGETYPE_JPEG', 2); 
     156 
     157if (!defined('IMAGETYPE_PNG')) 
     158    define('IMAGETYPE_PNG', 3); 
     159 
     160 
    150161?>