Codice PHP:
<?
$immagine_obj = new ManipulateImages();
$immagine_obj->after_error_page = "gestione.php$link";
$immagine_obj->final_width = 800;
$immagine_obj->final_height = 600;
$immagine = $immagine_obj->ResizeAndConvertToBinary($_FILES['immagine']);
$immagine_obj->final_width = 150;
$immagine_obj->final_height = 100;
$immagine_thumb = $immagine_obj->ResizeAndConvertToBinary($_FILES['immagine']);
$_POST['nome'] = $_POST['nome'];
$_POST['descrizione'] = $_POST['descrizione'];
$str_insert = "
INSERT INTO nuove
(nuova_id_categoria_nuove, nuova_nome, nuova_descrizione, nuova_immagine, nuova_immagine_width, nuova_immagine_height,
nuova_immagine_thumb, nuova_immagine_thumb_width, nuova_immagine_thumb_height, nuova_immagine_tipo)
VALUES
('".$_POST['id_categoria']."', '".$_POST['nome']."', '".$_POST['descrizione']."', '".$immagine['pf_image']."',
'".$immagine['width']."', '".$immagine['height']."', '".$immagine_thumb['pf_image']."', '".$immagine_thumb['width']."',
'".$immagine_thumb['height']."', '".$_FILES['immagine']['type']."');";
$result = ExecuteMysqlQuery($str_insert);
ShowMessage("Macchina caricata con successo", "gestione.php$link", $title='Aggiungi');
?>
<?
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
// variabili del sito
var $after_error_page = 'index.php'; // indirizzo assoluto della pagina a cui rimandare l'utente in caso di errore
// messaggi all'utente
var $msg_error_too_big_or_not_jpg = "Le immagini devono essere in formato JPEG e di dimensioni inferiori ad 1 Mb.";
// FINE PARAMETRI DI CONFIGURAZIONE
//CODICE
// il costruttore della classe, non fa nulla!
function ManipulateImages() {
// do nothing
}
// ResizeImage si occupa di ridimensionare l'immagine alle dimensioni specificate come parametri della classe, nello
// specifico:
// 1. controllo che l'immagine sia JPEG e di dimensioni inferiori al valore settato, se accade riporto l'errore
// 2. ricava le dimensioni dell'immagine originale
// 3. se l'immagine è più grande delle dimensioni di destinazione, calcolo le nuove dimensioni proporzionalmente
// 4. crea una nuova immagine
// 5. crea una nuova immagine dalla jpeg originaria
// 6. incolla restringendo la jpeg originaria sulla nuova immagine
// 7. restituisce l'immagine con qualita di compressione pari a XX e le dimensioni e type
function ResizeImage($pf_image) {
// 1. controllo che l'immagine sia JPEG e di dimensioni inferiori al valore settato, se accade riporto l'errore
$tipo = (substr($pf_image['type'],-4));
if (((substr($pf_image['type'],-4))!='jpeg') || ($pf_image['size']>$this->max_size_image)) {
ShowMessage($this->msg_error_too_big_or_not_jpg, $this->after_error_page);
}
// 2. ricava le dimensioni dell'immagine originale
$dimension = GetImageSize($pf_image['tmp_name']);
//echo "
</p>tipo:".$pf_image['type'].' dimensioni:'.$pf_image['size'].' larghezza:'.$dimension[0].' altezza:'.$dimension[1];
//echo "
".$dimension[0]." ".$dimension[1];
// 3. se l'immagine è più grande delle dimensioni di destinazione, calcolo le nuove dimensioni proporzionalmente
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 = round($dimension[1]/($dimension[0]/$this->final_width));
} else {
$new_height = $this->final_height;
$new_width = round($dimension[0]/($dimension[1]/$this->final_height));
}
} else {
$new_width = $dimension[0];
$new_height = $dimension[1];
}
//echo "
Nuova larghezza: ".$new_width." nuova altezza:".$new_height;
// 4. crea una nuova immagine
$new_img_pf = ImageCreateTrueColor($new_width,$new_height);
// 5. crea una nuova immagine dalla jpeg originaria
$old_image_pf = ImageCreatefromJPEG($pf_image['tmp_name']);
// 6. incolla restringendo la jpeg originaria sulla nuova immagine
imagecopyresized ($new_img_pf, $old_image_pf,0,0,0,0,$new_width,$new_height,$dimension[0],$dimension[1]);
// 7. restituisce l'immagine con qualita di compressione pari a XX
$path = $this->final_path_and_name=='' ? $pf_image['tmp_name'] : $this->final_path_and_name;
ImageJPEG($new_img_pf,$path, $this->image_quality);
$results['pf_image'] = $path;
$image_dimensions = getimagesize($path);
$results['width'] = $image_dimensions[0];
$results['height'] = $image_dimensions[1];
$results['type'] = $image_dimensions[2];
$results['width_height'] = $image_dimensions[3];
return $results;
}
function ResizeAndConvertToBinary($pf_image) {
$pf_image = $this->ResizeImage($pf_image);
$pf_image['pf_image'] = ConvertToBinary($pf_image['pf_image']);
return $pf_image;
}
}
?>
<?
function ConvertToBinary($file_to_convert) {
$pf_file = fopen($file_to_convert, "rb");
$pf_file = fread($pf_file, filesize($file_to_convert));
$pf_file = addslashes($pf_file);
return $pf_file;
}
?>