Ridimensiona immagine in PHP

Muhammad Abubakar 8 luglio 2021
  1. Carica l’immagine prima del ridimensionamento
  2. imagecopyresized() in PHP
  3. imagecopyresampled() in PHP
  4. imagescale() in PHP
Ridimensiona immagine in PHP

In questo articolo tutorial, discuteremo del ridimensionamento di un’immagine in PHP.

Carica l’immagine prima del ridimensionamento

Prima di ridimensionare un’immagine, dobbiamo prima caricarla come risorsa immagine all’interno dello script. Non è lo stesso che usare funzioni come file_get_contents() per ottenere il contenuto del file immagine. Per caricare il file, dobbiamo utilizzare funzioni come imagecreatefromjpeg(), imagecreatefrompng() e imagecreatefromgif(), tra le altre. A seconda del tipo di immagine che ridimensioneremo, utilizzeremo una funzione diversa di conseguenza.

getimagesize() in PHP

Dopo aver caricato l’immagine, utilizziamo getimagesize() per calcolare la larghezza, l’altezza e il tipo dell’immagine di input. Questa funzione restituisce un elenco di elementi, in cui la larghezza e l’altezza dell’immagine sono memorizzate negli indici 0 e 1, rispettivamente, e le costanti IMAGETYPE_XXX sono memorizzate nell’indice 2. Useremo il valore di questa costante restituita per capire cosa tipo di immagine da usare e quale caratteristica usare.

<?php
function load_image($filename, $type) {
    $new = 'new34.jpeg';
    if( $type == IMAGETYPE_JPEG ) {
        $image = imagecreatefromjpeg($filename);
        echo "here is jpeg output:";
        imagejpeg($image, $new);

    }
    elseif( $type == IMAGETYPE_PNG ) {
        $image = imagecreatefrompng($filename);
        echo "here is png output:";
        imagepng($image,$new);
    }
    elseif( $type == IMAGETYPE_GIF ) {
        $image = imagecreatefromgif($filename);
        echo "here is gif output:";
        imagejpeg($image, $new);
    }
    return $new;
}

$filename = "panda.jpeg";
list($width, $height,$type) = getimagesize($filename);
echo "Width:" , $width,"\n";
echo "Height:", $height,"\n";
echo "Type:", $type, "\n";

$old_image = load_image($filename, $type);
?>

Input_Immagine:

php ridimensiona immagine - immagine originale

Produzione:

Width:225
Height:225
Type:2
here is jpeg output:

Output_immagine:

php ridimensiona immagine

Entrambe sono le stesse immagini perché in questa sezione carichiamo solo l’immagine e calcoliamo la dimensione dell’immagine originale.

imagecopyresized() in PHP

imagecopyresized() prende un’area oblunga di larghezza src_w e altezza src_h da src_image alla posizione (src_x,src_y) e la colloca in un’area rettangolare dell’immagine di destinazione alla posizione (dst_x,dst_y). È una funzione integrata in PHP.

<?php
// File and new size
$filename = 'panda.jpeg';
$percent = 0.5;

// Content type
header('Content-Type: image/jpeg');

// Get new sizes
list($width, $height, $type) = getimagesize($filename);
$newwidth = $width * $percent;
$newheight = $height * $percent;
$type = $list[2];
echo $type;
// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);

// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

// Output
imagejpeg($thumb,'new.jpeg');
?>

Input_Immagine:

php ridimensiona immagine - immagine originale

Output_immagine:

php ridimensiona immagine

Come discusso sopra, la funzione imagecopyresize() accetta dieci parametri, che sono elencati di seguito.

Parametri Spiegazione
$dst_image La risorsa immagine di destinazione
$src_image La risorsa dell’immagine di origine
$dst_x La coordinata x del punto di destinazione
$dst_y La coordinata y del punto di destinazione
$src_x La coordinata x del punto sorgente
$src_y La coordinata y del punto sorgente
$dst_w La larghezza di destinazione
$dst_h L’altezza della destinazione
$src_w La larghezza della sorgente
$src_h L’altezza della sorgente

Restituisce il valore booleano TRUE in caso di successo o FALSE in caso di fallimento.

imagecopyresampled() in PHP

imagecopyresampled() copia una porzione oblunga di un’immagine su un diverso, interpolando perfettamente i valori dei pixel per ridurre la dimensione di un’immagine, mantenendo un alto livello di chiarezza.

Funziona in modo simile alla funzione imagecopyresized(), con l’ulteriore vantaggio di campionare l’immagine oltre a ridimensionarla.

<?php
// The file
$filename = 'panda.jpeg';
$percent = 2;

// Content type
header('Content-Type: image/jpeg');

// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;

// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// Output
imagejpeg($image_p, 'resampled1.jpeg', 100);
?>

Input_Immagine:

php ridimensiona immagine - immagine originale

Output_immagine:

php ridimensiona immagine

La funzione imagecopyresampled() accetta dieci parametri diversi.

Parametri Spiegazione
$image_p Determina l’immagine di destinazione.
$image Determina l’immagine di origine.
$x_dest Determina la coordinata x dell’immagine di destinazione.
$y_dest Determina la coordinata y dell’immagine di destinazione.
$x_src Determina la coordinata x dell’immagine sorgente.
$y_src Determina la coordinata y dell’immagine sorgente.
$wid_dest Determina la larghezza della nuova immagine.
$hei_dest Determina l’altezza della nuova immagine.
$wid_src Determina la larghezza della vecchia immagine.
$wid_src Determina l’altezza della vecchia immagine.

Nota: possiamo anche eseguire il ricampionamento in modo proporzionale, il che è possibile dando larghezza e altezza della dest_image invece della percentuale.

imagescale() in PHP

Si specifica la dimensione invece di definire la larghezza o l’altezza dell’ultima immagine. Se desideri che la nuova dimensione dell’immagine sia metà della prima immagine, imposta la dimensione su 0,8. Ecco che il codice di esempio per ridimensionare un’immagine di un dato fattore preservando il rapporto.

Moltiplichiamo la larghezza e l’altezza originali dell’immagine con la scala specificata all’interno della funzione scale image().

ecco il suo esempio:

<?php
    
function load_image($filename, $type) {

        if( $type == IMAGETYPE_JPEG ) {
            $image = imagecreatefromjpeg($filename);

        }
        elseif( $type == IMAGETYPE_PNG ) {
            $image = imagecreatefrompng($filename);
           
        }
        elseif( $type == IMAGETYPE_GIF ) {
            $image = imagecreatefromgif($filename);
            
        }
        
        return $image;
    }
function scale_image($scale, $image, $width, $height) {
    $new_width = $width * $scale;
    $new_height = $height * $scale;
    return resize_image($new_width, $new_height, $image, $width, $height);
    
}
function resize_image($new_width, $new_height, $image, $width, $height) {
    $image12 = 'hello.jpeg';
    $new_imag = imagecreatetruecolor($new_width, $new_height);
    imagecopyresampled($new_imag, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
    
    return imagejpeg($new_imag, $image12);
    }


$filename = "panda.jpeg";
list($width, $height, $type) = getimagesize($filename);
$old_image = load_image($filename, $type);
$image_scaled = scale_image(0.8, $old_image, $width, $height);
?>

Input_Immagine:

php ridimensiona immagine - immagine originale

Output_immagine:

php ridimensiona immagine

A parte questo, PHP ha una funzione integrata che ti consente di ridimensionare un’immagine alla larghezza e all’altezza specificate.

Vedi il codice di esempio.

<?php
    
$out_image = "sca.jpeg";
$image_name ="panda.jpeg";
     
// Load image file
$image = imagecreatefromjpeg($image_name);
  
// Use imagescale() function to scale the image
$img = imagescale( $image, 500, 400 );
  

header("Content-type: image/jpeg");
imagejpeg($img,$out_image);
  
?>

Input_Immagine:

php ridimensiona immagine - immagine originale

Output_Immagine:

php ridimensiona immagine