Ridimensionamento delle immagini in modo programmatico in WordPress
Se hai mai dovuto lavorare con il ridimensionamento delle immagini in modo programmatico in WordPress, potresti esserti imbattuto nella funzione image_resize.
Inoltre, potresti sapere che è stato deprecato (dato che appare nella parte superiore dello schermo):
Questa funzione è stata deprecata. Usa invece wp_get_image_editor().
E con la sua deprecazione, come è vero per tutti coloro che fanno un buon lavoro deprecando la funzionalità, non è senza la sua sostituzione.
In questo caso, stiamo parlando del WP Image Editor. Questa è una classe in WordPress che possiamo utilizzare per eseguire le stesse operazioni per ridimensionare le immagini in modo programmatico che una volta potevamo con la funzione originale.
Per essere chiari, questo particolare post non è un tutorial completo su come utilizzare il WP_Image_Editor.
Invece, è una semplice guida su come usarlo per ridimensionare le immagini al posto di una funzione deprecata insieme ad alcune spiegazioni lungo il percorso su come gestire i casi in cui potrebbero esserci errori.
Trovare l’immagine da usare
A seconda di ciò che stai facendo, potresti essere in grado di recuperare il nome del file dell’immagine da WordPress stesso; tuttavia, per questo esempio, codificherò semplicemente il percorso di un file.
Questo è il modo più semplice per spiegare come utilizzare la classe rispetto all’andare su una tangente per come recuperare un’immagine a livello di codice, ottenerne il percorso, inviarla alla classe dell’editor e così via.
Quindi supponiamo che il percorso indicato per l’immagine sia qualcosa del genere:
<?php
$filename = '/Users/tommcfarlin/Projects/acme/wp-content/uploads/2018/06/original-image.jpg';
if (!file_exists($filename)) {
return;
}
Usandolo, lo memorizzeremo in una variabile che possiamo passare a un’altra funzione nel caso in cui desideriamo operare sul file originale più volte.
Ottenere un’istanza dell’editor di immagini
Successivamente, devi ottenere un’istanza della classe dell’editor di immagini in modo da poter operare sull’immagine situata nel percorso sopra. Nella sua forma più semplice, non è altro che passare un nome di file in una funzione e quindi una matrice di argomenti.
In questo post, non mi preoccupo della serie di argomenti, ma solo di ottenere un’istanza dell’editor con cui posso utilizzare per ridimensionare un’immagine.
Per prendere un’istanza di detto editor, fai semplicemente questo:
<?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() );
Ciò restituirà un’istanza dell’editor di un’istanza di **[WP_Error](https://developer.wordpress.org/reference/classes/wp_error/)**(insieme a un messaggio di errore e altre informazioni che è possibile utilizzare per determinare il problema). È sempre bene verificare se il valore restituito è un errore e interrompere eventuali operazioni 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.
}
Supponendo che non ci siano errori, tuttavia, puoi iniziare a lavorare per ridimensionare l’immagine.
Ridimensionamento dell’immagine
Fortunatamente, questo è qualcosa che è facile da fare. Hai bisogno di tre informazioni:
- larghezza,
- altezza,
- e se desideri ritagliare o meno l’immagine.
Nella mia esperienza, ritagliare l’immagine è quasi sempre meglio che no perché evita strani allungamenti o distorsioni con proporzioni strane.
Quando ridimensiono l’immagine, mi piace sempre ottenere la dimensione corrente dell’immagine e quindi utilizzare un moltiplicatore per creare le nuove dimensioni in base alle quali voglio ridimensionare l’immagine.
Ad esempio, diciamo che ho un’immagine e voglio ridimensionare la larghezza del 40% e l’altezza del 30%. Per fare ciò, ho bisogno di:
- ottenere la dimensione dell’immagine corrente,
- usa la nuova larghezza e altezza per ridimensionare l’immagine.
A livello di programmazione, questo è il modo in cui lo faresti:
<?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);
Abbastanza facile da seguire, vero?
Salvataggio dell’immagine
Infine, non resta che salvare l’immagine. In questo caso, l’immagine verrà scritta nella directory dei caricamenti (e di solito l’anno e il mese forniti da 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.
}
È quindi possibile visualizzare la versione finale ridimensionata (e denominata in modo appropriato) in base al suo output.