Resize immagini con php class-resize
5 su 3 voti
Tempo di lettura: 5 minuti

Resize immagini con php class-resize

Come ridimensionare un immagine con php

Una delle prime classi del php, è Class resize e semplifica la vita del programmatore con una semplicità impressionante

La classe tramite settaggio dell’url del file da ridimensionare, indirizzo fisico , altezza e larghezza ridimensiona l’immagine  senza stregchiarla ( distorcerla ) e quindi senza deformarla.

Quindi settando il resize su una dimensione fissa o variabile in base all’altezza/larghezza originale

Il settaggio è molto semplice , ma andiamo subito ad analizzare il codice.

classe_resize.php

class resize{
var $urlimage = "";
var $maxX = 100;
var $maxY = 100;
var $fisso = 1;
var $latofisso = "XY";
var $folder = "public/";
var $newName = "";

function controlladati(){
$this->errore = array();
$this->Estensione = "";
$this->originalX = 0;
$this->originalY = 0;
$this->originalName = "";
$this->newX = 0;
$this->newY = 0;

if($this->urlimage==""){
array_push($this->errore,"Scegliere un file da ridimensionare");
}elseif(!file_exists($this->urlimage) || !is_file($this->urlimage)){
array_push($this->errore,"Il file selezionato non esiste");
}
if(!is_numeric($this->maxX) || !is_numeric($this->maxY) || $this->maxXmaxY<0){ array_push($this->errore,"L'altezza e la larghezza dell'immagine devono essere numerici");
}
if(!file_exists($this->folder) || !chmod($this->folder,0777)){
array_push($this->errore,"La cartella di destinazione non esiste o non è scrivibile");
}
if($this->fisso!=0 && $this->fisso!=1){
array_push($this->errore,"La variabile di dimensione fissa deve essere 0 o 1");
}
if($this->latofisso!="XY" && $this->latofisso!="X" && $this->latofisso!="Y"){
array_push($this->errore,"La variabile di lato fisso devono essere X o Y o XY");
}
if(count($this->errore)>0){
return false;
}else{
return true;
}
}

function go(){
if($this->controlladati()){
$filename = basename($this->urlimage);
$this->originalName = $filename;
if($this->newName==""){$this->newName=$filename;}
$this->Estensione = strtolower(substr($filename, strrpos($filename, "."), strlen($filename)-strrpos($filename, ".")));
if($this->Estensione==".jpeg" || $this->Estensione==".jpg"){
$handle_immagine = imagecreatefromjpeg($this->urlimage);
}elseif($this->Estensione==".gif"){
$handle_immagine = imagecreatefromgif($this->urlimage);
}elseif($this->Estensione==".png"){
$handle_immagine = imagecreatefrompng($this->urlimage);
}else{
array_push($this->errore,"Formato immagine non valido");
return null;
}
$handle_immagine_adattata=$this->adatta($handle_immagine);
imagejpeg($handle_immagine_adattata, $this->folder.$this->newName, 80);
chmod($this->folder.$this->newName,0777);
unset($handle_immagine);
unset($handle_immagine_adattata);
}
}

function adatta($handle_immagine){
$this->originalX=imagesx($handle_immagine);
$this->originalY=imagesy($handle_immagine);
if($this->fisso==1){
$this->newX=$this->maxX;
$this->newY=$this->maxY;
}else{
if($this->latofisso=="XY"){
if ($this->originalX/$this->originalY>$this->maxX/$this->maxY) {
$this->newX=$this->maxX;
$this->newY=($this->originalY/$this->originalX)*$this->maxX;
} else {
$this->newX=($this->originalX/$this->originalY)*$this->maxY;
$this->newY=$this->maxY;
}
}elseif($this->latofisso=="X"){
$this->newX=$this->maxX;
$this->newY=($this->originalY/$this->originalX)*$this->maxX;
}elseif($this->latofisso=="Y"){
$this->newX=($this->originalX/$this->originalY)*$this->maxY;
$this->newY=$this->maxY;
}else{
if ($this->originalX/$this->originalY>$this->maxX/$this->maxY) {
$this->newX=$this->maxX;
$this->newY=($this->originalY/$this->originalX)*$this->maxX;
} else {
$this->newX=($this->originalX/$this->originalY)*$this->maxY;
$this->newY=$this->maxY;
}
}
}
$tmp_immagine = imagecreatetruecolor($this->newX, $this->newY);
$handle_immagine_adattata = imagecopyresampled($tmp_immagine, $handle_immagine, 0, 0, 0, 0, $this->newX, $this->newY, $this->originalX, $this->originalY);
return $tmp_immagine;

}

}

 

Esempio Completo



Salvate il codice precedente con il nome class_resize.php quindi potete utilizzarlo in questo modo:

include(classe_resize.php);

$resize = new resize;
$resize->urlimage = "folder/immagine.jpg"; // immagine
$resize->fisso = 0; //se mantenerla fissa
$resize->maxX = 200; //larghezza 
$resize->maxY = 100; //altezza
$resize->latofisso = "X"; // X (larghezza) o Y(altezza)
$resize->folder = "public/img/"; //cartella utilizzata
$resize->newName = "nuovonome.jpg"; //nuovo file da salvare
$resize->go();

if(count($resize->errore)==0){
echo "Nome file originale: ".$resize->originalName."<br>";
echo "Altezza file originale: ".$resize->originalY."<br>";
echo "Larghezza file originale: ".$resize->originalX."<br>";
echo "Nuova Altezza: ".$resize->newY."<br>";
echo "Nuova Larghezza: ".$resize->newX."<br>";
}else{
echo implode("<br>", $resize->errore);
}

Semplice e pulito , non vi resta che applicarlo per i vostri lavori di upload.

Commenti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

  1. Ciao, ho visto la classe e mi sono impressionato.. L’unico problema è che non riesco a copiarla poichè converte il testo in html.. Se potresti sistemarlo ti ringrazio di cuore 🙂

  2. ciao ho provato a impostare $resize->urlimage = “folder/immagine.jpg”; con $resize->urlimage = “$_FILES[test][tmp_name]”; cioè con una immagine caricata da form ma non funziona perché non la riconosce come immagine credo… any idea? grazie in anticipo

    1. Ciao Roby, ho testato la classe con un semplice form di upload, e posso dirti che puoi velocemente risolvere il problema caricando prima l’immagine caricata dal form sul server con “move_uploaded_file”

      move_uploaded_file($_FILES["file"]["tmp_name"], "img/" . $_FILES["file"]["name"]);

      quindi puoi procedere con

      $resize->urlimage = "img/".$_FILES["file"]["name"];