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

    [gd] Ridimensiona immagine crea file tutto nero

    Ciao a tutti,
    ho fatto un programma con delle classi per elaborare delle immagini inserite in un database. Le immagini quando vengono viste vengono copiate e ridimensionate in una cartella in modo da fare una cache senza doverlo fare tutte le volte. Teoricamente funziona tutto per bene, ma quando ne crea troppe contemporaneamente avvengono dei problemi strani: alcune immagini sono completamente bianche oppure completamente nere. Se invece le stesse che nascono male le ricreo vengono bene, quindi sono sicuro che lo script funzioni correttamente.
    Quindi diciamo che sto cercando di capire, subito dopo aver elaborato l'immagine, se questa è venuta bene o se il file prodotto sia un file jpg valido e non un file corrotto: e qui nasce il mistero... come faccio a capire se un file è un jpg valido?
    Grazie massimo

  2. #2
    Se abiliti la visualizzazione degli errori ottieni qualche messaggio utile?
    Nel log del web server c'è scritto qualche cosa di utile?
    A quanto è impostato il memory_limit?
    Elimini eventuali risorse allocate non appena hai terminato una elaborazione in modo da non esaurire la memoria disponibile?

  3. #3
    Ciao, allora errori non escono solo che quando prepara tante immagini alcune hanno quel problema. Gli errori sono abilitati ecc.. forse aumentanto il memory limit potrebbe migliorare?? Ora provo e provo a guardare anche il log...
    Intanto ti incollo le parti interessanti della classe tante volte potesse servire:


    Codice PHP:
            public function __construct($idmovimentofoto=false,$ritaglia=false){
                if (!
    $idmovimentofoto) {
                    return;
                }
                
    $this->id $idmovimentofoto;
                
    $cartella_pictures     realpath(dirname(__FILE__) . "/../../public/gallery/picture").$this->sotto_cartella;
                
    $nomefile             $idmovimentofoto.".jpg";
                
    $this->file            $cartella_pictures.$nomefile;
                if (!
    file_exists($this->file)) {
                    
    $sql "
                        SELECT
                            foto_originale
                        FROM movimentofoto
                        WHERE idmovimentofoto = '
    $idmovimentofoto'
                    "
    ;
                    
    $qry     mysql_query($sql);
                    
    $nrec    mysql_num_rows($qry);
                    if (
    $qry AND $nrec) {
                        
    $row                         mysql_fetch_array($qry);
                        
    $this->foto_originale         $row["foto_originale"];
                        
    file_put_contents($this->file,$this->foto_originale);
                    }
                }
    //            echo "ok=".$this->is_ok()."
    ";
                if (!
    $this->is_ok()) {
                    if (
    $ritaglia) {
                        
    $this->ritaglia();
                    }
                    
    $this->ridimensiona();
                }
                
            }

            public function ridimensiona(){
                    
    $source = imagecreatefromjpeg($this->file);
                    if (
    $this->is_orizzontale()) {
                        
    $new_width     = intval($this->max_width);
                        
    $new_height    = intval($new_width * $this->height() / $this->width());
                    }else{
                        
    $new_height    = intval($this->max_height);
                        
    $new_width    = intval($new_height * $this->width() / $this->height());
                    }
                    
    $dest         = imagecreatetruecolor($new_width$new_height);
                    
    $img         = imagecopyresampled($dest$source, 0, 0, 0, 0, $new_width,$new_height$this->width(), $this->height());
                    imagejpeg(
    $dest$this->file, 60);
                    
    $this->get_proprieta(true);
            }
            public function ritaglia(){
                    
    $source     = imagecreatefromjpeg($this->file);
                    if (
    $this->is_orizzontale()){
                        
    $cornice    = ($this->height()/10);
                        
    $new_width     = intval($this->height()-$cornice-$cornice);
                        
    $new_height    = $new_width;
                        
    $x             = intval(($this->width()-$new_width)/2);
                        
    $y             = $cornice
                    }else{
                        
    $cornice    = ($this->width()/10);
                        
    $new_height    = intval($this->width()-$cornice-$cornice);
                        
    $new_width    = $new_height;
                        
    $x             = $cornice
                        
    $y             = intval(($this->height()-$new_height)/2);
                    }
                    
    $dest         = imagecreatetruecolor($new_width$new_height);
                    
    $img         = imagecopyresampled($dest$source, 0, 0, $x$y$new_width,$new_height$new_width,$new_height);
                    imagejpeg(
    $dest$this->file, 60);
                    
    $this->_proprieta = getimagesize($this->file);
            } 

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.