• User

    generare thumbnail

    Non riesco proprio a risolvere questo problema.
    Ho un db mysql con un campo Foto nel quale viene salvato il percorso delle immagini contenute in una cartella dal nome fotografie...ora quello che vorrei è che nella visualizzazione dei risultati delle queryes che l'utente compie sul db l'immagine apparisse ridimensionata e non nelle dimensioni originali (esagerate !!!).
    Leggendo qua e in là ho provato ad applicare un pò di codice...ma niente.
    Vi posto le pagine:
    config.php

    <?php
    $db_host="";
    $db_user="";
    $db_password="";
    $db_database="";
    $connessione=mysql_connect&#40;$db_host,$db_user,$db_password&#41; or die &#40;"Errore nella connessione al Mysql:" . mysql_error&#40;&#41;&#41;;
    mysql_select_db&#40;$db_database,$connessione&#41; or die &#40;"Errore nella selezione del db&#58;" . mysql_error&#40;&#41;&#41;;
    
    $larghezza=200;
    $altezza=200;
    $proporzioni=1;
    $qualità=100;
    $nomefileridimensiona="ridimensiona.php";
    ?> 
    

    ridimensiona.php

    <?php
    $db_host="";
    $db_user="";
    $db_password="";
    $db_database="";
    $connessione=mysql_connect&#40;$db_host,$db_user,$db_password&#41; or die &#40;"Errore nella connessione al Mysql&#58;" . mysql_error&#40;&#41;&#41;;
    mysql_select_db&#40;$db_database,$connessione&#41; or die &#40;"Errore nella selezione del db&#58;" . mysql_error&#40;&#41;&#41;;
    
    require_once&#40;"config.php"&#41;; 
    define&#40;"LARGHEZZA",$larghezza&#41;; 
    define&#40;"ALTEZZA",$altezza&#41;; 
    define&#40;"PROPORZIONI",$proporzioni&#41;; 
    define&#40;"QUALITA",$qualità&#41;; 
    
    function ridimensiona&#40;$Foto&#41; &#123; 
        $header=array&#40;1=>"gif",2=>"jpeg",3=>"png",4=>"jpg"&#41;; 
        // RIDIMENSIONAMENTO DELLA FOTO 
        $dimensioni=getimagesize&#40;$Foto&#41;; 
        if &#40;$dimensioni&#91;2&#93; == 1&#41; 
            $img=imagecreatefromgif&#40;$Foto&#41;; 
        if &#40;&#40;$dimensioni&#91;2&#93; == 2&#41; || $dimensioni&#91;2&#93; == 4&#41; 
            $img=imagecreatefromjpeg&#40;$Foto&#41;; 
        elseif &#40;$dimensioni&#91;2&#93; == 3&#41; 
            $img=imagecreatefrompng&#40;$Foto&#41;; 
        $altezza=&#40;PROPORZIONI&#41; ? ceil&#40;$dimensioni&#91;1&#93;/$dimensioni&#91;0&#93;*LARGHEZZA&#41; &#58; ALTEZZA; 
        $im=Imagecreatetruecolor&#40;LARGHEZZA, $altezza&#41;; 
        imagecopyresampled&#40;$im,$img,0,0, 0,0, LARGHEZZA,$altezza, $dimensioni&#91;0&#93;,$dimensioni&#91;1&#93;&#41;; 
        header&#40;"content-type&#58; image/".$header&#91;$dimensioni&#91;2&#93;&#93;&#41;; 
        imagejpeg&#40;$im,"",QUALITA&#41;; 
        imagedestroy&#40;$im&#41;; 
    &#125; 
    
    $Foto=isset&#40;$_GET&#91;'Foto'&#93;&#41; ? $_GET&#91;'Foto'&#93; &#58; ""; 
    if&#40;file_exists&#40;$Foto&#41;&#41; 
        ridimensiona&#40;$Foto&#41;; 
    else 
        echo "$Foto NON ESISTE!"; 
    ?> 
    

    pagina con query di ricerca (nella quale l'immagine dovrebbe vedersi ridimensionata)```
    <?php
    $db_host="";
    $db_user="";
    $db_password="";
    $db_database="";
    $connessione=mysql_connect($db_host,$db_user,$db_password) or die ("Errore nella connessione al Mysql:" . mysql_error());
    mysql_select_db($db_database,$connessione) or die ("Errore nella selezione del db:" . mysql_error());

    $query="SELECT Foto FROM fotoaereeverticali WHERE AnnoRipresa LIKE '%$_POST[AnnoRipresa]%''";

    $risultato=mysql_query($query,$connessione) or die ("Errore nella query:" . mysql_error());

    while($riga=mysql_fetch_array($risultato))
    {?>
    <tr>
    <td colspan="2">
    ![image](ridimensiona.php?Foto=<?php print ()">
    </tr>
    }
    ?>

    Il risultato che ottengo è la classica iconcina con la x rossa, ma sulle proprietà mi da 
    Indirizzo(URL)= nome_sito/ridimensiona.php?Foto=\fotografie\nome_immagine
    
    se provo a chiamare direttamente nell'indirizzo del browser ```
    nome_sito/ridimensiona.php?Foto=\fotografie\nome_immagine
    ``` mi appare questo messaggio di errore
    
    

    Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 2848 bytes) in /home/mhd-01/www.space2place.org/htdocs/ridimensiona.php on line 41

    $img=imagecreatefromjpeg($Foto);

    Se invece modifico l'orientamento degli slash 
    

    nome_sito/ridimensiona.php?Foto=/fotografie/V_TO_00001.jpg

    mi dice
    

    /fotografie/V_TO_00001.jpg NON ESISTE!

    
    Qualcuno può darmi un consiglio?

  • Moderatore

    Ciao.

    Il codice che hai scritto mi semrba corretto. 🙂

    A sto punto penso che il problema sia:

    1. non hai le gd installate
    2. hai un problema nel db.

    Per il primo caso:
    crea un file e dentro mettici solo:

    <?php
    echo phpinfo();
    ?>

    dovresti avere nella pagina uan riga tipo:
    GD Support enabled

    se non ce l'hai devi installare le gdlib.

    Visto che ci sei, nel rigo sotto c'è stampata la versione delle gd (GD Version ).

    Se sono invece installate, se sostituisci
    ![image](ridimensiona.php?Foto=<?php print ()"> con
    ![image](<?php print ()"> ti stampa le foto non ridimensionate?

    :ciauz:


  • User

    Non credo di avere un problema nel Db, infatti ho sempre visualizzato perfettamente le immagini, solo ora che ho deciso di provare a creare thumbnail non me le stampa.
    Ho provato a lanciare il file phphinfo.php ma non nessuna riga che faccia riferimento alle GD


  • Moderatore

    phpinfo.php? 😐

    Cos'è?

    BTW se hai fatto come ti ho detto il problema è che non hai le gd installate. 🙂


  • User Attivo

    [url=http://www.senamion.it/2006/06/25/php-errore-con-immagini-di-grandi-dimensioni-imagecreatefromjpeg/]Qua parla dell'errore con immagini grosse per imageCreateFromJpeg


  • User Attivo

    Prova a inserire nello script di ridimensionamento questo cdoice iniziale

    ini_set&#40;"memory_limit", "24M"&#41;;
    

    e rimetti gli slash com'erano inizialmente, facci sapere!


  • User

    Ho provato a fare tutto quello che mi avete suggerito ma continua a non farmi vedere l'immagine ridimensionata e dire ```
    /fotografie/V_TO_00001.jpg NON ESISTE!


  • Moderatore

    Scusami se insisto:

    puoi creare un file chiamandolo prova.php e metterci dentro questo codice?

    <php

    echo phpinfo();

    ?>

    Una volta fatto caricalo con l'ftp e leggi cosa dice.
    TRa le tante cose deve starci una parte dedicata alle gd.
    E deve starci una riga con scritto
    Gd support.

    Cosa dice ? Enable o disable?

    Così, tanto per scrupolo. 🙂


  • User

    L'ho fatto....e in relazione alle GD mi dice

    GD Support  enabled  
    GD Version  bundled &#40;2.0.28 compatible&#41;  
    FreeType Support  enabled  
    FreeType Linkage  with freetype  
    GIF Read Support  enabled  
    GIF Create Support  enabled  
    JPG Support  enabled  
    PNG Support  enabled  
    WBMP Support  enabled  
    XBM Support  enabled  
    
    

  • Moderatore

    Ok.

    Quanto son grandi ste immagini che vuoi ridimensionare?
    Quante ne ridimensioni ogni volta? 🙂


  • User Attivo

    Beh, io penso che adesso il problema sia diverso. Il fatal error non esce più, l'errore dunque è da ricercare nel percorso del file, non so magari prova invece che con il percorso locale con quello della rete(http://...) se lo script non trova il file non è di certo problema di gd o di memoria insufficiente!


  • Super User

    non è che per caso usi l'url rewriting e quindi ti "incasini" con i percorsi?

    anche se l'url viene riscritto poi devi avere il percorso di riferimento corretto e la gd non vuole un percorso di tipo http ma "fisico".

    :ciauz: