Ridimensionare immagine e upload in database

Devo ridimensionare un'immagine e fare questo:

ottenere una copia dell'immagine 110x95 e salvarla in thumbnails

ottenere l'immagine a dimensioni 800x600 e salvarla in images

come faccio??

:bye:

inviato 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

se ti può essere utile io ho fatto cosi:

    $nome_file_temporaneo1 = $_FILES['file_inviato1']['tmp_name']; 
    $nome_file_vero1 = $_FILES['file_inviato1']['name']; 
    $tipo_file1 = $_FILES['file_inviato1']['type']; 
    $dati_file1 = file_get_contents($nome_file_temporaneo1); 
    $dati_file1= addslashes($dati_file1); 

//CREAZIONE IMMAGINE SMALL PER LA HOME PAGE --- TIPO IMMAGINE JPG
if ($tipo_file1=='image/jpg' || $tipo_file1=='image/pjpg' || 
$tipo_file1=='image/pjpeg' || $tipo_file1=='image/jpeg')
{
    $nuova_larghezza = 90;
   $nuova_altezza = 68;
  
//ricavo la dimensione dell'immagine originale
list($larghezza_orig, $altezza_orig, $tipo, $attr) = getimagesize($_FILES['file_inviato1']['tmp_name']);
              
//creo una nuova immagine che conterrà l'anteprima
$immagine_temporanea = imagecreatetruecolor($nuova_larghezza, $nuova_altezza);
              
//carico l'originale
$immagine = imagecreatefromjpeg($_FILES['file_inviato1']['tmp_name']);   //VA CAMBIATA A SECONDA DEL TIPO DI FILE
              
//metto nella nuova immagine la riduzione dell'originale
imagecopyresized($immagine_temporanea, $immagine,0,0,0,0,$nuova_larghezza, $nuova_altezza, $larghezza_orig, $altezza_orig);
imagedestroy($immagine);
$immagine = $immagine_temporanea;
ob_start(); // Tutto l'output prodotto da questo momento sarà "catturato" da un buffer (e non inviato al browser)
imagejpeg($immagine); // produce l'output  VA CAMBIATA A SECONDA DEL TIPO DI FILE
$imagedata = ob_get_contents(); // prendo l'output catturato e lo metto in una variabile
ob_end_clean(); // arresto la cattura dell'output e svuoto il buffer
$dati_file1= addslashes($imagedata); 
         
      
// query per inserire il file nel DB 
$query5_1 = "INSERT INTO tabella_immagini_small SET                   nome_file = '$nome_file_vero1', 
   tipo_file = '$tipo_file1', 
   dati_file = '$dati_file1'"; 


   if(@mysql_query($query5_1))
   {
   echo "<p align=center><b>FOTO 1 RIDIMENSIONATA: inserita correttamente.\n</b></p>";
   }
   else 
   {
   exit('<p><b>Errore : ' . mysql_error() . '</b></p>');
    }
   
}

Se le immagini sono di tipo gif dovrai sostituire imagecreatefromjpeg con imagecreatefromgif e imagejpg con imagegif. Setssa cosa per immagini png: imagecreatefrompng e imagepng. Per le immagini bmp la faccenda si complica (io ho evitato quel tipo di formato.)

 :bye:

risposto 9 anni fa
stellina
X 0 X

ok ci sono ,volendo si potrebbe fare qualcosina in scava jipt in modo da poter selezionare l'area che si vuole tagliare e poi ridimensionare l'immagine in base alle coordinate che passo con JS??

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Caro Gianni ti scrivo per dirti che ho fatto lo scriptino per l'upload delle immaginine nel database ma fa lo s****o  a singhiozzo. ;D

nella pagina prima di inviare c'è una funzioncina JS che mi aumenta il numero dei campi, questo non è un problema visto che con un bel print_r($_FILES) i campi li vedo tutti e pieni.

il problema è questo :

Array

(

    [name] => Array

        (

            [0] => 209528155_1334a6294f_o.jpg

            [1] => 209529787_01da41328c_o.jpg

            [2] => 220793363_1a732facf2_o.jpg

            [3] => 231676497_3aa30f947b_o.jpg

            [4] => 414031503_f4fb9c12e8_o.jpg

            [5] => 283413755_def79f5bde_o.jpg

            [6] => 414031503_f4fb9c12e8_o.jpg

            [7] => 273582561_69a5747bec_o.jpg

        )

    [type] => Array

        (

            [0] => image/jpeg

            [1] => image/jpeg

            [2] => image/jpeg

            [3] => 

            [4] => image/jpeg

            [5] => image/jpeg

            [6] => image/jpeg

            [7] => 

        )

    [tmp_name] => Array

        (

            [0] => D:\WINDOWS\TEMP\php181B.tmp

            [1] => D:\WINDOWS\TEMP\php181C.tmp

            [2] => D:\WINDOWS\TEMP\php181D.tmp

            [3] => 

            [4] => D:\WINDOWS\TEMP\php181F.tmp

            [5] => D:\WINDOWS\TEMP\php1820.tmp

            [6] => D:\WINDOWS\TEMP\php1821.tmp

            [7] => 

        )

    [error] => Array

        (

            [0] => 0

            [1] => 0

            [2] => 0

            [3] => 1

            [4] => 0

            [5] => 0

            [6] => 0

            [7] => 1

        )

    [size] => Array

        (

            [0] => 66281

            [1] => 48190

            [2] => 117106

            [3] => 0

            [4] => 678631

            [5] => 116984

            [6] => 678631

            [7] => 0

        )

)

che alcuni campi ( anche quelli statici a volte ) mi ritornano il type e la dimensione vuoti o nulli, e questo non mi permette di fare l'upload nel DB

il codice è questo :

<?php

   include 'inc/class/images.class.php';

   error_reporting(E_ALL);

   $img = new images();

   

      $file = $_FILES['image'];

      

      printf("<pre>%s</pre>",print_r($file,true));

      exit;

      $anid = strip_tags((int) $_GET['anid']);

         

      $error = false;

      $i = 0;

      do{

         if(!isset($file)){

            $error = '<p class="error">Il modulo non &egrave; stato inviato</p>';

            break;

         }

         switch($file['error'][$i]){

            case UPLOAD_ERR_INI_SIZE:

                  $error = '<p class="error">Le dimensioni del file sono eccessive, il massimo consentito &egrave; '

                          . $img->imgMaxSize . 'byte il tuo file occupa '.$file['size'][$i].'</p>';

               break 2;

            

            case UPLOAD_ERR_PARTIAL:

               $error = '<p class="error">Errore durante l\'upload del file</p>';

               break 2;

            

            case UPLOAD_ERR_NO_FILE:

               $error = '<p class="error">Nessun file da caricare.</p>';

               break 2;

               

            case UPLOAD_ERR_OK:

               if($file['size'][$i] > $img->imgMaxSize){

                  $error = '<p class="error">Le dimensioni del file sono eccessive, il massimo consentito &egrave; '

                          . $img->imgMaxSize . 'byte il tuo file occupa '.$file['size'][$i].'</p>';

               }

               break 2;

               

            default:

               $error = '<p class="error">Si &egrave; verificato un errore sconosciuto durante l\upload del file</p>';

               break 2;

            }

            if(!in_array($file['type'][$i],$img->imgMimes)){

               $error = '<p class="error">Il formato non &egrave; consentito</p>';

               break;

            }

      $i++;               

      }while(0);

      

      if(!$error){                  

         for($index=0, $count=count($file['name']); $index < $count; $index++){

            $main   = $index < 1 ? 1 : 0;

            $image  = $file['tmp_name'][$index];

            $type   = $file['type'][$index];

            $name   = $file['name'][$index];

            if(empty($type) || empty($name) || $file['size'][$index] < 1)

               continue;

            

            $data   = addslashes($img->imageResample($image,0));

            $query  = "INSERT INTO `sm_images` (`data`,`mime`, `name`,`anid`) VALUES"

                  . " ('" . $data . "','" . $type . "','" . $name . "'," . $anid . ")";

            $exec   = $this->sm->db->query($query);

            

            $id    = $this->sm->db->lastInsert();   

                  

            if(!$exec){

               $this->error->logError("Unable to send image to the database", 1);

            }else{         

               $data   = addslashes($img->imageResample($image,1));         

               $query    = "INSERT INTO `sm_thumbnails` (`data`, `mime`, `imid`, `name`, `anid`, `main`) VALUES"

                     . " ('" . $data . "','" . $type . "'," . $id . ",'" . $name . "'," . $anid . "," . $main . ")";

               $exec   = $this->sm->db->query($query);

               

               if(!$exec){

                  $this->error->logError("Unable to send image to the database", 1);

               }else{

                  $completed[] = $file['name'][$index];

               }

                     

            }   

         }

         echo '<div class="success" style="height: auto;">Upload dei file : <ul>';

         foreach($completed as $c){

            echo '<li>' . $c . '</li>';

         }

         echo '</ul> Completato con successo</div>';

      }else{

         echo $error;

      }

?>

non ho idea di cosa possa essere :bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

l'assenza di quei dati è casuale o sistematica?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

sembrerebbe sistematica

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

ma sempre per gli stessi file? Cosa succede se invii meno file o file più piccoli?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

non so gianni sembra che faccia tutto per fatti suoi :

metto quattro file : gli uppa senza problemi

ma lo fa solo con tre , uno lo "dimentica" ;D

controlla il codice please, magari ho sbagliato qualcosa nella gestione degli upload multipli !!! ( ??? )

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Gianni sembrava essere l'upload max file size.

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
modificato 9 anni fa
X 0 X

in alcune immagini ottengo questo ::

<br />

<b>Notice</b>:  Undefined variable: height in <b>D:\Programmi\Apache Group\Apache2\htdocs\solemaresalento\2.1\inc\class\images.class.php</b> on line <b>38</b><br />

<br />

<b>Notice</b>:  Undefined variable: height in <b>D:\Programmi\Apache Group\Apache2\htdocs\solemaresalento\2.1\inc\class\images.class.php</b> on line <b>42</b><br />

<br />

<b>Warning</b>:  imagecreatetruecolor() [<a href='function.imagecreatetruecolor'>function.imagecreatetruecolor</a>]: Invalid image dimensions in <b>D:\Programmi\Apache Group\Apache2\htdocs\solemaresalento\2.1\inc\class\images.class.php</b> on line <b>42</b><br />

<br />

<b>Notice</b>:  Undefined variable: height in <b>D:\Programmi\Apache Group\Apache2\htdocs\solemaresalento\2.1\inc\class\images.class.php</b> on line <b>45</b><br />

<br />

<b>Warning</b>:  imagecopyresampled(): supplied argument is not a valid Image resource in <b>D:\Programmi\Apache Group\Apache2\htdocs\solemaresalento\2.1\inc\class\images.class.php</b> on line <b>45</b><br />

<br />

<b>Warning</b>:  imagejpeg(): supplied argument is not a valid Image resource in <b>D:\Programmi\Apache Group\Apache2\htdocs\solemaresalento\2.1\inc\class\images.class.php</b> on line <b>46</b><br />

sarà per il fatto che non gestisco ancora diversi tipi di immagini?

come potrei modificare il metodo imageResample per avere piu tipi gestibili :

<?php

function imageResample($filename,$mode = 0)

   {      

      ob_start();

      

         switch($mode){

            case 0:

            case 'thumb':

            default:            

               $width    = $this->imgWidth;

               $heigth   = $this->imgHeight;

               break;

            case 1:

            case 'image':

               $width    = $this->tmbWidth;

               $heigth   = $this->tmbHeight;

               break;

         }

         

         list($width_orig, $height_orig) = getimagesize($filename);

         

         if ($width && ($width_orig < $height_orig)) {

            $width    = ($height / $height_orig) * $width_orig;

         } else {

            $height    = ($width / $width_orig) * $height_orig;

         }

         $image_p    = imagecreatetruecolor($width, $height);

         $image       = imagecreatefromjpeg($filename);

         

         imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

         imagejpeg($image_p, null, 100);

         

      $content = ob_get_clean();

      

      return $content;

   }

   

?>
risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

prova a modificare la dimensione massima di upload e vedi se cambia qualcosa

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

si uppa senza problemi.

posso modificare la funzione per gestire diversi tipi di file?

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

sempre immagini o altri tipi di file?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

immagini:

jpeg

png

gif

e casomai FORSE bmp

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Ciao Gianni ora riesco a fare l'upload senza problemi ...

ma ottengo questo risultato per alcune immagini ( sempre jpeg )

<br />

<b>Notice</b>:  Undefined variable: height in <b>D:\Programmi\Apache Group\Apache2\htdocs\solemaresalento\2.1\inc\class\images.class.php</b> on line <b>38</b><br />

<br />

<b>Notice</b>:  Undefined variable: height in <b>D:\Programmi\Apache Group\Apache2\htdocs\solemaresalento\2.1\inc\class\images.class.php</b> on line <b>42</b><br />

<br />

<b>Warning</b>:  imagecreatetruecolor() [<a href='function.imagecreatetruecolor'>function.imagecreatetruecolor</a>]: Invalid image dimensions in <b>D:\Programmi\Apache Group\Apache2\htdocs\solemaresalento\2.1\inc\class\images.class.php</b> on line <b>42</b><br />

<br />

<b>Notice</b>:  Undefined variable: height in <b>D:\Programmi\Apache Group\Apache2\htdocs\solemaresalento\2.1\inc\class\images.class.php</b> on line <b>45</b><br />

<br />

<b>Warning</b>:  imagecopyresampled(): supplied argument is not a valid Image resource in <b>D:\Programmi\Apache Group\Apache2\htdocs\solemaresalento\2.1\inc\class\images.class.php</b> on line <b>45</b><br />

<br />

<b>Warning</b>:  imagejpeg(): supplied argument is not a valid Image resource in <b>D:\Programmi\Apache Group\Apache2\htdocs\solemaresalento\2.1\inc\class\images.class.php</b> on line <b>46</b><br />

???

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

probabilmente qualche immagine non viene caricata correttamente o completamente e pertanto quando vai a recuperarne le dimensioni ricevi quei messaggi di errore

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

mmh ma succede anche quando la uppo da sola...

anche se la sua dimensione è inferiore di 1MB

:death:

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

ma succede per qualsiasi immagine?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

solo alcune :|

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
solo alcune :|

ma sempre le stesse?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

sempre le stesse si,ma con alcune nuove lo fa ( cioè ne trovo una che non viene uppata : ritento e non viene uppata lo stesso, invece le altre si )

non credo ci sia un criterio ben preciso :2funny: con il quale sceglie quali non uppare, semplicemente decide : questa no, e così fà, non la uppa mai :D

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

non so che dirti  :dunno:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda