Depuis la version 7 de Drupal, le module image est intégré au core. Cela permet de créer simplement des styles d'images.
Les styles d'images permettent d'effectuer automatiquement des
opérations sur les images avant de les afficher. Les images générées
sont enregistrées afin de ne pas effectuer systématiquement la
transformation. Le module se charge de déterminer s'il faut générer une
nouvelle image ou bien utiliser celle générée précédemment.
Définition d'un style
Les styles d'images doivent être définis par un tableau associatif dans le hook hook_image_default_styles(). Pour un style d'image on peut définir autant de d'effets que l'on veut. L'ordre des effets est déterminé par l'entrée weight. Vous trouverez la liste des styles du module image dans le fichier image.effects.inc du module image.
Voici par exemple la définition d'un style nommé "Mon Style" qui redimensionne l'image, puis la met en noir en blanc.
$styles['mon_style'] = array(
'name' => 'Mon Style',
'effects' => array(
array(
'name' => 'image_scale_and_crop',
'data' => array(
'width' => '105',
'height' => '120',
),
'weight' => '1',
),
array(
'name' => 'image_desaturate',
'weight' => '2',
),
),
);
Lorsque ce style sera appliqué à une image elle sera redimensionnée (105x120), puis mise en noir et blanc. Si le style ne se trouve pas dans le module image on peut préciser où il se trouve en ajoutant une entrée 'module' dans la définition de l'effet.
Utilisation du style
On peut utiliser le style d'image depuis l'interface d'administration, mais on peut aussi l'utiliser dans un module. Pour l'utiliser il faut passer par la fonction de thème 'image_style'. On peut préciser un titre et un texte alternatif avec respectivement l'entrée 'title' et 'alt'.
Voici comment utiliser le style :
$uri = file_build_uri( $path );
theme( 'image_style', array(
'path' => $uri,
'style_name' => 'mon_style' )
);
$path étant le chemin vers l'image dans l'arborescence de Drupal.
Pour aller plus loin vous pouvez regarder dans le code de image.effects.inc pour savoir comment créer vos propres effets.