Drupal 8 - 在树枝或预处理文件中获取图像宽度/高度/alt/等..

Drupal 8 - Get the image width / height / alt / etc.. in a twig or preprocess file

我正在尝试获取预处理文件中图像的宽度和高度。

我设法生成了具有在管理员 media/styles 中定义的样式的图像,但我无法渲染生成图像的宽度 and/or 高度(有些人会说我应该只是在树枝文件中对其进行硬编码,但我实际上有兴趣学习如何获取稍后需要的元素:))

这是我用来获取特定内容类型的图片的方法: 假设我的字段的机器名称是 "field_image" 并且我的内容类型是 "article";

if (!empty($node->field_image->entity->getFileUri())) {
  $style = ImageStyle::load('medium');
  $image = $node->field_image->entity;
  $variables['image'] = [
    'src' => $style->buildUrl($image->getFileUri())
  ];
}

之后,我需要在node--article.html.twig中做的就是:

<img src="{{ image.src }}" />

但是我也想获取width和height属性。我该怎么做?

if ($node = \Drupal::routeMatch()->getParameter('node')) {
    if ($node->hasField('field_image')) {
        $imageField = $node->field_image;
        $properties = $imageField->getProperties();
    }
}

$properties 将保存您要求的属性数组。 $imageField 是 Drupal\image\Plugin\Field\FieldType\ImageItem class 的实例。您可以在此处阅读文档 https://api.drupal.org/api/drupal/core%21modules%21image%21src%21Plugin%21Field%21FieldType%21ImageItem.php/class/ImageItem/8.2.x

这是我找到的最简单的解决方案

if ($node = \Drupal::routeMatch()->getParameter('node')) {
    if ($node->hasField('field_image')) {
        //get first image on multi value field
        $image = $node->field_image[0]->getValue();

        $width = $image['width'];
        $height = $image['height'];
    }
}