Changeset 11746
- Timestamp:
- 07/27/2009 06:32:30 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-includes/media.php
r11737 r11746 331 331 * @return mixed WP_Error on failure. String with new destination path. Array of dimensions from {@link image_resize_dimensions()} 332 332 */ 333 function image_resize( $file, $max_w, $max_h, $crop =false, $suffix=null, $dest_path=null, $jpeg_quality=90) {333 function image_resize( $file, $max_w, $max_h, $crop = false, $suffix = null, $dest_path = null, $jpeg_quality = 90 ) { 334 334 335 335 $image = wp_load_image( $file ); … … 337 337 return new WP_Error('error_loading_image', $image); 338 338 339 list($orig_w, $orig_h, $orig_type) = getimagesize( $file ); 339 $size = @getimagesize( $file ); 340 if ( !$size ) 341 return new WP_Error('invalid_image', __('Could not read image size'), $file); 342 list($orig_w, $orig_h, $orig_type) = $size; 343 340 344 $dims = image_resize_dimensions($orig_w, $orig_h, $max_w, $max_h, $crop); 341 if ( !$dims)345 if ( !$dims ) 342 346 return $dims; 343 347 list($dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h) = $dims; … … 372 376 $destfilename = "{$dir}/{$name}-{$suffix}.{$ext}"; 373 377 374 if ( $orig_type == IMAGETYPE_GIF) {375 if ( !imagegif( $newimage, $destfilename ) )378 if ( IMAGETYPE_GIF == $orig_type ) { 379 if ( !imagegif( $newimage, $destfilename ) ) 376 380 return new WP_Error('resize_path_invalid', __( 'Resize path invalid' )); 377 } 378 elseif ( $orig_type == IMAGETYPE_PNG ) { 381 } elseif ( IMAGETYPE_PNG == $orig_type ) { 379 382 if (!imagepng( $newimage, $destfilename ) ) 380 383 return new WP_Error('resize_path_invalid', __( 'Resize path invalid' )); 381 } 382 else { 384 } else { 385 $rotated = false; 386 if ( IMAGETYPE_JPEG == $orig_type ) { 387 // rotate if EXIF 'Orientation' is set 388 $exif = exif_read_data($file, null, true); 389 if ( $exif && isset($exif['IFD0']) && is_array($exif['IFD0']) && isset($exif['IFD0']['Orientation']) ) { 390 if ( 6 == $exif['IFD0']['Orientation'] ) 391 $rotated = rotate_image($newimage, 90); 392 elseif ( 8 == $exif['IFD0']['Orientation'] ) 393 $rotated = rotate_image($newimage, 270); 394 } 395 } 396 383 397 // all other formats are converted to jpg 384 398 $destfilename = "{$dir}/{$name}-{$suffix}.jpg"; 385 if (!imagejpeg( $newimage, $destfilename, apply_filters( 'jpeg_quality', $jpeg_quality, 'image_resize' ) ) ) 399 if ( $rotated ) { 400 $return = imagejpeg( $rotated, $destfilename, apply_filters( 'jpeg_quality', $jpeg_quality, 'image_resize' ) ); 401 imagedestroy($rotated); 402 } else { 403 $return = imagejpeg( $newimage, $destfilename, apply_filters( 'jpeg_quality', $jpeg_quality, 'image_resize' ) ); 404 } 405 406 if ( !$return ) 386 407 return new WP_Error('resize_path_invalid', __( 'Resize path invalid' )); 387 408 } … … 798 819 } 799 820 800 ?> 821 /** 822 * Rotate an image. 823 * 824 * @since 2.9.0 825 * 826 * @param resource $src_img GD image handle of source image. 827 * @param $angle int clockwise angle of rotation, only 90, 180 and 270 are supported. 828 * @param $keep_transparency bool preserve transparency. 829 * @return mixed GD image handle of rotated image or false on error. 830 */ 831 function rotate_image( $src_img, $angle, $keep_transparency = false ) { 832 833 if ( function_exists('imagerotate') ) 834 return imagerotate($src_img, 360 - $angle, 0); // imagerotate() rotates CCW 835 836 if ( 180 == $angle ) 837 return flip_image( $src_img, 'both', $keep_transparency ); 838 839 $width = imagesx( $src_img ); 840 $height = imagesy( $src_img ); 841 842 $dest_img = imagecreatetruecolor( $height, $width ); 843 if ( $keep_transparency ) { 844 imagealphablending($dest_img, false); 845 imagesavealpha($dest_img, true); 846 } 847 848 if ( 90 == $angle ) { 849 for( $x = 0; $x < $width; $x++ ) { 850 for( $y = 0; $y < $height; $y++ ) { 851 if ( !imagecopy($dest_img, $src_img, $height - $y - 1, $x, $x, $y, 1, 1) ) 852 return false; 853 } 854 } 855 } elseif ( 270 == $angle ) { 856 for( $x = 0; $x < $width; $x++ ) { 857 for( $y = 0; $y < $height; $y++ ) { 858 if ( !imagecopy($dest_img, $src_img, $y, $width - $x - 1, $x, $y, 1, 1) ) 859 return false; 860 } 861 } 862 } else { 863 return false; 864 } 865 866 return $dest_img; 867 } 868 869 /** 870 * Flip an image. 871 * 872 * @since 2.9.0 873 * 874 * @param resource $src_img GD image handle of source image. 875 * @param $mode string 'horizontal', 'vertical' or 'both'. 876 * @param $keep_transparency bool preserve transparency. 877 * @return mixed GD image handle of flipped image or false on error. 878 */ 879 function flip_image( $src_img, $mode, $keep_transparency = false ) { 880 881 $width = $src_width = imagesx( $src_img ); 882 $height = $src_height = imagesy( $src_img ); 883 $src_x = $src_y = 0; 884 885 switch ( $mode ) { 886 case 'vertical': 887 $src_y = $height -1; 888 $src_height = -$height; 889 break; 890 case 'horizontal': 891 $src_x = $width -1; 892 $src_width = -$width; 893 break; 894 case 'both': 895 if ( function_exists('imagerotate') ) 896 return imagerotate($src_img, 180, 0); 897 898 $src_x = $width -1; 899 $src_y = $height -1; 900 $src_width = -$width; 901 $src_height = -$height; 902 break; 903 default: 904 return false; 905 } 906 907 $dest_img = imagecreatetruecolor( $width, $height ); 908 if ( $keep_transparency ) { 909 imagealphablending($dest_img, false); 910 imagesavealpha($dest_img, true); 911 } 912 913 if ( imagecopyresampled( $dest_img, $src_img, 0, 0, $src_x, $src_y , $width, $height, $src_width, $src_height ) ) 914 return $dest_img; 915 916 return false; 917 }
Note: See TracChangeset
for help on using the changeset viewer.