diff --git a/wp-admin/includes/image-edit.php b/wp-admin/includes/image-edit.php
index e871ae5..1fe412a 100644
--- a/wp-admin/includes/image-edit.php
+++ b/wp-admin/includes/image-edit.php
@@ -630,7 +630,7 @@ function wp_save_image($post_id) {
 			}
 
 			$crop = $nocrop ? false : get_option("{$size}_crop");
-			$resized = image_make_intermediate_size($new_path, get_option("{$size}_size_w"), get_option("{$size}_size_h"), $crop );
+			$resized = image_make_intermediate_size($new_path, get_option("{$size}_size_w"), get_option("{$size}_size_h"), $crop, $size );
 
 			if ( $resized )
 				$meta['sizes'][$size] = $resized;
diff --git a/wp-admin/includes/image.php b/wp-admin/includes/image.php
index 44329c0..f2671b3 100644
--- a/wp-admin/includes/image.php
+++ b/wp-admin/includes/image.php
@@ -122,7 +122,7 @@ function wp_generate_attachment_metadata( $attachment_id, $file ) {
 		$sizes = apply_filters( 'intermediate_image_sizes_advanced', $sizes );
 
 		foreach ($sizes as $size => $size_data ) {
-			$resized = image_make_intermediate_size( $file, $size_data['width'], $size_data['height'], $size_data['crop'] );
+			$resized = image_make_intermediate_size( $file, $size_data['width'], $size_data['height'], $size_data['crop'], $size );
 			if ( $resized )
 				$metadata['sizes'][$size] = $resized;
 		}
diff --git a/wp-includes/media.php b/wp-includes/media.php
index 5358b6e..67964b0 100644
--- a/wp-includes/media.php
+++ b/wp-includes/media.php
@@ -402,7 +402,7 @@ function image_resize_dimensions($orig_w, $orig_h, $dest_w, $dest_h, $crop = fal
  * @param int $jpeg_quality Optional, default is 90. Image quality percentage.
  * @return mixed WP_Error on failure. String with new destination path.
  */
-function image_resize( $file, $max_w, $max_h, $crop = false, $suffix = null, $dest_path = null, $jpeg_quality = 90 ) {
+function image_resize( $file, $max_w, $max_h, $crop = false, $suffix = null, $dest_path = null, $jpeg_quality = 90, $size_name = '' ) {
 
 	$image = wp_load_image( $file );
 	if ( !is_resource( $image ) )
@@ -426,6 +426,10 @@ function image_resize( $file, $max_w, $max_h, $crop = false, $suffix = null, $de
 	if ( IMAGETYPE_PNG == $orig_type && function_exists('imageistruecolor') && !imageistruecolor( $image ) )
 		imagetruecolortopalette( $newimage, false, imagecolorstotal( $image ) );
 
+	// apply size-specific filters to the image
+	if ( $size_name )
+		$newimage = apply_filters( "image_resize_{$size_name}", $newimage );
+
 	// we don't need the original in memory anymore
 	imagedestroy( $image );
 
@@ -433,6 +437,10 @@ function image_resize( $file, $max_w, $max_h, $crop = false, $suffix = null, $de
 	if ( !$suffix )
 		$suffix = "{$dst_w}x{$dst_h}";
 
+	// apply size-specific filters to the image suffix
+	if ( $size_name )
+		$suffix = apply_filters( "image_resize_suffix_{$size_name}", $suffix );
+
 	$info = pathinfo($file);
 	$dir = $info['dirname'];
 	$ext = $info['extension'];
@@ -477,11 +485,12 @@ function image_resize( $file, $max_w, $max_h, $crop = false, $suffix = null, $de
  * @param int $width Image width.
  * @param int $height Image height.
  * @param bool $crop Optional, default is false. Whether to crop image to specified height and width or resize.
+ * @param string $size Optional, default is ''. Size of image.
  * @return bool|array False, if no image was created. Metadata array on success.
  */
-function image_make_intermediate_size($file, $width, $height, $crop=false) {
+function image_make_intermediate_size($file, $width, $height, $crop=false, $size = '' ) {
 	if ( $width || $height ) {
-		$resized_file = image_resize($file, $width, $height, $crop);
+		$resized_file = image_resize($file, $width, $height, $crop, null, null, 90, $size);
 		if ( !is_wp_error($resized_file) && $resized_file && $info = getimagesize($resized_file) ) {
 			$resized_file = apply_filters('image_make_intermediate_size', $resized_file);
 			return array(
