Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Resize immagine tipo "run time"

    Ciao,
    vorrei sapere se (e magari quale o dei suggerimenti) c'è il modo di fare il resize di alcune immagini come se fosse tipo un "run time". Mi spiego meglio:
    io voglio creare una sorta di lista di foto (piccola gallery) Le mie foto sono 200x300 (dove 300 è il lato + grande siano esse orizzontali oppure verticali) Nel mio piccolo visualizzatore vorrei farle vedere indistintamente a 150 x 150, chiaramente senza che si ridimensionino in malo modo (cioè che non perdano le proporzioni).
    In pratica mi servirebbe una sorta di resize + crop. Ho visto in giro un po' di script, ma non sono riuscito a farli funzionare.
    Chiaramente so benissimo che potrei fare un vero e proprio resize dell'immagine e salvarla, ma vorrei evitarlo visto che ho oltre 4000 foto.

    Esiste quindi un modo per farle vedere in un quadrato (chiaramente tagliando una parte della foto), magari centrando l'immagine, senza doverle riprocessare tutte ?

    Grazie, ciao

    Jonathan
    -------------------------
    ..::`DrUmM\n0`::..
    www.jonathandomenici.com

  2. #2
    La soluzione migliore è quella di salvare un copia dell'immagine se non è presente.

    fai cosi:
    il browser richiede l'immagine.
    il server controlla nella dir e se c'è la miniatura la mostra.

    Se la miniatura non c'è la crea e la salva per le prossime richieste.

    Per creare la miniatura ti posso dare questa funzione:

    Codice PHP:
    /**
     * make_thumb_square()
     *
     * @param mixed $image : L'immagine da croppare
     * @param mixed $a : altezza dell'immagine
     * @param mixed $l : Larghezza dell'immagine
     * @param mixed $final : dimensioni finali dell'immagine
     * @param mixed $dir_to_put : dove mettere la miniatura creata
     * @param mixed $path : path del sito
     * @return : crea l'immagine croppata nella dir indicata
     */
    function make_thumb_square ($image,$a,$l,$final,$dir_to_put,$path) {

        
    # estensione per creare le immagini
        
    $estensione explode(".",strtolower($image));
        
    $ext array_pop($estensione);

        
    # preparo lo switch per il tipo esatto di funzione in base al tipo d'immagine
        
    switch($ext){
        default:
            
    $funzione_image_create "ImageCreateFromJpeg";
            
    $funzione_image_new "ImageJpeg";
        break;
        case 
    "jpg":
            
    $funzione_image_create "ImageCreateFromJpeg";
            
    $funzione_image_new "ImageJpeg";
        case 
    "jpeg":
            
    $funzione_image_create "ImageCreateFromJpeg";
            
    $funzione_image_new "ImageJpeg";
        break;
        case 
    "png":
            
    $funzione_image_create "ImageCreateFromPng";
            
    $funzione_image_new "ImagePng";
        break;
        case 
    "gif":
            
    $funzione_image_create "ImageCreateFromGif";
            
    $funzione_image_new "ImageGif";
        break;
        }

        
    $quality_thumb = ($ext == 'png') ? '8' '80';

        
    # vedo in quale cartella si trova l'immagine
        
    $file $path.'/'.urldecode($image);
        
    $file_thumb $path.'/'.$dir_to_put.'/'.urldecode($image);

        
    $centerX $a/2;
        
    $centerY $l/2;

        if( 
    $l $a ){
          
    $luy 0;
          
    $lux $centerY-$centerX;
          
    $rdy $a;
          
    $rdx $a;
        }
        else{
          
    $lux 0;
          
    $luy $centerX-$centerY;
          
    $rdx $l;
          
    $rdy $l;
        }

        
    # restituisce un elemento identificativo per l'immagine data
        
    $img_original $funzione_image_create($file);

        
    //ImageCreateTrueColor: funzione per creare un'immagine con illimitati colori e con altezza e lunghezza dati
        
    $img_final ImageCreateTrueColor($final,$final);

        
    # funzione per ridurre le immagini:
        /*    il primo argomento è il nome della nuova immagine,
            il secondo è il nome originale,
            i quattro prossimi valori sono le porzioni di immagine da prendere
            (se messe a zero prende tutta l'immagine originale),
            gli ultimi quattro valori sono le dimensioni delle due immagini. */

        
    imagecopyresampled($img_final$img_original00$lux$luy$final$final$rdx$rdy);

        
    //questa funzione crea fisicamente il nuovo file
        
    $funzione_image_new($img_final$file_thumb$quality_thumb);

        
    //queste due funzioni liberano la memoria dalle immagini create
        
    ImageDestroy($img_original);
        
    ImageDestroy($img_final);


    # end make_thumb_square 
    Ciao!

  3. #3
    ciao, grazie per la risposta!

    una piccola domanda.
    come posso usarla questa funzione ?

    io nella mia pagina php ho

    foreach($result as $value){
    ?> <image src="".....> <?
    }

    posso usarla dentro il tag <image> ?

    grazie
    -------------------------
    ..::`DrUmM\n0`::..
    www.jonathandomenici.com

  4. #4
    no, con questa funzione devi, prima di mostrare qualunque cosa, controllare se la thumb esiste, se non esiste chiamare la funzione che ti crea la thumb e dopo richiamarla normalmente.


    es.

    if(!file_exists("$path/$dir_to_put/$img")
    {
    # crei il file
    make_thumb_square(PARAMETRI);
    }

    # mostri il file
    Ciao!

  5. #5
    ok adesso prove.
    un'altra cosa...

    non capisco come passare $final

    guarda... ti riporto i miei parametri e come la chiamo.
    mi dici se sono ok ?

    Codice PHP:
    $image "http://www.miosito.it/public/upload/foto/stdImg/foto_file/0/".$valore[jnc_foto_file];
    $a "162";
    $l "162";
    $final "162";
    $dir_to_put "imagecache"//questa cartella sta allo stesso livello dello script che chiama la funzione
    $path "http://www.miosito.it/"
    e la chiamo così

    make_thumb_square($image,$a,$l,$final,$dir_to_put, $path)


    adesso provo a fare il controllo.

    qualche consiglio ?

    grazie mille, gentilissimo
    -------------------------
    ..::`DrUmM\n0`::..
    www.jonathandomenici.com

  6. #6
    a ed l sono le dimensioni attuali dell'immagine, se non le hai già in db le devi prendere con getimagesize();
    $final lo decidi tu ed è la larghezza finale del file


    $image è il solo nome dell'immagine
    $path è la directory dove si trova l'immagine (non del sito come ho indicato nel primo post)

    esempio:

    Codice PHP:
    /* per 
    [url]http://www.sito.it/images/immagine.jpg[/url]
    [url]http://www.sito.it/images/thumbs/immagine.jpg[/url]
    */

    $image "immagine.jpg";
    $path $_SERVER['DOCUMENT_ROOT'] . '/images';

    # se non li hai, $l ed $a
    list($l,$a) = getimagesize("$path/$image");

    $dir_to_put 'thumbs';
    $final '50' # pixel di larghezza del file thumb

    # poi chiami la funzione
    make_thumb_square ($image,$a,$l,$final,$dir_to_put,$path
    Ciao!

  7. #7
    grazie mille. funziona perfettamente.

    Ho trovato anche un'altra cosa simile....


    http://shiftingpixel.com/2008/03/03/...image-resizer/

    iao e grazie ancora!
    -------------------------
    ..::`DrUmM\n0`::..
    www.jonathandomenici.com

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.