• User Attivo

    creare funzione per crop

    Ciao a tutti!
    Tramite questo script riesco a ridimensionare e croppare una immagine
    [php]

    <?php
    // Original image
    $filename = 'http://www.xxxxxxx.xx/pfm.jpg';

    // Get dimensions of the original image
    list($current_width, $current_height) = getimagesize($filename);

    // The x and y coordinates on the original image where we
    // will begin cropping the image
    $left = 50;
    $top = 50;

    // This will be the final size of the image (e.g. how many pixels
    // left and down we will be going)
    $crop_width = 200;
    $crop_height = 200;

    $nuovonome=date("YmdHis");

    // Resample the image
    $canvas = imagecreatetruecolor($crop_width, $crop_height);
    $current_image = imagecreatefromjpeg($filename);
    imagecopy($canvas, $current_image, 0, 0, $left, $top, $current_width, $current_height);
    imagejpeg($canvas, $nuovonome, 100);

    echo '<img src="'.$nuovonome.'" />';

    ?>
    [/php]praticamente nel mio server crea una immagine ridimensionata e croppata.
    Vorrei pero' creare una funzione in modo che la "source" di ogni immagine anche se provengono da altri siti siano automaticamente croppate...
    poi se riuscissi anche a dare un tempo in modo che le immagini vengano eliminate dal server dopo un po....
    Sapete darmi una mano o avete suggerimenti ??

    Se le immagini provengono da un server e vengono lette tramite simplyxml forse mi conviene aggiungere al nome originale la data altrimenti non riuscirei a farle scrivere con nomi diversi nel server giusto ?

    Grazie!!

    Grazie!!!!


  • ModSenior

    Ciao pettedemon,

    puoi utilizzare la funzione filemtime per guardare la data di ultima modifica dell'immagine e cancellarla se passato tot tempo.
    Tieni prensete che se vengono caricate 2 immagini nello stesso secondo una sovrascriverà l'altra, potresti usare un hash della funzione uniqid per generare un nome casuale.


  • User Attivo

    Ciao sono riuscito a trasformarla in funzione, gli passo il valore del nome del file anche se proviene da un sito esterno...
    Il problema è ora nel ciclo foreach...

    [PHP]function pette($filename){

    // Get dimensions of the original image
    list($current_width, $current_height) = getimagesize($filename);

    // The x and y coordinates on the original image where we
    // will begin cropping the image
    $left = 50;
    $top = 50;

    // This will be the final size of the image (e.g. how many pixels
    // left and down we will be going)
    $crop_width = 100;
    $crop_height = 100;

    $nuovonome=date("YmdHis");
    $nuovonome.='.jpg';

    // Resample the image
    $canvas = imagecreatetruecolor($crop_width, $crop_height);
    $current_image = imagecreatefromjpeg($filename);
    imagecopy($canvas, $current_image, 0, 0, $left, $top, $current_width, $current_height);
    imagejpeg($canvas, $nuovonome, 100);

    //echo ('<img src="'.$nuovonome.'" width="100" height="100">');

    return $nuovonome;

    }[/PHP]

    Questa funzione la applico al mio ciclo foreach che mi sta leggendo un xml

    [PHP]
    foreach ($xml->children() as $second_gen) {

    $filename=$second_gen['immagine'];
    
    echo '<div id="contiene_immagine"><img src="'. pette($filename).'" width="140" height="70" /></div>';
    

    [/PHP]

    pero' c'è ancora qualcosa che non funziona, io vorrei che la funzione rinominasse ogni file passato che estrae il mio ciclo... ma non succede...
    Cosa sto sbagliando ?
    E per dire al server che cancelli le immagini ?

    Grazieee


  • User Attivo

    Ho risolto con uno stringreplace visto che le immagini provengono tutte dallo stesso server...

    [PHP]
    $filename = str_replace('http://xxxxxxx/', '', $filename);
    $nuovonome= $filename;
    [/PHP]

    Il problema è che questo dovrei metterlo nella homepage di un sito che viene visitato da piu di 2000 visitatori al giorno... penso che una cosa del genere faccia fare un crack al server... considerando che i visitatori spesso sono tutti contemporaneamente ...

    Esiste una soluzione meno impegnativa per il server ?
    Se ogni utente creare una copia delle immagini a fine giornata il server fa puff!!!!!


  • ModSenior

    Ma perchè fai tutte queste operazioni ogni volta che viene richiesta la homepage?
    Non ti basta farle 1 volta?


  • User Attivo

    Certo che basterebbe una volta ... Ma scusa la domanda ... Come faccio? Questo è un sistema che legge un xml e lo importa nella mia homepage... Ogni utente che richiede la pagina faquesta operazione... Come posso evitarlo?
    [URL=http://www.giorgiotave.it/forum/gt-world/101972-forum-gt-disponibile-alle-versioni-per-telefoni-cellulari.html]Postato via Mobile


  • ModSenior

    Dovresti pensare a fare un sistema cache ad esempio, che se sono trascorsi meno di 10 minuti dall'ultima rigenerazione non rifà le operazioni, cosi da allegerire il carico.
    Per questo genere di cose bisogna analizzare per bene cosa avviene e per quanto è possibile tenere una cache (Se è possibile), e poi decidere come agire di conseguenza.


  • User Attivo

    Praticamente fantascienza per me... Magari riesco a creare una cache ma per il controllo come posso fare ? A questo punto il server lavora ancora molto perché deve fare il controllo ogni volta che l utente lo chiede o sbaglio ?
    [URL=http://www.giorgiotave.it/forum/gt-world/101972-forum-gt-disponibile-alle-versioni-per-telefoni-cellulari.html]Postato via Mobile


  • ModSenior

    Lavora molto relativamente, utilizzando ad esempio la funzione filemtime fai un solo accesso al disco per vedere se occorre rigenerare la cache, il risultato della funzione tra l'altro viene messo in cache da php stesso per cui è un operazione il cui costo è praticamente nullo.
    Invece del disco poi si possono usare altri sistemi come memcache per utilizzare la ram(Sugli hosting difficilmente è possibile utilizzare ciò).


  • User Attivo

    quindi se non ho sbagliato questo fa in modo che ogni volta ci sia un controllo giusto ?

    [PHP]function pette($filename){

    list($current_width, $current_height) = getimagesize($filename);

    $left = 50;
    $top = 0;

    $crop_width = 70;
    $crop_height = 70;

    $canvas = imagecreatetruecolor($crop_width, $crop_height);
    $current_image = imagecreatefromjpeg($filename);
    imagecopy($canvas, $current_image, 0, 0, $left, $top, $current_width, $current_height);

    $filename = str_replace('http://www.xxxxx/images/', '', $filename);

    $nuovonome= 'temp/'.$filename;
    //$nuovonome.='.jpg';

    //qui facciamo il controllo
    if (file_exists($nuovonome)) {
    return $nuovonome;
    }

    else {

    imagejpeg($canvas, $nuovonome, 100);

    //echo ('<img src="'.$nuovonome.'" width="100" height="100">');

    return $nuovonome;
    }

    }[/PHP]