Redimensionner les images par programmation dans WordPress
Si vous avez déjà dû redimensionner des images par programme dans WordPress, vous avez peut-être rencontré la fonction image_resize.
De plus, vous savez peut-être qu’il est obsolète (étant donné que cela apparaît en haut de l’écran) :
Cette fonction est obsolète. Utilisez wp_get_image_editor() à la place.
Et avec sa dépréciation, comme c’est le cas de tous ceux qui font du bon travail en dépréciant les fonctionnalités, ce n’est pas sans son remplacement.
Dans ce cas, nous parlons de l’éditeur d’images WP. Il s’agit d’une classe dans WordPress que nous pouvons utiliser pour effectuer les mêmes opérations de redimensionnement des images par programme que nous pouvions autrefois avec la fonction d’origine.
Pour être clair, cet article particulier n’est pas un didacticiel complet sur l’utilisation du fichier WP_Image_Editor.
Au lieu de cela, il s’agit d’un guide simple sur la façon de l’utiliser pour redimensionner les images à la place d’une fonction obsolète, ainsi que de quelques explications sur la façon de gérer les cas où il peut y avoir des erreurs.
Trouver l’image à utiliser
Selon ce que vous faites, vous pourrez peut-être récupérer le nom de fichier de l’image à partir de WordPress lui-même ; cependant, pour cet exemple, je vais simplement coder en dur le chemin d’accès à un fichier.
C’est le moyen le plus simple d’expliquer comment utiliser la classe plutôt que de partir sur une tangente pour savoir comment récupérer par programme une image, obtenir son chemin, l’envoyer à la classe de l’éditeur, etc.
Supposons donc que le chemin donné à l’image ressemble à ceci :
<?php
$filename = '/Users/tommcfarlin/Projects/acme/wp-content/uploads/2018/06/original-image.jpg';
if (!file_exists($filename)) {
return;
}
En utilisant cela, nous le stockerons dans une variable que nous pourrons transmettre à une autre fonction au cas où nous voudrions opérer plusieurs fois sur le fichier d’origine.
Obtenir une instance de l’éditeur d’images
Ensuite, vous devez obtenir une instance de la classe de l’éditeur d’images afin de pouvoir opérer sur l’image située sur le chemin ci-dessus. Dans sa forme la plus basique, ce n’est rien de plus que de passer un nom de fichier dans une fonction, puis un tableau d’arguments.
Dans cet article, je ne suis pas concerné par le tableau d’arguments – uniquement par l’obtention d’une instance de l’éditeur avec laquelle je peux utiliser pour redimensionner une image.
Pour saisir une instance dudit éditeur, procédez simplement comme suit :
<?php
// Grab the editor for the filename of the image.
$filename = '/Users/tommcfarlin/Projects/acme/wp-content/uploads/2018/06/original-image.jpg';
if (!file_exists($filename)) {
return;
}
$editor = wp_get_image_editor( $filename, array() );
Cela renverra soit une instance de l’éditeur d’une instance de **[WP_Error](https://developer.wordpress.org/reference/classes/wp_error/)**(avec un message d’erreur et d’autres informations que vous pouvez utiliser pour déterminer le problème). Il est toujours bon de vérifier si la valeur renvoyée est une erreur et d’arrêter toute opération future.
<?php
// Grab the editor for the file and the size of the original image.
$filename = '/Users/tommcfarlin/Projects/acme/wp-content/uploads/2018/06/original-image.jpg';
if (!file_exists($filename)) {
return;
}
$editor = wp_get_image_editor( $filename, array() );
if (is_wp_error($editor)) {
// handle the problem however you deem necessary.
}
En supposant qu’il n’y ait pas d’erreur, cependant, vous pouvez commencer à travailler pour redimensionner l’image.
Redimensionner l’image
Heureusement, c’est quelque chose de facile à faire. Vous avez besoin de trois informations :
- largeur,
- la taille,
- et si vous souhaitez ou non recadrer l’image.
D’après mon expérience, recadrer l’image est presque toujours préférable car cela évite tout étirement ou distorsion étrange à des rapports d’aspect impairs.
Lors du redimensionnement de l’image, j’aime toujours obtenir la taille actuelle de l’image, puis utiliser un multiplicateur pour créer les nouvelles dimensions par lesquelles je veux redimensionner l’image.
Par exemple, disons que j’ai une image et que je veux redimensionner la largeur de 40% et la hauteur de 30%. Pour ce faire, je dois :
- obtenir la taille de l’image courante,
- utilisez les nouvelles largeur et hauteur pour redimensionner l’image.
Par programmation, voici comment procéder :
<?php
// Grab the editor for the file and the size of the original image.
$filename = '/Users/tommcfarlin/Projects/acme/wp-content/uploads/2018/06/original-image.jpg';
if (!file_exists($filename)) {
return;
}
$editor = wp_get_image_editor( $filename, array() );
if (is_wp_error($editor)) {
// Handle the problem however you deem necessary.
}
// Get the dimensions for the size of the current image.
$dimensions = $editor->get_size();
$width = $dimensions['width'];
$height = $dimensions['height'];
// Calculate the new dimensions for the image.
$newWidth = 0.4 * $width;
$newHeight = 0.3 * $height;
// Resize the image.
$result = $editor->resize($newWidth, $newHeight, true);
Assez facile à suivre, n’est-ce pas?
Enregistrement de l’image
Enfin, il ne reste plus qu’à enregistrer l’image. Dans ce cas, l’image sera écrite dans le répertoire de téléchargement (et généralement l’année et le mois fournis par WordPress).
<?php
// Grab the editor for the file and the size of the original image.
$filename = '/Users/tommcfarlin/Projects/acme/wp-content/uploads/2018/06/original-image.jpg';
if (!file_exists($filename)) {
return;
}
$editor = wp_get_image_editor( $filename, array() );
if (is_wp_error($editor)) {
// handle the problem however you deem necessary.
}
// Get the dimensions for the size of the current image.
$dimensions = $editor->get_size();
$width = $dimensions['width'];
$height = $dimensions['height'];
// Calculate the new dimensions for the image.
$newWidth = 0.4 * $width;
$newHeight = 0.3 * $height;
// Resize the image.
$result = $editor->resize($newWidth, $newHeight, true);
// If there's no problem, save it; otherwise, print the problem.
if (!is_wp_error($result)) {
$editor->save($editor->generate_filename());
} else {
// Handle the problem however you deem necessary.
}
Vous pouvez alors voir la version finale redimensionnée (et nommée de manière appropriée) en fonction de sa sortie.