• User

    visualizza immagine da mysql

    lo so che è un argomento trattato e ritrattato, ma io non riesco a venirne a capo...

    ho inserito in un db le immagini in campi blob
    e fin qui tutto funziona perfettamente.

    Il problema sorge in fase di visualizzazione.
    Stò lavorando in locale su server apache macos e le librerie gd sembrano essere tutte abilitate.
    ecco lo script:

    images.php

    
    	$query = "SELECT idimmagine, imagesize, imagename, immagine
    			  FROM immagini";
    	$result = mysql_query($query)
    	or die("Invalid query: " . mysql_error());
    	while($row=mysql_fetch_array($result)) {
    		echo $row["imagename"];
    		echo $row["imagesize"];
    //se visualizzo da link
    		echo " <a href=\"index.php?page=view&action=view&idimmagine=" . $row&#91;"idimmagine"&#93; . "\" target=\"_blank\">visualizza</a>  ";
    //se visualizzo direttamente in images.php
    		echo "<img src=\"index.php?page=view&action=view&idimmagine=" . $row&#91;"idimmagine"&#93; . "\">";
    
    
    

    view.php

    
    if&#40;isset&#40;$_GET&#91;"action"&#93;&#41; && isset&#40;$_GET&#91;'idimmagine'&#93;&#41; && is_numeric&#40;$_GET&#91;'idimmagine'&#93;&#41;&#41;&#123;
    
    	// VISUALIZZAZIONE
    	$query = "SELECT *
    			  FROM immagini
    			  WHERE idimmagine = '". $_GET&#91;"idimmagine"&#93; . "'";
    	$result = mysql_query&#40;$query&#41;
    	or die&#40;"Invalid query&#58; " . mysql_error&#40;&#41;&#41;;
    	while&#40;$row=mysql_fetch_array&#40;$result&#41;&#41; &#123;
    		$type = $row&#91;"imagetype"&#93;;
    		$immagine = $row&#91;"immagine"&#93;;
    		header&#40;"Content-type&#58; $type"&#41;;
       		echo $imagename."
    ".$immagine;
    	&#125;
    
    &#125;
    
    

    In cosa sbaglio?

    :bho: :ciauz:


  • Super User

    dopo aver fatto qualche ricerca in internet per capire quale sia la soluzione migliore tra memorizzare le immagini in un campo blog e memorizzarle invece semplicemente come file non ho trovato una sola persona a favore della memorizzazione in un file blog.

    Il consiglio che ti posso dare quindi è di lasciar perdere e crearti una bella cartella dove caricare le immagini e memorizzare nel db solamente il nome del file.

    ti levi da ogni problema 🙂


  • User

    @Tymba said:

    dopo aver fatto qualche ricerca in internet per capire quale sia la soluzione migliore tra memorizzare le immagini in un campo blog e memorizzarle invece semplicemente come file non ho trovato una sola persona a favore della memorizzazione in un file blog.

    Il consiglio che ti posso dare quindi è di lasciar perdere e crearti una bella cartella dove caricare le immagini e memorizzare nel db solamente il nome del file.

    ti levi da ogni problema 🙂

    Ciao Tymba,
    l'ho notato anch'io, ma non riesco a capire perchè, me lo spiegheresti per favore?!

    Anch'io nei precedenti lavori avevo agito così, salvando solo il percorso in un campo varchar, ma in questo caso ho pensato fosse meglio inserire tutto nel db, dovrò gestire un'enorme quantità di img...
    Ho già fatto tutto e non ho trovato questa enorme difficoltà ad inserirle...il problema purtoppo è nella visualizzazione.....perchè credo che apache e macosx abbiano qualche problema con header, infatti abilitandolo, viene visualizzata soltanto una pagina bianca, o, a volte, mi scarica un file index.php. Non capisco dove sia l'errore....
    Potresti aiutarmi...
    :ciauz:


  • User

    ciao Tymba,
    mi spiegheresti, per favore, il motivo per il quale sono tutti contrari al salvataggio sul db?

    Continuo ad essere confusa a riguardo.

    :bho: :ciauz:


  • User Attivo

    @Defly said:

    ciao Tymba,
    mi spiegheresti, per favore, il motivo per il quale sono tutti contrari al salvataggio sul db?

    Continuo ad essere confusa a riguardo.

    Il problema stà nella "velocità"

    Interrogare un database costa tempo, e questo tempo cresce con l'aumentare delle dimensioni del db.

    La soluzione comunemente utilizzata per risolvere questo tipo di problema rende più agile l'applicazione.

    Un database interrogato da una pagina Asp, Php ..
    deve essere leggero da consultare.
    Risparmiare KB su questo tipo di oggetti non è semplice.

    Nel tuo esempio puoi risparmiare KB evitando di salvare le immagini nel db.

    Inoltre aggiungo (se posso) è importante migliorare la velocità delle connessioni ai database!! è un argomento molto sentito da chi sviluppa siti formati prevalentemente da contenuti dinamici.

    Ci sono diverse regole da rispettare, tra queste:

    • Aprire il più tardi possibile, e chiudere il prima possibile la connessione.
    • Ottimizzare le query, specificando se possibile i nomi dei singoli campi invece di usare *.

    ...............

    ok? :ciauz:


  • User

    grazie mz, farò tesoro dei tuoi consigli....

    permettimi però di capire come funzionano queste imagefunction perchè ci combatto da 3 giorni e non capisco più nulla...

    supponendo di avere questa funzione che ridimensiona un'img:

    
    //CREO LA THUMBNAIL
    function makeThumbnail&#40;$o_file, $t_ht = 100&#41; &#123;
       $image_info = getimagesize&#40;$o_file&#41; ; // see EXIF for faster way
      
       switch &#40;$image_info&#91;'mime'&#93;&#41; &#123;
           case 'image/gif':
               if &#40;imagetypes&#40;&#41; & IMG_GIF&#41;  &#123; // not the same as IMAGETYPE
                   $o_im = imagecreatefromgif&#40;$o_file&#41; ;
               &#125; else &#123;
                   $ermsg = 'GIF images are not supported
    ';
               &#125;
               break;
           case 'image/jpeg'&#58;
               if &#40;imagetypes&#40;&#41; & IMG_JPG&#41;  &#123;
                   $o_im = imagecreatefromjpeg&#40;$o_file&#41; ;
               &#125; else &#123;
                   $ermsg = 'JPEG images are not supported
    ';
               &#125;
               break;
           case 'image/png'&#58;
               if &#40;imagetypes&#40;&#41; & IMG_PNG&#41;  &#123;
                   $o_im = imagecreatefrompng&#40;$o_file&#41; ;
               &#125; else &#123;
                   $ermsg = 'PNG images are not supported
    ';
               &#125;
               break;
           case 'image/wbmp'&#58;
               if &#40;imagetypes&#40;&#41; & IMG_WBMP&#41;  &#123;
                   $o_im = imagecreatefromwbmp&#40;$o_file&#41; ;
               &#125; else &#123;
                   $ermsg = 'WBMP images are not supported
    ';
               &#125;
               break;
           default&#58;
               $ermsg = $image_info&#91;'mime'&#93;.' images are not supported
    ';
               break;
       &#125;
      
       if &#40;!isset&#40;$ermsg&#41;&#41; &#123;
           $o_wd = imagesx&#40;$o_im&#41; ;
           $o_ht = imagesy&#40;$o_im&#41; ;
           // thumbnail width = target * original width / original height
           $t_wd = round&#40;$o_wd * $t_ht / $o_ht&#41; ;
    
           $t_im = imagecreatetruecolor&#40;$t_wd,$t_ht&#41;;
          
           imagecopyresampled&#40;$t_im, $o_im, 0, 0, 0, 0, $t_wd, $t_ht, $o_wd, $o_ht&#41;;
          
           imagejpeg&#40;$t_im&#41;;
          
           imagedestroy&#40;$o_im&#41;;
           imagedestroy&#40;$t_im&#41;;
       &#125;
       return isset&#40;$ermsg&#41;?$ermsg&#58;NULL;
    &#125;
    
    makeThumbnail&#40;$filename, 100&#41;;
    
    

    Se io non volessi stampare a video il risultato, ma salvarlo in una variabile in modo da mostrarlo a mio piacimento, come dovrei intervenire sulla funzione?

    Quello che non capisco è che, di solito, si scrive ad esempio:
    $img = fread(....); o $img = $x;
    ...
    header(...);
    echo $img;
    ...

    imagejpeg & co, come agiscono?
    Ho letto il manuale, ma non ho trovato nulla per includere il risultato in una variabile....

    sono totalmente fuori....
    Helpme.....

    :arrabbiato:


  • Moderatore

    Imagejpeg ritorna bool cioè vero o falso a seconda se l'immagine è stata creata o no.

    Includere in una variabile che significa?
    Puoi decidere se stampare a video l'immagine o salvarla su disco (remoto).

    http://it.php.net/imagejpeg

    🙂


  • User

    il mio script, legge i files da una directory, li memorizza in una variabile e li inserisce nel db...
    e fin qui tutto bene.
    quello che non riesco a fare è ridimensionare l'immagine che estraggo dal db.
    ovviamente quando la estraggo creo il file apposito di visualizzazione, ma non so' poi come applicare la funzione sopra elencata.
    o, ancora meglio, potrei inserire nel db l'immagine già ridimensionata, in modo da alleggerire il tutto, ma non sò come fare...

    Qualche suggerimento?!?

    :bho: :ciauz: