Visualizzazione risultati 1 fino 18 di 18

Discussione: Problema immagini troppo pesanti

  1. #1
    Guest

    Predefinito Problema immagini troppo pesanti

    SAlve, ho un problema: in un sito che stò creando devo visualizzare un sacco di immagini inserite dagli utenti e più precisamente 49 per pagina. Il problema è che quest immagini pesano mediamente 2 mega l'una, e caricarle tutte rallenta il sito rendendolo inaccessibile. Avete una soluzione?

  2. #2
    Guest

    Predefinito

    Rimpicciolirle?
    Con php puoi creare thumbnail quando le carichi online, così poi ti basi sulle miniature, non sulle originali ;)
    Ultima modifica di comunitavirtuali : 03-09-2010 alle ore 12.37.18

  3. #3
    Guest

    Predefinito

    Ho provato a integrare lo script con l'upload, ma dà qualche problema, nel senso che non crea il file thumb. Ecco il codice:

    Codice PHP:
    <?php
    //UPLOAD
    if (isset($_FILES['image'])){

    $path = "immagini/$id_user/";
    $max_size = 20000000;

    if (!isset(
    $_FILES['image'])) exit;

    if (
    is_uploaded_file($_FILES['image']['tmp_name'])) {

    if (
    $_FILES['image']['size']>$max_size) { echo "Il file &egrave; troppo grande e non potr&agrave; essere caricato!<br>\n"; exit; }

    $res = move_uploaded_file($_FILES['image']['tmp_name'], $path . $id . ".png");
    if (!
    $res) { echo "Upload fallito!<br>\n"; exit;
    } else {

    // Ottengo le informazioni sull'immagine originale
    list($width, $height, $type, $attr) = getimagesize($_FILES['image']['tmp_name']);

    // Creo la versione 120*90 dell'immagine (thumbnail)
    $width = $width / 10;
    $height = $height / 10;
    $thumb = imagecreatetruecolor($height, $width);
    $source = imagecreatefromjpeg($_FILES['image']['tmp_name']);
    imagecopyresized($thumb, $source, 0, 0, 0, 0, $height, $width, $width, $height);

    // Salvo l'immagine ridimensionata
    imagejpeg($thumb, $path . $id . "_thumb.jpg", 60);

    }

    } else { echo
    "Il tipo di file selezionato &egrave; errato<br>\n"; exit; }
    }
    ?>

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Lo sposti, e poi lo cerchi nella posizione originale - è dura che si trovi ancora li

  5. #5
    Guest

    Predefinito

    Quindi che devo fare?

  6. #6
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    In questa riga sposti il file da una posizione ad un'altra
    Codice PHP:
    $res = move_uploaded_file($_FILES['image']['tmp_name'], $path . $id . ".png");
    e più avanti lo cerchi nella posizione originale
    Codice PHP:
    $source = imagecreatefromjpeg($_FILES['image']['tmp_name']);
    Che cosa devi fare?!

  7. #7
    Guest

    Predefinito

    Ok, corretto, adesso il codice è così, ma c'è un problema: l'immagine che carica è completamente nera. Come posso fare?

    Codice PHP:
    <?php
    //UPLOAD
    if (isset($_FILES['image'])){

    $path = "immagini/$id_user/";
    $max_size = 20000000;

    if (!isset(
    $_FILES['image'])) exit;

    if (
    is_uploaded_file($_FILES['image']['tmp_name'])) {

    if (
    $_FILES['image']['size']>$max_size) { echo "Il file &egrave; troppo grande e non potr&agrave; essere caricato!<br>\n"; exit; }

    $res = move_uploaded_file($_FILES['image']['tmp_name'], $path . $id . ".png");
    if (!
    $res) { echo "Upload fallito!<br>\n"; exit;
    } else {

    // Ottengo le informazioni sull'immagine originale
    list($width, $height, $type, $attr) = getimagesize($path . $id . ".png");

    // Creo la versione thumbnail
    $width = $width / 10;
    $height = $height / 10;
    $thumb = imagecreatetruecolor($height, $width);
    $source = imagecreatefromjpeg($path . $id . "_thumb.jpg", 60);
    imagecopyresized($thumb, $source, 0, 0, 0, 0, $height, $width, $width, $height);

    // Salvo l'immagine ridimensionata
    imagejpeg($thumb, $path . $id . "_thumb.jpg", 60);

    }

    } else { echo
    "Il tipo di file selezionato &egrave; errato<br>\n"; exit; }
    }
    ?>

  8. #8
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Controlla bene i parametri che passi a imagecopyresized, forse c'è qualcosa che non va li.

  9. #9
    Guest

    Predefinito

    No, và bene tutto

  10. #10
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Come minimo hai invertito l'ordine di $height e $width, e la funzione vuole le dimensioni prima e dopo il ridimensionamento: source e destination. Che senso ci sarebbe nel passargli due volte gli stessi valori?

    Vabbeh, buona fortuna.
    Ultima modifica di dreadnaut : 03-09-2010 alle ore 19.20.23

  11. #11
    Guest

    Predefinito

    Aspetta. Ho letto che ci vogliono le GD2. Ma vanno incluse? E se si come?

  12. #12
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Non devi includere niente. Semplicemente sbagli a passare i parametri, e non ti sforzi di leggere con attenzione la documentazione, punto.

  13. #13
    Guest

    Predefinito

    Forse ho trovato! Avevo invertito i parametri dell'altezza e della larghezza. Ecco il nuovo codice, ma non funziona.

    Codice PHP:
    <?php
    //UPLOAD
    if (isset($_FILES['image'])){

    $path = "immagini/$id_user/";
    $max_size = 20000000;

    if (!isset(
    $_FILES['image'])) exit;

    if (
    is_uploaded_file($_FILES['image']['tmp_name'])) {

    if (
    $_FILES['image']['size']>$max_size) { echo "Il file &egrave; troppo grande e non potr&agrave; essere caricato!<br>\n"; exit; }

    $res = move_uploaded_file($_FILES['image']['tmp_name'], $path . $id . ".png");
    if (!
    $res) { echo "Upload fallito!<br>\n"; exit;
    } else {


    $filename = $path . $id;
    $percent = 0.1;

    header('Content-type: image/jpeg');

    list(
    $width, $height) = getimagesize($filename.".png");
    $newwidth = $width * $percent;
    $newheight = $height * $percent;
    $thumb = imagecreatetruecolor($newwidth, $newheight);
    $source = imagecreatefromjpeg($filename);
    imagecopyresized($thumb, $source."_thumb.jpg", 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    imagejpeg($thumb);


    }
    } else { echo
    "Il tipo di file selezionato &egrave; errato<br>\n"; exit; }
    }
    ?>
    Ultima modifica di enkantar : 03-09-2010 alle ore 19.43.28

  14. #14
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Rileggendo ancora la documentazione noteresti che imagecopyresized() prende i parametri
    Codice:
    imagecopyresized( resource $dst_image  , resource $src_image, ... )
    che sono entrambi "resource". Perché invece gli passi come secondo un nome di file? E poi è "source" - sorgente, NON destinazione.

    Inoltre imagejpeg senza un nome di file manda l'immagine in output, ma suppongo tu la voglia salvare

    Codice PHP:
    imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    imagejpeg($thumb, 'thumb_' . $filename );
    Ultima modifica di dreadnaut : 03-09-2010 alle ore 20.12.08

  15. #15
    Guest

    Predefinito

    Adesso non fà proprio niente. Il codice è questo:

    Codice PHP:
    <?php
    //UPLOAD
    if (isset($_FILES['image'])){

    $path = "immagini/$id_user/";
    $max_size = 20000000;

    if (!isset(
    $_FILES['image'])) exit;

    if (
    is_uploaded_file($_FILES['image']['tmp_name'])) {

    if (
    $_FILES['image']['size']>$max_size) { echo "Il file &egrave; troppo grande e non potr&agrave; essere caricato!<br>\n"; exit; }

    $res = move_uploaded_file($_FILES['image']['tmp_name'], $path . $id . ".png");
    if (!
    $res) { echo "Upload fallito!<br>\n"; exit;
    } else {

    // Ottengo le informazioni sull'immagine originale
    list($width, $height, $type, $attr) = getimagesize($path . $id . ".png");

    // File and new size
    $filename = $path . $id;
    $percent = 0.1;

    // Content type
    header('Content-type: image/jpeg');

    // Get new sizes
    list($width, $height) = getimagesize($filename.".png");
    $newwidth = $width * $percent;
    $newheight = $height * $percent;

    // Load
    $thumb = imagecreatetruecolor($newwidth, $newheight);
    $source = imagecreatefromjpeg($filename);

    imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    imagejpeg($thumb, 'thumb_' . $filename . '.jpg');

    }
    } else { echo
    "Il tipo di file selezionato &egrave; errato<br>\n"; exit; }
    }
    ?>

  16. #16
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    L'immagine che ti arriva è png o jpeg? Perché ovunque la chiami ".png", ma poi per caricarla usi - e non metti l'estensione, quindi non trova il file e non carica nulla.
    Codice PHP:
    $source = imagecreatefromjpeg($filename);
    La riga header( ... ) è inutile, perché non stai visualizzando l'immagine (sopra mandi in output del testo ad esempio) e probabilmente ti nasconde i messaggi di errore.

  17. #17
    Guest

    Predefinito

    Allora, il file che carico è .png, ma il file thumb vorrei che fosse .jpg. Questo è il codice attuale:


    Codice PHP:
    <?php
    //UPLOAD
    if (isset($_FILES['image'])){

    $path = "immagini/$id_user/";
    $max_size = 20000000;

    if (!isset(
    $_FILES['image'])) exit;

    if (
    is_uploaded_file($_FILES['image']['tmp_name'])) {

    if (
    $_FILES['image']['size']>$max_size) { echo "Il file &egrave; troppo grande e non potr&agrave; essere caricato!<br>\n"; exit; }

    $res = move_uploaded_file($_FILES['image']['tmp_name'], $path . $id . ".png");
    if (!
    $res) { echo "Upload fallito!<br>\n"; exit;
    } else {

    // Ottengo le informazioni sull'immagine originale
    list($width, $height, $type, $attr) = getimagesize($path . $id . ".png");

    // File and new size
    $filename = $path . $id;
    $percent = 0.1;

    // Get new sizes
    list($width, $height) = getimagesize($filename.".png");
    $newwidth = $width * $percent;
    $newheight = $height * $percent;

    // Load
    $thumb = imagecreatetruecolor($newwidth, $newheight);
    $source = imagecreatefromjpeg($filename.'.jpg');

    imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    imagejpeg($thumb, 'thumb_' . $filename . '.jpg');

    }
    } else { echo
    "Il tipo di file selezionato &egrave; errato<br>\n"; exit; }
    }
    ?>

  18. #18
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    -sigh-
    Codice PHP:
    $source = imagecreatefrompng($filename.'.png');

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •