/** * Scale an image to fit a particular size (such as 'thumb' or 'medium'). * * Array with image url, width, height, and whether is intermediate size, in * that order is returned on success is returned. $is_intermediate is true if * $url is a resized image, false if it is the original. * * 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 returned in the function. The first element being the URL * to the new image that was resized. * * @since 0.0.1 * * @param int $id Attachment ID for image. * @param array|string $size Optional. Image size to scale to. Accepts a registered image size * or flat array of height and width values. Default 'medium'. * @return false|array False on failure, array on success. */ function image_downsize($id, $size = 'medium') { if (!hq_attachment_is_image($id)) { return false; } /** * Filter whether to preempt the output of image_downsize(). * * Passing a truthy value to the filter will effectively short-circuit * down-sizing the image, returning that value as output instead. * * @since 0.0.1 * * @param bool $downsize Whether to short-circuit the image downsize. Default false. * @param int $id Attachment ID for image. * @param array|string $size Size of image, either array or string. Default 'medium'. */ if ($out = apply_filters('image_downsize', false, $id, $size)) { return $out; } $img_url = hq_get_attachment_url($id); $meta = hq_get_attachment_metadata($id); $width = $height = 0; $is_intermediate = false; $img_url_basename = hq_basename($img_url); // try for a new style intermediate size if ($intermediate = image_get_intermediate_size($id, $size)) { $img_url = str_replace($img_url_basename, $intermediate['file'], $img_url); $width = $intermediate['width']; $height = $intermediate['height']; $is_intermediate = true; } elseif ($size == 'thumbnail') { // fall back to the old thumbnail if (($thumb_file = hq_get_attachment_thumb_file($id)) && ($info = getimagesize($thumb_file))) { $img_url = str_replace($img_url_basename, hq_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; }
/** * Retrieve URL for an attachment thumbnail. * * @since 0.0.1 * * @param int $post_id Optional. Attachment ID. Default 0. * @return string|false False on failure. Thumbnail URL on success. */ function hq_get_attachment_thumb_url($post_id = 0) { $post_id = (int) $post_id; if (!($post = get_post($post_id))) { return false; } if (!($url = hq_get_attachment_url($post->ID))) { return false; } $sized = image_downsize($post_id, 'thumbnail'); if ($sized) { return $sized[0]; } if (!($thumb = hq_get_attachment_thumb_file($post->ID))) { return false; } $url = str_replace(basename($url), basename($thumb), $url); /** * Filter the attachment thumbnail URL. * * @since 0.0.1 * * @param string $url URL for the attachment thumbnail. * @param int $post_id Attachment ID. */ return apply_filters('hq_get_attachment_thumb_url', $url, $post->ID); }