WordPress at a glance

image_downsize() WP 1.0

Scale 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.

✈ 1 time = 0.001024s = very slow | 50000 times = 6.16s = fast | PHP 7.0.8, WP 4.6
Hooks from the function
Return

Array/false. Array of image data, or boolean false if no image is available.

  • $0 (string)
    Image source URL.

  • $1 (int)
    Image width in pixels.

  • $2 (int)
    Image height in pixels.

  • $3 (true/false)
    Whether the image is a resized image.

Usage

image_downsize( $id, $size );
$id(int) (required)
Attachment ID for image.
$size(string/int[])
Image size to scale to. Accepts any valid image size name, or an array of width and height values in pixels (in that order).
Default: 'medium'

Changelog

Since 2.5.0 Introduced.

Code of image downsize: wp-includes/media.php WP 5.4.2

<?php
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 array|string $size     Requested size of image. Image size name, or array of width
	 *                               and height values (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 ) {
		// Fall back to the old thumbnail.
		$thumb_file = wp_get_attachment_thumb_file( $id );
		$info       = null;

		if ( $thumb_file ) {
			$info = @getimagesize( $thumb_file );
		}

		if ( $thumb_file && $info ) {
			$img_url         = str_replace( $img_url_basename, wp_basename( $thumb_file ), $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;
}

Related Functions

From tag: Thumbnail (images)

More from category: Images

No comments
        Log In . Register