image_downsize() – Scales an image to fit a particular size (such as ‘thumb’ or ‘medium’).

You appear to be a bot. Output may be restricted

Description

Scales an image to fit a particular size (such as 'thumb' or 'medium').

The URL might be the original image, or it might be a resized version. This function won't create a new resized copy, it will just return an already resized one if it exists. A plugin may use the image_downsize filter to hook into and offer image resizing services for images. The hook must return an array with the same elements that are normally returned from the function.

Usage

$array|false = image_downsize( $id, $size );

Parameters

$id
( int ) required – Attachment ID for image.
$size
( string|int[] ) optional default: medium – Optional. Image size. Accepts any registered image size name, or an array of width and height values in pixels (in that order). Default 'medium'.
$0
( string ) optional default: medium – Image source URL.
$1
( int ) optional default: medium – Image width in pixels.
$2
( int ) optional default: medium – Image height in pixels.
$3
( bool ) optional default: medium – Whether the image is a resized image. }

Returns

array|false { Array of image data, or boolean false if no image is available.

Source

File name: wordpress/wp-includes/media.php
Lines:

1 to 84 of 84
function image_downsize( $id, $size = 'medium' ) {
  $is_image = wp_attachment_is_image( $id );

  
/**
 * Filters whether to preempt the output of image_downsize().
 *
 * Returning a truthy value from the filter will effectively short-circuit
 * down-sizing the image, returning that value instead.
 *
 * @since 2.5.0
 *
 * @param bool|array   $downsize Whether to short-circuit the image downsize.
 * @param int          $id       Attachment ID for image.
 * @param string|int[] $size     Requested image size. Can be any registered image size name, or
 *                               an array of width and height values in pixels (in that order).
 */
  $out = apply_filters( 'image_downsize', false, $id, $size );

  if ( $out ) {
    return $out;
  }

  $img_url          = wp_get_attachment_url( $id );
  $meta             = wp_get_attachment_metadata( $id );
  $width            = 0;
  $height           = 0;
  $is_intermediate  = false;
  $img_url_basename = wp_basename( $img_url );

  /*
	 * If the file isn't an image, attempt to replace its URL with a rendered image from its meta.
	 * Otherwise, a non-image type could be returned.
	 */
  if ( ! $is_image ) {
    if ( ! empty( $meta['sizes']['full'] ) ) {
      $img_url          = str_replace( $img_url_basename, $meta['sizes']['full']['file'], $img_url );
      $img_url_basename = $meta['sizes']['full']['file'];
      $width            = $meta['sizes']['full']['width'];
      $height           = $meta['sizes']['full']['height'];
    } else {
      return false;
    }
  }

  // Try for a new style intermediate size.
  $intermediate = image_get_intermediate_size( $id, $size );

  if ( $intermediate ) {
    $img_url         = str_replace( $img_url_basename, $intermediate['file'], $img_url );
    $width           = $intermediate['width'];
    $height          = $intermediate['height'];
    $is_intermediate = true;
  } elseif ( 'thumbnail' === $size && ! empty( $meta['thumb'] ) && is_string( $meta['thumb'] ) ) {
    // Fall back to the old thumbnail.
    $imagefile = get_attached_file( $id );
    $thumbfile = str_replace( wp_basename( $imagefile ), wp_basename( $meta['thumb'] ), $imagefile );

    if ( file_exists( $thumbfile ) ) {
      $info = wp_getimagesize( $thumbfile );

      if ( $info ) {
        $img_url         = str_replace( $img_url_basename, wp_basename( $thumbfile ), $img_url );
        $width           = $info[0];
        $height          = $info[1];
        $is_intermediate = true;
      }
    }
  }

  if ( ! $width && ! $height && isset( $meta['width'], $meta['height'] ) ) {
    // Any other type: use the real image.
    $width  = $meta['width'];
    $height = $meta['height'];
  }

  if ( $img_url ) {
    // We have the actual image size, but might need to further constrain it if content_width is narrower.
    list( $width, $height ) = image_constrain_size_for_editor( $width, $height, $size );

    return array( $img_url, $width, $height, $is_intermediate );
  }

  return false;
}
 

 View on GitHub View on Trac