Visualizzazione risultati 1 fino 7 di 7

Discussione: Ridimensionamento immagine

  1. #1
    Guest

    Predefinito Ridimensionamento immagine

    Salve :P ulteriore problema riguardo al ridimensionamento immagini in php,il mio problema e questo,volevo far in modo che lo script (che vi riporto piu in basso) ridimensionasse le immagini senza perdere la loro proporzione originale,mi spiego meglio:
    lo script com'e ora,ridimensiona le immagini alla grandezza stabilita,ma se hanno proporzioni diverse,escono schiacciate e incomprensibili,volevo fare in modo che una volta stabilita la dimensione massima (in larghezza e altezza) lo script ridimensionasse l'immagine,in modo da avvicinarsi quanto piu possibile alla grandezza da me specificata,senza pero cambiare le proporzioni...

    ecco lo script:
    Codice PHP:
    <?php

    // PARAMETRI DI CONFIGURAZIONE
    define("LARGHEZZA",700);
    define("ALTEZZA",400);
    define("PROPORZIONI",1);
    define("QUALITA",50);

    function
    ridimensiona($immagine) {
    $header=array(1=>"gif",2=>"jpeg",3=>"png");
    // RIDIMENSIONAMENTO DELLA FOTO
    $dimensioni=getimagesize($immagine);
    if (
    $dimensioni[2] == 1)
    $img=imagecreatefromgif($immagine);
    if (
    $dimensioni[2] == 2)
    $img=imagecreatefromjpeg($immagine);
    elseif (
    $dimensioni[2] == 3)
    $img=imagecreatefrompng($immagine);
    $altezza=(PROPORZIONI) ? ceil($dimensioni[1]/$dimensioni[0]*LARGHEZZA) : ALTEZZA;
    $im=Imagecreatetruecolor(LARGHEZZA, $altezza);
    imagecopyresampled($im,$img,0,0, 0,0, LARGHEZZA,$altezza, $dimensioni[0],$dimensioni[1]);
    header("content-type: image/".$header[$dimensioni[2]]);
    imagejpeg($im,"",QUALITA);
    imagedestroy($im);
    }

    $link = $_GET['immagine'];;
    $immagine=isset($link) ? $link : "";
    if(
    file_exists($immagine)) {

    ridimensiona($immagine);
    }
    else
    echo
    "$immagine $link NON ESISTE!";



    ?>

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

    Predefinito

    devi giocare un po' con le proporzioni io faccio così, per avere thumbs iscrivibili in un quadrato 128x128:
    Codice:
    if (imagesx($picture) > imagesy($picture)) {
      $w = 128;
      $h = round(128 * imagesy($picture) / imagesx($picture));
    } else {
      $w = round(128 * imagesx($picture) / imagesy($picture));
      $h = 128;
    }
    edit: ovviamente così l'immagine diventerà tanto più piccola (come superficie) tanto più lontana dalla forma quadrata - per alcune immagini non è il massimo (e.g. foto panoramiche)
    Ultima modifica di funcool : 01-06-2007 alle ore 09.16.46

  3. #3
    Guest

    Predefinito

    hhm fammi capire... non riesco a capire le variabili...
    correggimi se sbaglio:

    $picture il percorso dell'immagine
    $w la larghezza max che puo prendere l'immagine
    $h l'altezza massima che puo prendere

    me lo studio un po... quindi secondo te incorporandolo nello script che ho riportato come andrebbe?

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

    Predefinito

    uhm, no

    $picture è l'immagine caricata ( come da guida di imagesx e imagesy, leggiamola suvvia ), cioé la tua $img

    $w e $h le assegni, quindi non possono essere dimensioni massime... sono le dimensioni a cui ridimensionerai la tua immagine per farla stare in un quadrato 128x128. Nel tuo script sono relativamente LARGHEZZA e $altezza

    lo butti dentro prima di $im = ImageCreateTrueColor($w, $h);


    edit: cmq per velocizzare ti converrebbe salvarli sti thumbnail, tutti in una directory. se esistono già li mostri, altrimenti li crei con il tuo script
    Ultima modifica di dreadnaut : 31-05-2007 alle ore 19.16.05

  5. #5
    Guest

    Predefinito

    Ci ho pensato... ma a quel punto ci sarebbe un altro problema... che succede se cancello un immagine dalla galleria? l'anteprima creata non la cancella nessuno e rimane li senza uno scopo ...
    cmq ho provato cosi ma dubito di aver fatto bene,visto che non e cambiato nulla,perdona la mia ignoranza,ma sono agli inizi

    Codice PHP:
    <?php

    // PARAMETRI DI CONFIGURAZIONE
    define("LARGHEZZA_MAX",700);
    define("ALTEZZA_MAX",400);
    define("PROPORZIONI",1);
    define("QUALITA",50);


    function
    ridimensiona($immagine) {


    $header=array(1=>"gif",2=>"jpeg",3=>"png");
    // RIDIMENSIONAMENTO DELLA FOTO
    $dimensioni=getimagesize($immagine);
    if (
    $dimensioni[2] == 1)
    $img=imagecreatefromgif($immagine);
    if (
    $dimensioni[2] == 2)
    $img=imagecreatefromjpeg($immagine);
    elseif (
    $dimensioni[2] == 3)
    $img=imagecreatefrompng($immagine);
    $altezza=(PROPORZIONI) ? ceil($dimensioni[1]/$dimensioni[0]*LARGHEZZA) : ALTEZZA;

    if (
    imagesx($img) > imagesy($img)) {
    $larghezza = LARGHEZZA_MAX;
    $altezza = round(LARGHEZZA_MAX * imagesy($img) / imagesx($img));
    } else {
    $larghezza = round(ALTEZZA_MAX * imagesx($img) / imagesy($img));
    $altezza = ALTEZZA_MAX;
    }

    $im=Imagecreatetruecolor($larghezza, $altezza);
    imagecopyresampled($im,$img,0,0, 0,0, $larghezza,$altezza, $dimensioni[0],$dimensioni[1]);
    header("content-type: image/".$header[$dimensioni[2]]);
    imagejpeg($im,"",QUALITA);
    imagedestroy($im);
    }

    $link = $_GET['immagine'];;
    $immagine=isset($link) ? $link : "";
    if(
    file_exists($immagine)) {

    ridimensiona($immagine);
    }
    else
    echo
    "$immagine $link NON ESISTE!";



    ?>

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

    Predefinito

    Codice:
     if (imagesx($img) > imagesy($img)) {
         $larghezza = LARGHEZZA_MAX;
         $altezza = round(  ALTEZZA_MAX   * imagesy($img) / imagesx($img));
          } else {
         $larghezza = round(  LARGHEZZA_MAX   * imagesx($img) / imagesy($img));
         $altezza = ALTEZZA_MAX;
        }
    le larghezze vanno sempre con le larghezze, e così le altezze (ho invertito le due variabili). Ricarica con Ctrl-F5 per sicurezza, magari si svanisce di aggiornar le immagini.

    si, il problema dei thumb scritti è che rimangono li. ti tocca, a mano o via script, passare ogni tanto e cancellare quelli che non hanno corrispondenza. Che poi, quanto occuperanno? magari basta, una volta all'anno, cancellarli tutti e via

    edit: miii, dei thumb 700x400 O_O allora ti converrebbe davvero salvarli! ... o forse, in effetti, no. boh
    Ultima modifica di dreadnaut : 31-05-2007 alle ore 19.41.03

  7. #7
    Guest

    Predefinito

    non sembra funzionare hhm...
    <_< l'immagine prende sempre e comunque la dimensione massima (sia in altezza che in larghezza),anche se e piu piccola,e viene deformata qualsiasi sia la sua risoluzione hhm non capisco >_>

    Edit: ho risolto,la cosa funziona,era il css che si impicciava :P grazie
    Ultima modifica di Dharlet : 01-06-2007 alle ore 17.33.04

Regole di scrittura

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