Originariamente inviato da marketto
posta il codice.
questo è il codice con cui richiamo la classe:
Codice PHP:
$immagine_obj = new ManipulateImages($root_dir.'images');
$immagine_obj->final_width = 99;
$immagine_obj->final_height = 99;
$immagine = $immagine_obj->ResizeAndConvertToBinary($_FILES['immagine']);
questa è la funzione che converte in binario:
Codice PHP:
function ConvertToBinary($file_to_convert) {
$file_handle = fopen($file_to_convert, "rb");
$size = filesize($file_to_convert);
$file_readed = fread($file_handle, $size);
$binary_file = addslashes($file_readed);
return $binary_file;
}
e questa è la classe che eventualmente ridimensiona l'immagine
Codice PHP:
class ManipulateImages {
// INIZIO PARAMETRI DI CONFIGURAZIONE
// variabili della classe
var $final_width = 0; // dimensione orizzontale finale delle immagini in pixel
var $final_height = 0; // dimensione verticale finale delle immagini in pixel
var $final_path_and_name = ''; // path e nome del file su cui deve essere salvata l'immagine
var $max_size_image = '1048576'; // dimensioni massime in byte dell'immagine originale
var $image_quality = 75; // qualità, da 0 a 100
// messaggi all'utente
var $msg_error_too_big = "Le immagini devono essere di dimensioni inferiori ad 1 Mb.";
var $msg_error_bad_format = "Le immagini possono essere solo nei formati JPG, GIF o PNG.";
// FINE PARAMETRI DI CONFIGURAZIONE
var $img_dir = ''; // percorso assoluto alla directory delle immagini, per le chiamate a
// ShowMessage con l'utilizzo delle immagini
//CODICE
// il costruttore della classe imposta la directory delle immagini
function ManipulateImages($img_dir) {
$this->img_dir = $img_dir;
}
// ResizeImage si occupa di ridimensionare l'immagine alle dimensioni specificate come parametri della classe, nello
// specifico:
// 1. controllo che l'immagine sia di dimensioni inferiori al valore settato, se accade riporto l'errore
// 2. ricava le dimensioni dell'immagine originale
// 3. controllo che l'immagine sia in uno dei formati JPG, GIF o PNG, altrimenti riporto l'errore
// 4. se l'immagine è più grande delle dimensioni di destinazione, calcolo le nuove dimensioni
// proporzionalmente, altrimenti lascio l'immagine così com'è
// 5. crea una nuova immagine
// 6. crea una nuova immagine dalla jpeg originaria utilizzando la funzione appropriata in base al
// formato dell'immagine sorgente
// 7. incolla restringendo la jpeg originaria sulla nuova immagine
// 8. Distruggo l'handle dell'immagine originale per liberare la memoria
// 9. restituisce l'immagine con qualita di compressione pari a XX distruggendo poi l'handle
function ResizeImage($pf_image) {
// 1. controllo che l'immagine sia di dimensioni inferiori al valore settato, se accade riporto l'errore
if ($pf_image['size']>$this->max_size_image) {
ShowMessage($this->msg_error_too_big, 'back page', 'a', $this->img_dir);
}
// 2. ricava le dimensioni dell'immagine originale
$dimension = GetImageSize($pf_image['tmp_name']);
// echo $pf_image['type'].' '.$pf_image['size'].' '.$dimension[0].'X'.$dimension[1];
// 3. controllo che l'immagine sia in uno dei formati JPG, GIF o PNG, altrimenti riporto l'errore
if ($dimension[2]<1 || $dimension[2]>3) ShowMessage($this->msg_error_bad_format, 'back page', 'a', $this->img_dir);
// 4. se l'immagine è più grande delle dimensioni di destinazione, calcolo le nuove dimensioni proporzionalmente, altrimenti lascio l'immagine così com'è
$new_width = $dimension[0];
$new_height = $dimension[1];
if (($dimension[0]>$this->final_width) || ($dimension[1]>$this->final_height)) {
if (($dimension[0]/$this->final_width)>($dimension[1]/$this->final_height)) {
$new_width = $this->final_width;
$new_height = $dimension[1]/($dimension[0]/$this->final_width);
} else {
$new_height = $this->final_height;
$new_width = $dimension[0]/($dimension[1]/$this->final_height);
}
}
// 5. crea una nuova immagine
$new_img_pf = ImageCreateTrueColor($new_width,$new_height);
// 6. crea una nuova immagine dalla jpeg originaria utilizzando la funzione appropriata in base al
// formato dell'immagine sorgente
switch ($dimension[2]) {
case 1:
$old_image_pf = ImageCreatefromGIF($pf_image['tmp_name']);
break;
case 2:
$old_image_pf = ImageCreatefromJPEG($pf_image['tmp_name']);
break;
case 3:
$old_image_pf = ImageCreatefromPNG($pf_image['tmp_name']);
break;
}
// 7. incolla restringendo la jpeg originaria sulla nuova immagine
imagecopyresampled ($new_img_pf, $old_image_pf,0,0,0,0,$new_width,$new_height,$dimension[0],$dimension[1]);
// 8. Distruggo l'handle dell'immagine originale per liberare la memoria
imagedestroy($old_image_pf);
// 9. restituisce l'immagine con qualita di compressione pari a XX distruggendo poi l'handle
$path = $this->final_path_and_name=='' ? $pf_image['tmp_name'] : $this->final_path_and_name;
ImageJPEG($new_img_pf,$path, $this->image_quality);
imagedestroy($new_img_pf);
$results['pf_image'] = $path;
$image_dimensions = getimagesize($path);
$results['width'] = $image_dimensions[0];
$results['height'] = $image_dimensions[1];
$results['image_type'] = $image_dimensions[2];
$results['width_height'] = $image_dimensions[3];
$results['file_type'] = $pf_image['type'];
return $results;
}
function ResizeAndConvertToBinary($pf_image) {
$pf_image = $this->ResizeImage($pf_image);
$pf_image['pf_image'] = ConvertToBinary($pf_image['pf_image']);
$pf_image['size'] = strlen($pf_image['pf_image']);
return $pf_image;
}
}