From 7fce97f64d7e7b65a85627882fa10e30610d435d Mon Sep 17 00:00:00 2001 From: Dewey Bushaw Date: Mon, 18 Feb 2013 15:42:07 -0800 Subject: [PATCH 1/2] Moved the DB query check into file_exists so that we are not constantly hitting the DB when the image already exists. Also added $quality attribute for ImageMagick version. --- resize.php | 646 +++++++++++++++++++++++++---------------------------- 1 file changed, 307 insertions(+), 339 deletions(-) diff --git a/resize.php b/resize.php index fe9cd9d..dfcdfeb 100644 --- a/resize.php +++ b/resize.php @@ -15,322 +15,297 @@ * Both functions produce the exact same results when successful. * Images are saved to the Wordpress uploads directory, just like images uploaded through the Media Library. * - * Copyright 2012 Matthew Ruddy (http://rivaslider.com) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License, version 2, as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Copyright 2012 Matthew Ruddy (http://rivaslider.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * @author Matthew Ruddy (http://rivaslider.com) * @return array An array containing the resized image URL, width, height and file type. */ if ( isset( $wp_version ) && version_compare( $wp_version, '3.5' ) >= 0 ) { - function matthewruddy_image_resize( $url, $width = NULL, $height = NULL, $crop = true, $retina = false ) { - - global $wpdb; - - if ( empty( $url ) ) - return new WP_Error( 'no_image_url', __( 'No image URL has been entered.' ), $url ); - - // Get default size from database - $width = $width ?: get_option( 'thumbnail_size_w' ); - $height = $height ?: get_option( 'thumbnail_size_h' ); - - // Allow for different retina sizes - $retina = $retina ? ( $retina === true ? 2 : $retina ) : 1; + function matthewruddy_image_resize( $url, $width = NULL, $height = NULL, $crop = true, $retina = false, $quality = false ) { + global $wpdb; + if ( empty( $url ) ) return new WP_Error( 'no_image_url', __( 'No image URL has been entered.' ), $url ); + + // Get default size from database + $width = $width ?: get_option( 'thumbnail_size_w' ); + $height = $height ?: get_option( 'thumbnail_size_h' ); - /* - * Bail if this image isn't in the Media Library. - * We only want to resize Media Library images, so we can be sure they get deleted correctly when appropriate. - */ - $query = $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE guid='%s'", $url ); - $get_attachment = $wpdb->get_results( $query ); - if ( !$get_attachment ) - return array( 'url' => $url, 'width' => $width, 'height' => $height ); - - // Get the image file path - $file_path = parse_url( $url ); - $file_path = $_SERVER['DOCUMENT_ROOT'] . $file_path['path']; - - // Check for Multisite - if ( is_multisite() ) { - global $blog_id; - $blog_details = get_blog_details( $blog_id ); - $file_path = str_replace( $blog_details->path . 'files/', '/wp-content/blogs.dir/'. $blog_id .'/files/', $file_path ); - } - - // Destination width and height variables - $dest_width = $width * $retina; - $dest_height = $height * $retina; - - // File name suffix (appended to original file name) - $suffix = "{$dest_width}x{$dest_height}"; - - // Some additional info about the image - $info = pathinfo( $file_path ); - $dir = $info['dirname']; - $ext = $info['extension']; - $name = wp_basename( $file_path, ".$ext" ); - - // Suffix applied to filename - $suffix = "{$dest_width}x{$dest_height}"; - - // Get the destination file name - $dest_file_name = "{$dir}/{$name}-{$suffix}.{$ext}"; - - if ( !file_exists( $dest_file_name ) ) { - - // Load Wordpress Image Editor - $editor = wp_get_image_editor( $file_path ); - if ( is_wp_error( $editor ) ) - return array( 'url' => $url, 'width' => $width, 'height' => $height ); - - // Get the original image size - $size = $editor->get_size(); - $orig_width = $size['width']; - $orig_height = $size['height']; - - $src_x = $src_y = 0; - $src_w = $orig_width; - $src_h = $orig_height; - - if ( $crop ) { - - $cmp_x = $orig_width / $dest_width; - $cmp_y = $orig_height / $dest_height; - - // Calculate x or y coordinate, and width or height of source - if ( $cmp_x > $cmp_y ) { - $src_w = round( $orig_width / $cmp_x * $cmp_y ); - $src_x = round( ( $orig_width - ( $orig_width / $cmp_x * $cmp_y ) ) / 2 ); - } - else if ( $cmp_y > $cmp_x ) { - $src_h = round( $orig_height / $cmp_y * $cmp_x ); - $src_y = round( ( $orig_height - ( $orig_height / $cmp_y * $cmp_x ) ) / 2 ); - } - - } - - // Time to crop the image! - $editor->crop( $src_x, $src_y, $src_w, $src_h, $dest_width, $dest_height ); - - // Now let's save the image - $saved = $editor->save( $dest_file_name ); - - // Get resized image information - $resized_url = str_replace( basename( $url ), basename( $saved['path'] ), $url ); - $resized_width = $saved['width']; - $resized_height = $saved['height']; - $resized_type = $saved['mime-type']; - - // Add the resized dimensions to original image metadata (so we can delete our resized images when the original image is delete from the Media Library) - $metadata = wp_get_attachment_metadata( $get_attachment[0]->ID ); - if ( isset( $metadata['image_meta'] ) ) { - $metadata['image_meta']['resized_images'][] = $resized_width .'x'. $resized_height; - wp_update_attachment_metadata( $get_attachment[0]->ID, $metadata ); - } - - // Create the image array - $image_array = array( - 'url' => $resized_url, - 'width' => $resized_width, - 'height' => $resized_height, - 'type' => $resized_type - ); - - } - else { - $image_array = array( - 'url' => str_replace( basename( $url ), basename( $dest_file_name ), $url ), - 'width' => $dest_height, - 'height' => $dest_height, - 'type' => $ext - ); - } - - // Return image array - return $image_array; - - } + // Allow for different retina sizes + $retina = $retina ? ( $retina === true ? 2 : $retina ) : 1; + + // Get the image file path + $file_path = parse_url( $url ); + $file_path = $_SERVER['DOCUMENT_ROOT'] . $file_path['path']; + + // Check for Multisite + if ( is_multisite() ) { + global $blog_id; + $blog_details = get_blog_details( $blog_id ); + $file_path = str_replace( $blog_details->path . 'files/', '/wp-content/blogs.dir/'. $blog_id .'/files/', $file_path ); + } + // Destination width and height variables + $dest_width = $width * $retina; + $dest_height = $height * $retina; + + // File name suffix (appended to original file name) + $suffix = "{$dest_width}x{$dest_height}"; + + // Some additional info about the image + $info = pathinfo( $file_path ); + $dir = $info['dirname']; + $ext = $info['extension']; + $name = wp_basename( $file_path, ".$ext" ); + + // Suffix applied to filename + $suffix = "{$dest_width}x{$dest_height}"; + + // Get the destination file name + $dest_file_name = "{$dir}/{$name}-{$suffix}.{$ext}"; + if ( !file_exists( $dest_file_name ) ) { + /* + * Bail if this image isn't in the Media Library. + * We only want to resize Media Library images, so we can be sure they get deleted correctly when appropriate. + */ + $query = $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE guid='%s'", $url ); + $get_attachment = $wpdb->get_results( $query ); + if ( !$get_attachment ) return array( 'url' => $url, 'width' => $width, 'height' => $height ); + + // Load Wordpress Image Editor + $editor = wp_get_image_editor( $file_path ); + if ( is_wp_error( $editor ) ) + return array( 'url' => $url, 'width' => $width, 'height' => $height ); + + // Get the original image size + $size = $editor->get_size(); + $orig_width = $size['width']; + $orig_height = $size['height']; + + $src_x = $src_y = 0; + $src_w = $orig_width; + $src_h = $orig_height; + + if ( $crop ) { + $cmp_x = $orig_width / $dest_width; + $cmp_y = $orig_height / $dest_height; + // Calculate x or y coordinate, and width or height of source + if ( $cmp_x > $cmp_y ) { + $src_w = round( $orig_width / $cmp_x * $cmp_y ); + $src_x = round( ( $orig_width - ( $orig_width / $cmp_x * $cmp_y ) ) / 2 ); + } + else if ( $cmp_y > $cmp_x ) { + $src_h = round( $orig_height / $cmp_y * $cmp_x ); + $src_y = round( ( $orig_height - ( $orig_height / $cmp_y * $cmp_x ) ) / 2 ); + } + } + + // Time to crop the image! + $editor->crop( $src_x, $src_y, $src_w, $src_h, $dest_width, $dest_height ); + + // Set the Quality + if( $quality ) $editor->set_quality( $quality ); + + // Now let's save the image + $saved = $editor->save( $dest_file_name ); + + // Get resized image information + $resized_url = str_replace( basename( $url ), basename( $saved['path'] ), $url ); + $resized_width = $saved['width']; + $resized_height = $saved['height']; + $resized_type = $saved['mime-type']; + + // Add the resized dimensions to original image metadata (so we can delete our resized images when the original image is delete from the Media Library) + $metadata = wp_get_attachment_metadata( $get_attachment[0]->ID ); + if ( isset( $metadata['image_meta'] ) ) { + $metadata['image_meta']['resized_images'][] = $resized_width .'x'. $resized_height; + wp_update_attachment_metadata( $get_attachment[0]->ID, $metadata ); + } + + // Create the image array + $image_array = array( + 'url' => $resized_url, + 'width' => $resized_width, + 'height' => $resized_height, + 'type' => $resized_type + ); + } + else{ + $image_array = array( + 'url' => str_replace( basename( $url ), basename( $dest_file_name ), $url ), + 'width' => $dest_height, + 'height' => $dest_height, + 'type' => $ext + ); + } + // Return image array + return $image_array; + } } else { - function matthewruddy_image_resize( $url, $width = NULL, $height = NULL, $crop = true, $retina = false ) { - - global $wpdb; - - if ( empty( $url ) ) - return new WP_Error( 'no_image_url', __( 'No image URL has been entered.' ), $url ); - - // Bail if GD Library doesn't exist - if ( !extension_loaded('gd') || !function_exists('gd_info') ) - return array( 'url' => $url, 'width' => $width, 'height' => $height ); - - // Get default size from database - $width = $width ?: get_option( 'thumbnail_size_w' ); - $height = $height ?: get_option( 'thumbnail_size_h' ); - - // Allow for different retina sizes - $retina = $retina ? ( $retina === true ? 2 : $retina ) : 1; + function matthewruddy_image_resize( $url, $width = NULL, $height = NULL, $crop = true, $retina = false ) { + global $wpdb; + if ( empty( $url ) ) return new WP_Error( 'no_image_url', __( 'No image URL has been entered.' ), $url ); - /* - * Bail if this image isn't in the Media Library either. - * We only want to resize Media Library images, so we can be sure they get deleted correctly when appropriate. - */ - $query = $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE guid='%s'", $url ); - $get_attachment = $wpdb->get_results( $query ); - if ( !$get_attachment ) - return array( 'url' => $url, 'width' => $width, 'height' => $height ); - - // Destination width and height variables - $dest_width = $width * $retina; - $dest_height = $height * $retina; - - // Get image file path - $file_path = parse_url( $url ); - $file_path = $_SERVER['DOCUMENT_ROOT'] . $file_path['path']; - - // Check for Multisite - if ( is_multisite() ) { - global $blog_id; - $blog_details = get_blog_details( $blog_id ); - $file_path = str_replace( $blog_details->path . 'files/', '/wp-content/blogs.dir/'. $blog_id .'/files/', $file_path ); - } - - // Some additional info about the image - $info = pathinfo( $file_path ); - $dir = $info['dirname']; - $ext = $info['extension']; - $name = wp_basename( $file_path, ".$ext" ); - - // Suffix applied to filename - $suffix = "{$dest_width}x{$dest_height}"; - - // Get the destination file name - $dest_file_name = "{$dir}/{$name}-{$suffix}.{$ext}"; - - // No need to resize & create a new image if it already exists! - if ( !file_exists( $dest_file_name ) ) { - - $image = wp_load_image( $file_path ); - if ( !is_resource( $image ) ) - return new WP_Error( 'error_loading_image_as_resource', $image, $file_path ); - - // Get the current image dimensions and type - $size = @getimagesize( $file_path ); - if ( !$size ) - return new WP_Error( 'file_path_getimagesize_failed', __( 'Failed to get $file_path information using "@getimagesize".', 'rivasliderpro'), $file_path ); - list( $orig_width, $orig_height, $orig_type ) = $size; - - // Create new image - $new_image = wp_imagecreatetruecolor( $dest_width, $dest_height ); - - // Do some proportional cropping if enabled - if ( $crop ) { - - $src_x = $src_y = 0; - $src_w = $orig_width; - $src_h = $orig_height; - - $cmp_x = $orig_width / $dest_width; - $cmp_y = $orig_height / $dest_height; - - // Calculate x or y coordinate, and width or height of source - if ( $cmp_x > $cmp_y ) { - $src_w = round( $orig_width / $cmp_x * $cmp_y ); - $src_x = round( ( $orig_width - ( $orig_width / $cmp_x * $cmp_y ) ) / 2 ); - } - else if ( $cmp_y > $cmp_x ) { - $src_h = round( $orig_height / $cmp_y * $cmp_x ); - $src_y = round( ( $orig_height - ( $orig_height / $cmp_y * $cmp_x ) ) / 2 ); - } - - // Create the resampled image - imagecopyresampled( $new_image, $image, 0, 0, $src_x, $src_y, $dest_width, $dest_height, $src_w, $src_h ); - - } - else - imagecopyresampled( $new_image, $image, 0, 0, 0, 0, $dest_width, $dest_height, $orig_width, $orig_height ); - - // Convert from full colors to index colors, like original PNG. - if ( IMAGETYPE_PNG == $orig_type && function_exists('imageistruecolor') && !imageistruecolor( $image ) ) - imagetruecolortopalette( $new_image, false, imagecolorstotal( $image ) ); - - // Remove the original image from memory (no longer needed) - imagedestroy( $image ); - - // Check the image is the correct file type - if ( IMAGETYPE_GIF == $orig_type ) { - if ( !imagegif( $new_image, $dest_file_name ) ) - return new WP_Error( 'resize_path_invalid', __( 'Resize path invalid (GIF)' ) ); - } - elseif ( IMAGETYPE_PNG == $orig_type ) { - if ( !imagepng( $new_image, $dest_file_name ) ) - return new WP_Error( 'resize_path_invalid', __( 'Resize path invalid (PNG).' ) ); - } - else { - - // All other formats are converted to jpg - if ( 'jpg' != $ext && 'jpeg' != $ext ) - $dest_file_name = "{$dir}/{$name}-{$suffix}.jpg"; - if ( !imagejpeg( $new_image, $dest_file_name, apply_filters( 'resize_jpeg_quality', 90 ) ) ) - return new WP_Error( 'resize_path_invalid', __( 'Resize path invalid (JPG).' ) ); - - } - - // Remove new image from memory (no longer needed as well) - imagedestroy( $new_image ); - - // Set correct file permissions - $stat = stat( dirname( $dest_file_name )); - $perms = $stat['mode'] & 0000666; - @chmod( $dest_file_name, $perms ); - - // Get some information about the resized image - $new_size = @getimagesize( $dest_file_name ); - if ( !$new_size ) - return new WP_Error( 'resize_path_getimagesize_failed', __( 'Failed to get $dest_file_name (resized image) info via @getimagesize' ), $dest_file_name ); - list( $resized_width, $resized_height, $resized_type ) = $new_size; - - // Get the new image URL - $resized_url = str_replace( basename( $url ), basename( $dest_file_name ), $url ); - - // Add the resized dimensions to original image metadata (so we can delete our resized images when the original image is delete from the Media Library) - $metadata = wp_get_attachment_metadata( $get_attachment[0]->ID ); - if ( isset( $metadata['image_meta'] ) ) { - $metadata['image_meta']['resized_images'][] = $resized_width .'x'. $resized_height; - wp_update_attachment_metadata( $get_attachment[0]->ID, $metadata ); - } - - // Return array with resized image information - $image_array = array( - 'url' => $resized_url, - 'width' => $resized_width, - 'height' => $resized_height, - 'type' => $resized_type - ); - - } - else { - $image_array = array( - 'url' => str_replace( basename( $url ), basename( $dest_file_name ), $url ), - 'width' => $dest_height, - 'height' => $dest_height, - 'type' => $ext - ); - } - - return $image_array; - - } + // Bail if GD Library doesn't exist + if ( !extension_loaded('gd') || !function_exists('gd_info') ) + return array( 'url' => $url, 'width' => $width, 'height' => $height ); + + // Get default size from database + $width = $width ?: get_option( 'thumbnail_size_w' ); + $height = $height ?: get_option( 'thumbnail_size_h' ); + + // Allow for different retina sizes + $retina = $retina ? ( $retina === true ? 2 : $retina ) : 1; + + // Destination width and height variables + $dest_width = $width * $retina; + $dest_height = $height * $retina; + + // Get image file path + $file_path = parse_url( $url ); + $file_path = $_SERVER['DOCUMENT_ROOT'] . $file_path['path']; + + // Check for Multisite + if ( is_multisite() ) { + global $blog_id; + $blog_details = get_blog_details( $blog_id ); + $file_path = str_replace( $blog_details->path . 'files/', '/wp-content/blogs.dir/'. $blog_id .'/files/', $file_path ); + } + + // Some additional info about the image + $info = pathinfo( $file_path ); + $dir = $info['dirname']; + $ext = $info['extension']; + $name = wp_basename( $file_path, ".$ext" ); + + // Suffix applied to filename + $suffix = "{$dest_width}x{$dest_height}"; + + // Get the destination file name + $dest_file_name = "{$dir}/{$name}-{$suffix}.{$ext}"; + + // No need to resize & create a new image if it already exists! + if ( !file_exists( $dest_file_name ) ) { + /* + * Bail if this image isn't in the Media Library either. + * We only want to resize Media Library images, so we can be sure they get deleted correctly when appropriate. + */ + $query = $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE guid='%s'", $url ); + $get_attachment = $wpdb->get_results( $query ); + if ( !$get_attachment ) return array( 'url' => $url, 'width' => $width, 'height' => $height ); + + $image = wp_load_image( $file_path ); + if ( !is_resource( $image ) ) return new WP_Error( 'error_loading_image_as_resource', $image, $file_path ); + + // Get the current image dimensions and type + $size = @getimagesize( $file_path ); + if ( !$size ) return new WP_Error( 'file_path_getimagesize_failed', __( 'Failed to get $file_path information using "@getimagesize".', 'rivasliderpro'), $file_path ); + list( $orig_width, $orig_height, $orig_type ) = $size; + + // Create new image + $new_image = wp_imagecreatetruecolor( $dest_width, $dest_height ); + + // Do some proportional cropping if enabled + if ( $crop ) { + $src_x = $src_y = 0; + $src_w = $orig_width; + $src_h = $orig_height; + + $cmp_x = $orig_width / $dest_width; + $cmp_y = $orig_height / $dest_height; + + // Calculate x or y coordinate, and width or height of source + if ( $cmp_x > $cmp_y ) { + $src_w = round( $orig_width / $cmp_x * $cmp_y ); + $src_x = round( ( $orig_width - ( $orig_width / $cmp_x * $cmp_y ) ) / 2 ); + } + else if ( $cmp_y > $cmp_x ) { + $src_h = round( $orig_height / $cmp_y * $cmp_x ); + $src_y = round( ( $orig_height - ( $orig_height / $cmp_y * $cmp_x ) ) / 2 ); + } + + // Create the resampled image + imagecopyresampled( $new_image, $image, 0, 0, $src_x, $src_y, $dest_width, $dest_height, $src_w, $src_h ); + } + else imagecopyresampled( $new_image, $image, 0, 0, 0, 0, $dest_width, $dest_height, $orig_width, $orig_height ); + + // Convert from full colors to index colors, like original PNG. + if ( IMAGETYPE_PNG == $orig_type && function_exists('imageistruecolor') && !imageistruecolor( $image ) ) + imagetruecolortopalette( $new_image, false, imagecolorstotal( $image ) ); + + // Remove the original image from memory (no longer needed) + imagedestroy( $image ); + + // Check the image is the correct file type + if ( IMAGETYPE_GIF == $orig_type ) { + if ( !imagegif( $new_image, $dest_file_name ) ) + return new WP_Error( 'resize_path_invalid', __( 'Resize path invalid (GIF)' ) ); + } + elseif ( IMAGETYPE_PNG == $orig_type ) { + if ( !imagepng( $new_image, $dest_file_name ) ) + return new WP_Error( 'resize_path_invalid', __( 'Resize path invalid (PNG).' ) ); + } + else { + // All other formats are converted to jpg + if ( 'jpg' != $ext && 'jpeg' != $ext ) + $dest_file_name = "{$dir}/{$name}-{$suffix}.jpg"; + if ( !imagejpeg( $new_image, $dest_file_name, apply_filters( 'resize_jpeg_quality', 90 ) ) ) + return new WP_Error( 'resize_path_invalid', __( 'Resize path invalid (JPG).' ) ); + } + + // Remove new image from memory (no longer needed as well) + imagedestroy( $new_image ); + + // Set correct file permissions + $stat = stat( dirname( $dest_file_name )); + $perms = $stat['mode'] & 0000666; + @chmod( $dest_file_name, $perms ); + + // Get some information about the resized image + $new_size = @getimagesize( $dest_file_name ); + if ( !$new_size ) + return new WP_Error( 'resize_path_getimagesize_failed', __( 'Failed to get $dest_file_name (resized image) info via @getimagesize' ), $dest_file_name ); + list( $resized_width, $resized_height, $resized_type ) = $new_size; + + // Get the new image URL + $resized_url = str_replace( basename( $url ), basename( $dest_file_name ), $url ); + + // Add the resized dimensions to original image metadata (so we can delete our resized images when the original image is delete from the Media Library) + $metadata = wp_get_attachment_metadata( $get_attachment[0]->ID ); + if ( isset( $metadata['image_meta'] ) ) { + $metadata['image_meta']['resized_images'][] = $resized_width .'x'. $resized_height; + wp_update_attachment_metadata( $get_attachment[0]->ID, $metadata ); + } + + // Return array with resized image information + $image_array = array( + 'url' => $resized_url, + 'width' => $resized_width, + 'height' => $resized_height, + 'type' => $resized_type + ); + } + else { + $image_array = array( + 'url' => str_replace( basename( $url ), basename( $dest_file_name ), $url ), + 'width' => $dest_height, + 'height' => $dest_height, + 'type' => $ext + ); + } + return $image_array; + } } /** @@ -338,35 +313,28 @@ function matthewruddy_image_resize( $url, $width = NULL, $height = NULL, $crop = * * @author Matthew Ruddy */ -add_action( 'delete_attachment', 'matthewruddy_delete_resized_images' ); -function matthewruddy_delete_resized_images( $post_id ) { - - // Get attachment image metadata - $metadata = wp_get_attachment_metadata( $post_id ); - if ( !$metadata ) - return; - - // Do some bailing if we cannot continue - if ( !isset( $metadata['file'] ) || !isset( $metadata['image_meta']['resized_images'] ) ) - return; - $pathinfo = pathinfo( $metadata['file'] ); - $resized_images = $metadata['image_meta']['resized_images']; - - // Get Wordpress uploads directory (and bail if it doesn't exist) - $wp_upload_dir = wp_upload_dir(); - $upload_dir = $wp_upload_dir['basedir']; - if ( !is_dir( $upload_dir ) ) - return; - - // Delete the resized images - foreach ( $resized_images as $dims ) { - - // Get the resized images filename - $file = $upload_dir .'/'. $pathinfo['dirname'] .'/'. $pathinfo['filename'] .'-'. $dims .'.'. $pathinfo['extension']; - - // Delete the resized image - @unlink( $file ); - - } - -} + add_action( 'delete_attachment', 'matthewruddy_delete_resized_images' ); + function matthewruddy_delete_resized_images( $post_id ) { + // Get attachment image metadata + $metadata = wp_get_attachment_metadata( $post_id ); + if ( !$metadata ) return; + + // Do some bailing if we cannot continue + if ( !isset( $metadata['file'] ) || !isset( $metadata['image_meta']['resized_images'] ) ) return; + $pathinfo = pathinfo( $metadata['file'] ); + $resized_images = $metadata['image_meta']['resized_images']; + + // Get Wordpress uploads directory (and bail if it doesn't exist) + $wp_upload_dir = wp_upload_dir(); + $upload_dir = $wp_upload_dir['basedir']; + if ( !is_dir( $upload_dir ) ) return; + + // Delete the resized images + foreach ( $resized_images as $dims ) { + // Get the resized images filename + $file = $upload_dir .'/'. $pathinfo['dirname'] .'/'. $pathinfo['filename'] .'-'. $dims .'.'. $pathinfo['extension']; + + // Delete the resized image + @unlink( $file ); + } + } From 1ed6508ebe09a0228f775422dfaea6aba0f08823 Mon Sep 17 00:00:00 2001 From: Dewey Bushaw Date: Tue, 26 Feb 2013 12:56:27 -0800 Subject: [PATCH 2/2] Added in Positional Cropping (e.g. '0,100' or t, tr, tl, b, br, bl, l, r) --- resize.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/resize.php b/resize.php index dfcdfeb..eb4dee1 100644 --- a/resize.php +++ b/resize.php @@ -108,6 +108,17 @@ function matthewruddy_image_resize( $url, $width = NULL, $height = NULL, $crop = $src_h = round( $orig_height / $cmp_y * $cmp_x ); $src_y = round( ( $orig_height - ( $orig_height / $cmp_y * $cmp_x ) ) / 2 ); } + // positional cropping! + if( strpos($crop,',') > 0 ) { + $crop = explode(',',$crop); + $src_x = $crop[0]; + $src_y = $crop[1]; + }elseif( $crop !== true ) { + if (strpos ($crop, 't') !== false) $src_y = 0; + if (strpos ($crop, 'b') !== false) $src_y = $orig_height - $src_h; + if (strpos ($crop, 'l') !== false) $src_x = 0; + if (strpos ($crop, 'r') !== false) $src_x = $orig_width - $src_w; + } } // Time to crop the image!