function image_style_url

You are here

7 image.module image_style_url($style_name, $path)

Returns the URL for an image derivative given a style and image path.

Parameters

$style_name: The name of the style to be used with this image.

$path: The path to the image.

Return value

The absolute URL where a style image can be downloaded, suitable for use in an <img> tag. Requesting the URL will cause the image to be created.

See also

image_style_deliver()

10 calls to image_style_url()
ImageAdminStylesUnitTest::createSampleImage in modules/image/image.test
Given an image style, generate an image.
ImageAdminStylesUnitTest::testStyleReplacement in modules/image/image.test
Test deleting a style and choosing a replacement style.
ImageDimensionsTestCase::testImageDimensions in modules/image/image.test
Test styled image dimensions cumulatively.
ImageFieldDisplayTestCase::testImageFieldSettings in modules/image/image.test
Tests for image field settings.
ImageFieldDisplayTestCase::_testImageFieldFormatters in modules/image/image.test
Test image formatters on node display.

... See full list

File

modules/image/image.module, line 1013
Exposes global functionality for creating image styles.

Code

function image_style_url($style_name, $path) {
  $uri = image_style_path($style_name, $path);

  // The passed-in $path variable can be either a relative path or a full URI.
  $original_uri = file_uri_scheme($path) ? file_stream_wrapper_uri_normalize($path) : file_build_uri($path);

  // The token query is added even if the 'image_allow_insecure_derivatives'
  // variable is TRUE, so that the emitted links remain valid if it is changed
  // back to the default FALSE.
  $token_query = array(IMAGE_DERIVATIVE_TOKEN => image_style_path_token($style_name, $original_uri));

  // If not using clean URLs, the image derivative callback is only available
  // with the query string. If the file does not exist, use url() to ensure
  // that it is included. Once the file exists it's fine to fall back to the
  // actual file path, this avoids bootstrapping PHP once the files are built.
  if (!variable_get('clean_url') && file_uri_scheme($uri) == 'public' && !file_exists($uri)) {
    $directory_path = file_stream_wrapper_get_instance_by_uri($uri)->getDirectoryPath();
    return url($directory_path . '/' . file_uri_target($uri), array('absolute' => TRUE, 'query' => $token_query));
  }

  $file_url = file_create_url($uri);
  // Append the query string with the token.
  return $file_url . (strpos($file_url, '?') !== FALSE ? '&' : '?') . drupal_http_build_query($token_query);
}

Comments

The parameter $path is actually a uri in the form public://path/to/file

To get a proper uri you can use file_build_uri() or you can find it in the uri column of the file_managed table.

If you don't use a uri and only use a path (e.g. "path/to/file"), you'll receive a php fatal error: Call to a member function getDirectoryPath() on a non-object

thanks for saving my day! :)
** I think this information sould be on the wiki

I always do it with the URI

Note also that this function will not work with an invalid uri. I tried using: $uri = file_build_uri($path); to convert a path to a uri, and in my case the path was a complete path such as /sites/default/files/rest/of/path. file_build_uri simply converted my path to public://sites/default/files/rest/of/path which is invalid for this function. To make it work I removed the sites/default/files part so that the uri becomes public://rest/of/path so that the path part consists of only that part within the public file repository.

Hi,

I have a requirement in my project for 360 degree view of product Image. I am using Version 6 for drupal. I went through Jquery Reel Formatter module but it is still under development for Drupal 6. Could anyone suggest me a module for the same or could anyone suggest me a solution or a customized module if someone has gone through a similar requirement.

Many thanks in advance,
Dharini

The discussion forum is over there. Comments here are for sharing information about the PHP functions documented here.

how can i get image_style_uri?

<?php
str_replace
($base_url.'/sites/default/files/','public://',image_style_url($style,$file->uri));
?>

found this :) image_style_path

The Imagecache External module can do this for you (caching external images).

seems doesn't work with outside images, I"m using storage api for saving images

The changes related to this in Drupal 7 are bad for SEO. Changing image URLs can potentially drop a site's traffic significantly.

Usage of this fuunction

$img_url = $node->field_image['und'][0]['uri'];
<img src="<?php print image_style_url("thumbnail", $img_url); ?>" />

You can change 'thumbnail' to your image style name

thank you, this was exactly what I needed.

I was trying to get my data from $content. Should have peeked inside $node rightaway. You've been a big help.

I also had to replace "field_image" with my image field machine name :)

From: https://drupal.org/drupal-7.20-release-notes

In addition, any code which programmatically generates a link to an image derivative without using the standard image_style_url() API function will no longer work correctly if the image does not already exist in the file system, since the necessary token will not be present in the URL.

You can try something like that if you absolutely need the image to be created

$image_uri      = $node->field_image['und'][0]['uri']; // or any public://my_image
$style          = 'my_style';
$derivative_uri = image_style_path($style, $image_uri);
$success        = file_exists($derivative_uri) || image_style_create_derivative($style, $image_uri, $derivative_uri);

$new_image_url  = file_create_url($derivative_uri);;

I missread the documentation release note, it says "if you *don't* use image_style_url()"
However, I used it in a .tpl and I had to use the workaround above.

I'm trying to use an image style with an image that is NOT stored under a uri directive (eg. public://), but is still on the local server. (eg. A path like /sites/all/modules/my_module/img.jpg.)

However, my image is not being generated (nor any of the directories) and I am getting a page access error when navigating to the generated URL. (eg. my-site[dot]com/sites/default/files/styles/my_image_style/public/sites/all/modules/my_module/img.jpg?itok=[token].)

Can someone verify whether I am using the function correctly?