Drupal 8 imágenes con estilo de imagen.
drupal-8 (6)
Debes intentar usar las nuevas funciones de Drupal siempre que sea posible.
En su lugar, utilice:
use Drupal/file/Entity/File;
use Drupal/image/Entity/ImageStyle;
$fid = 123;
$file = File::load($fid);
$image_uri = ImageStyle::load(''your_style-name'')->buildUrl($file->getFileUri());
Editado según https://www.drupal.org/node/2050669 :
$original_image = ''public://images/image.jpg'';
// Load the image style configuration entity
use Drupal/image/Entity/ImageStyle;
$style = ImageStyle::load(''thumbnail'');
$uri = $style->buildUri($original_image);
$url = $style->buildUrl($original_image);
En Drupal 7, uso la función image_style_url(''style'', uri)
para generar una nueva imagen con estilo y devolver la ruta de la imagen. Entonces, ¿qué será en lugar de ello en Drupal 8? Gracias
Descubrí que a menudo quiero preprocesar la imagen para aplicar un estilo de imagen a una imagen en un nodo o un tipo de párrafo. En muchos casos, he creado un párrafo que le permite al usuario elegir el ancho de la imagen como un porcentaje. En el preprocesamiento verificaría el valor del ancho y aplicaría el estilo de imagen correcto.
use Drupal/image/Entity/ImageStyle;
function THEME_preprocess_paragraph__basic_content(&$vars) {
//get the paragraph
$paragraph = $vars[''paragraph''];
//get the image
$images = $paragraph->get(''field_para_image'');
//get the images value, in my case I only have one required image, but if you have unlimited image, you could loop thru $images
$uri = $images[0]->entity->uri->value;
//This is my field that determines the width the user wants for the image and is used to determine the image style
$preset = $paragraph->get(''field_column_width'')->value;
$properties = array();
$properties[''title''] = $images[0]->getValue()[''title''];
$properties[''alt''] = $images[0]->getValue()[''alt''];
//this is where the Image style is applied
switch($preset) {
case ''image-20'':
$properties[''uri''] = ImageStyle::load(''width_20_percent'')->buildUrl($uri);
break;
case ''image-45'':
$properties[''uri''] = ImageStyle::load(''width_45_percent'')->buildUrl($uri);
break;
case ''image-55'':
$properties[''uri''] = ImageStyle::load(''width_55_percent'')->buildUrl($uri);
break;
case ''image-100'':
$properties[''uri''] = ImageStyle::load(''width_100_percent'')->buildUrl($uri);
break;
}
//assign to a variable that the twig template can use
$vars[''basic_image_display''] = $properties;
}
En este ejemplo, estoy preprocesando un tipo de párrafo específico llamado "basic_content" pero puede hacer lo mismo con un preproceso de nodo. Continuando con mi ejemplo, tendría una plantilla de ramita llamada párrafo - basic_content.html.twig para manejar la visualización de ese tipo de párrafo.
Mostrar la imagen sería algo como esto en el archivo twig.
<img class="img-responsive" src="{{basic_image_display[''uri'']}}" alt="{{ basic_image_display[''alt''] }}" title="{{ basic_image_display[''title''] }}"/>
En tus Controladores y otra parte de POO de Drupal puedes usar:
use Drupal/image/Entity/ImageStyle;
$path = ''public://images/image.jpg'';
$url = ImageStyle::load(''style_name'')->buildUrl($path);
Y en el archivo YOUR_THEME.theme
mientras Error: Class ''ImageStyle'' not found in YOURTHEMENAME_preprocess_node
, puede hacerlo con el siguiente
$path = ''public://images/image.jpg'';
$style = /Drupal::entityTypeManager()->getStorage(''image_style'')->load(''thumbnail'');
$url = $style->buildUrl($path);
Otro método es proporcionar una matriz reproducible y dejar que el motor de renderizado de Drupal lo represente.
$render = [
''#theme'' => ''image_style'',
''#style_name'' => ''thumbnail'',
''#uri'' => $path,
// optional parameters
];
Funciona para mí desde una consulta de base de datos de Drupal clásica en un archivo .module:
$query = /Drupal::database()->select(''file_managed'', ''f'' );
$query->addField(''f'', ''uri'');
$pictures = $query->execute()->fetchAll();
foreach ($pictures as $key => $picture) {
$largePictureUri = entity_load(''image_style'', ''large'')->buildUrl($picture->uri);
}
Según los registros de cambio :
use Drupal/image/Entity/ImageStyle;
$path = ''public://images/image.jpg'';
$url = ImageStyle::load(''style_name'')->buildUrl($path);
Utilicé en Drupal 8 este código. Está funcionando bien.
$fid = 374; //get your file id, this value just for example
$fname = db_select(''file_managed'', ''f'')->fields(''f'', array(''filename''))->condition(''f.fid'', $fid)->execute()->fetchField();
$url = entity_load(''image_style'', ''YOUR_STYLE_NAME'')->buildUrl($fname);