Drupal - How to find image style URL from within twig template?
The first part is already answered in the linked question, where there is the code how to do this. To answer the second part of the question, you can access the original image in the node object:
{{ file_url(node.field_image.entity.uri.value) }}
One remark about content
:
In a node template the image field in content
is not ready to be rendered. The field contains the configuration how it should be displayed and the field object which contains all raw data. Later this will be put together in the field, image-formatter and image templates. That is the reason you don't find the url you are looking for in content
at this point.
In the node template you can use the fields on the top level of the content array, for example display the image field
{{ content.field_image }}
as configured in the view mode.
Edit:
There is a new filter in the module Twig Tweak. Now you can generate the image style url in twig directly from an uri or url of the original image:
{{ node.field_image.entity.uri.value | image_style('thumbnail') }}
You can get the image style url in a preprocess function and pass it to the node template. (in my case, I needed at the page level, I'm guessing this would still work for node)
Something like this, with "myimagefield" being the machine name for your image field, and "myimagestyle" being the machine name for your style, also make sure you include the Entity\ImageStyle.
use Drupal\image\Entity\ImageStyle;
/**
* Implements hook_preprocess_page().
*/
function mytheme_preprocess_page(&$variables, $hook) {
if ($variables['node']) {
$node = $variables['node'];
if($node->myimagefield[0]){
$cover_image = $node->myimagefield[0]->entity->getFileUri();
$image_url = ImageStyle::load('myimagestyle')->buildUrl($cover_image);
$variables['my_image'] = $image_url;
}
}
}
Install the Twig Tweak Module https://www.drupal.org/project/twig_tweak
And this module Twig Field https://www.drupal.org/project/twig_field_value
If you are using regular image upload field images use this in your node template:
<img src="{{ node.field_regular_image.entity.uri.value | image_style('thumbnail') }} " >
If you are using entity reference image use this:
<img src="{{ file_url(content.field_global_image|field_target_entity.image.entity.uri.value | image_style('thumbnail'))}} " >