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 🙂

    0
  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

    0
    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"];

      0