• Moderatore

    manca qualcosa a quella pagina imho

    btw: CHE COSA??? = nome del file dove risiede quella funzione.


  • Bannato User Attivo

    MA non posso usarlo come funzione semplice? devo per forza mettere quel codice in un file? Non è bello fare così 😞

    Ok, faccio con la pagina aggiuntiva... ma allora come passo il nome e dove si trova il file?

    Così? ..../paginathumb.php?src=upload/qualcosa/pics.jpg?


  • Bannato User Attivo

    Ho creato la pagina che contiene il codice.
    La richiamo in questo modo:

    echo "<p><img src="../include/pics-resize-pics.php?l=200&src=../pics/reviews/$rowimg[pics_url]"></p>";

    E non si vede l'anteprima. Sicuramente sbaglio la $src della foto... come faccio a capire come devo scrivergliela???


  • Moderatore

    Ti ripeto che quel codice è parziale, imho.

    C'è una funzione che chiama due parametri ma non viene essa stessa chiamata da nessuno.

    c'è imagecopyresambled che chiama due variabili create dalla stessa che non le vedrà mai in quanto non richiamata e non disponibili.

    imho hai copiato una sola parte.

    Ti consiglio di dare una letta al manuale:
    a partire da:
    http://it.php.net/manual/it/ref.image.php

    e questo articolo su html.it
    http://php.html.it/articoli/leggi/930/immagini-dinamiche-le-estensioni-gd-in-php/

    :ciauz:


  • User Attivo

    In fondo al file php dove hai messo la funzione prova a mettere anche qualcosa tipo:

    
    $l = $_REQUEST['l'];
    $src = $_REQUEST['src'];
     OutThumb($src, $l);
    
    

  • Bannato User Attivo

    La pagina con la funzione che mi crea le thumbnails già ce l'ho, e funzionante.
    Essa contiene in seguente codice:

    <?php
    $maxx = $_GET["maxx"];
    $maxy = $_GET["maxy"];
    $source_image_URL = $_GET["src"];
    $source_image = imagecreatefromjpeg($source_image_URL);
    list($width, $height) = getimagesize($source_image_URL);
    $percent1 = $width / $maxx;
    $percent2 = $height / $maxy;
    $percent = max($percent1,$percent2);
    $new_eight = round($height /$percent);
    $new_width = round($width /$percent);
    $dest_image = imagecreatetruecolor($new_width, $new_eight);
    imagecopyresampled ($dest_image, $source_image, 0, 0, 0, 0,
     $new_width, $new_eight, $width, $height);
    header("Content-type: image/jpeg");
    imagejpeg($dest_image);
    imagedestroy($dest_image);
    imagedestroy($source_image);
    ?>
    

    e la utilizzo in questo modo:

    <img src=\"../resize.php?maxx=110&maxy=1110&src=skiforum/upload/$row[cat_upload]/$row[url_upload]\">
    

    e mi funziona.

    Ho inserito in quella delle thumbnails quadrate due get per ottenere le info, ora è la seguente:

    <?php
    $l = $_GET["l"];
    $src = $_GET["src"];
    function OutThumb($src, $l){
      $size = getimagesize($src);
      if( $size[2] == 2 ){$im = @imagecreatefromjpeg($src);}
      elseif( $size[2] == 1 ){$im = @imagecreatefromgif($src);}
      elseif( $size[2] == 3 ){$im = @imagecreatefrompng($src);}
      if( $size[0]>$l or $size[1]>$l ){
        $centerX = $size[0]/2;
        $centerY = $size[1]/2;
        if( $size[0] > $size[1] ){
          $luy = 0;
          $lux = $centerX-$centerY;
          $rdy = $size[1];
          $rdx = $size[1];
        }
        else{
          $lux = 0;
          $luy = $centerY-$centerX;
          $rdx = $size[0];
          $rdy = $size[0];
        }
    
        if( (GDVersion() == 2) AND ($size[2] != 1) ){
          $new = imagecreatetruecolor($l, $l);
          imagecopyresampled($new, $im, 0, 0, $lux, $luy, $l, $l, $rdx, $rdy);
        }
        else{
          $new = imagecreate($l, $l);
          imagecopyresized($new, $im, 0, 0, $lux, $luy, $l, $l, $rdx, $rdy);
        }
      }
      else{
        $new &= $im;
      }
      header('Content-Type: ' . $size['mime']);
      if( $size[2] == 2 ){@imagejpeg($new, $fileOut, 100);}
      elseif( $size[2] == 1 ){@imagegif($new, $fileOut);}
      elseif( $size[2] == 3 ){@imagepng($new, $fileOut);}
      @imagedestroy($im);
      @imagedestroy($new);
    }
    
    ?>
    

    e la richiamo nello stesso modo ma non funziona.


  • Moderatore

    Non mi son spiegato..
    Come richiami OutThumb()?


  • Bannato User Attivo

    Scusami Massy, avevo postato il codice errato.
    Grazie a tuoi SEMPRE utili consigli sono riuscito a far funzionare la funzione.

    Essa mi crea l'anteprima quadrata e funziona solo per le jpg... Non so se funge anche per le png.

    Ricapitolando:

    fate una pagina e chiamatela resize.php o simile e dentro mettete questo codice:

    <?php
    function GDVersion(){
      if( !in_array('gd', get_loaded_extensions()) ) return 0;
      elseif( isGD2supported() ) return 2;
      else return 1;
    }
    function isGD2supported(){
      global $GD2;
      if( isset($GD2) AND $GD2 ) return $GD2;
      else{
        $php_ver_arr = explode('.', phpversion());
        $php_ver = intval($php_ver_arr[0])*100+intval($php_ver_arr[1]);
    
        if( $php_ver < 402 ){ // PHP <= 4.1.x
          $GD2 = in_array('imagegd2',get_extension_funcs("gd"));
        }
        elseif( $php_ver < 403 ){ // PHP = 4.2.x
          $im = @imagecreatetruecolor(10, 10);
          if( $im ){
            $GD2 = 1;
            @imagedestroy($im);
          }
          else $GD2 = 0;
        }
        else{ // PHP = 4.3.x
          $GD2 = function_exists('imagecreatetruecolor');
        }
      }
    
      return $GD2;
    }
    
    function OutThumb($src, $l){
      $size = getimagesize($src);
      if( $size[2] == 2 ){$im = @imagecreatefromjpeg($src);}
      elseif( $size[2] == 1 ){$im = @imagecreatefromgif($src);}
      elseif( $size[2] == 3 ){$im = @imagecreatefrompng($src);}
      if( $size[0]>$l or $size[1]>$l ){
        $centerX = $size[0]/2;
        $centerY = $size[1]/2;
        if( $size[0] > $size[1] ){
          $luy = 0;
          $lux = $centerX-$centerY;
          $rdy = $size[1];
          $rdx = $size[1];
        }
        else{
          $lux = 0;
          $luy = $centerY-$centerX;
          $rdx = $size[0];
          $rdy = $size[0];
        }
    
        if( (GDVersion() == 2) AND ($size[2] != 1) ){
          $new = imagecreatetruecolor($l, $l);
          imagecopyresampled($new, $im, 0, 0, $lux, $luy, $l, $l, $rdx, $rdy);
        }
        else{
          $new = imagecreate($l, $l);
          imagecopyresized($new, $im, 0, 0, $lux, $luy, $l, $l, $rdx, $rdy);
        }
      }
      else{
        $new &= $im;
      }
      header('Content-Type: ' . $size['mime']);
      if( $size[2] == 2 ){@imagejpeg($new, $fileOut, 100);}
      elseif( $size[2] == 1 ){@imagegif($new, $fileOut);}
      elseif( $size[2] == 3 ){@imagepng($new, $fileOut);}
      @imagedestroy($im);
      @imagedestroy($new);
    }
    
    //$l = $_REQUEST['l'];
    $l = 100;
    $src = $_REQUEST['src'];
    OutThumb($src, $l);
    ?>
    

    Poi quando vi serve l'anteprima scrivete:

    <img src=\"../include/pics-resize-pics.php?l=200&src=../pics/reviews/$rowimg[pics_url]\">
    

    Attenzione, per le foto sotto i 200 pixel mi dava errore in questa riga:
    $new &= $im;

    Se la modifico in
    $new = $im;

    mi funziona. Massi, quell'errore è dovuto ad una copiatura errata del codice od effettivamente dovrebbe funzionare con il &=
    grazie,.


  • User

    di funzionare funziona...

    solo che non prende le .gif, le .png si, alla perfezione...

    qualcuno ha risolto per quanto riguarda le gif?

    thanks!


  • User

    ho risolto,

    basta mettere un valore numerico alla riga

    @imagegif($new, $fileOut);

    scrivete

    @imagegif($new, $fileOut, 100);

    non so perchè ma ora funziona...

    volendo ora memorizzare l'immagine in una cartella con relativo nome su db chi si offre per suggerimenti?


  • Moderatore

    sarebbe preferibile aprire un altro topic non credi? 🙂

    posta ovviamente anche il codice 😉