[PHP] Problema resize di immagine da db

tivovi74

Utente Attivo
31 Gen 2012
58
1
8
Ciao a tutti, avrei bisogno di un aiuto.....
Vorrei fare il resize di immagini richiamate da un db attraverso una query
Il tutto è in una funzione php, la posto così è più semplice e poi spiego cosa succede

PHP:
function usato(){
global $mysqli;
$sql = 'SELECT id_prodotto_usato, nome, descrizione, prezzo, foto_principale FROM prodotti_usati WHERE stato_vendita="in_vendita"  ORDER BY id_prodotto_usato desc LIMIT 6';
$result = $mysqli->query($sql);
$totale = $result->num_rows;
$out = '<article id="vetrina">';
$out.='<h2 class="text_grey">La Vetrina dell\'Usato:</h2>';
    while ($row = $result->fetch_array()){
        $immagine = $row['foto_principale'];;
        $id = $row['id_prodotto_usato'];
        $larghezza = 200;
        $altezza = 133;
        $salvataggio = 'img/annunci_usato/miniature/vetrina_'.$id.'.jpg';
     
function resize($immagine, $id, $larghezza, $altezza, $salvataggio){

// File and new size

$filename = $immagine;

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

// Get new sizes
list($width, $height) = getimagesize($filename);
$newwidth = $larghezza;
$newheight = $altezza;

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

// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

// Output
imagejpeg($thumb, $salvataggio, 72);
imagedestroy($thumb);
return ($salvataggio);
};
        $img = resize($immagine, $id, $larghezza, $altezza, $salvataggio);
       
        $out.='<article class="float">';
       
        $out.= '<img src="'.$img.'" />';
        $out.='<h2>'.$row['nome'].'</h2>';
        $descrizione = nl2br ($row['descrizione']);
        $out.='<h3>'.$descrizione.'</h3>';
        $number = $row['prezzo'];
        $number = number_format ($number, 2, ',', '.');
        $out.='<h4>'.$number.'</h4>';
        $out.='</article>';
        };
       
$out.='</article>';   
return ($out);
};



  1. Primo problema: la funzione resize mi salva solo una immagine, non dovrebbe ripetersi in automatico essendo all'interno di ciclo while?
  2. Secondo problema: la pagina web diventa completamente bianca. Ispezionando con chrome, ho visto che nel body è presente solo un tag img, il cui src è uguale all'url della pagina. è come se la funzione usato (la prima) si interrompesse al termine della funzione resize.
Vi ringrazio sin d'ora per l'aiuto.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
porta fuori la function resize dalla function usato()
PHP:
<?php
function resize($immagine, $id, $larghezza, $altezza, $salvataggio){
    //.......
}
function usato(){
    global $mysqli;
    //....
    $img = resize($immagine, $id, $larghezza, $altezza, $salvataggio);
    //....
}


?>
 

tivovi74

Utente Attivo
31 Gen 2012
58
1
8
Ciao Borgo, grazie mille.
Ora in effetti le miniature vengono salvate perfettamente, il primo problema è risolto!
Persiste, invece, il secondo, la pagina è sempre bianca, ti riposto il codice come modificato dopo il tuo aiuto:
PHP:
function resize($immagine, $id, $larghezza, $altezza, $salvataggio){

// File and new size

$filename = $immagine;



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

// Get new sizes
list($width, $height) = getimagesize($filename);
$newwidth = $larghezza;
$newheight = $altezza;

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

// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

// Output
imagejpeg($thumb, $salvataggio, 72);
imagedestroy($thumb);
//return ($salvataggio);
}
function usato(){
global $mysqli;
$sql = 'SELECT id_prodotto_usato, nome, descrizione, prezzo, foto_principale FROM prodotti_usati WHERE stato_vendita="in_vendita"  ORDER BY id_prodotto_usato desc LIMIT 6';
$result = $mysqli->query($sql);
$totale = $result->num_rows;
$out = '<article id="vetrina">';
$out.='<h2 class="text_grey">La Vetrina dell\'Usato:</h2>';
    while ($row = $result->fetch_assoc()){
       
        $immagine = $row['foto_principale'];;
        $id = $row['id_prodotto_usato'];
        $larghezza = 200;
        $altezza = 133;
        $salvataggio = 'img/annunci_usato/miniature/vetrina_'.$id.'.jpg';

$img = resize($immagine, $id, $larghezza, $altezza, $salvataggio);       

       
        $out.='<article class="float">';
       
        $out.= '<img src="img/annunci_usato/miniature/vetrina_'.$id.'.jpg" />';
        $out.='<h2>'.$row['nome'].'</h2>';
        $descrizione = nl2br ($row['descrizione']);
        $out.='<h3>'.$descrizione.'</h3>';
        $number = $row['prezzo'];
        $number = number_format ($number, 2, ',', '.');
        $out.='<h4>'.$number.'</h4>';
        $out.='</article>';
        };
       
$out.='</article>';   
return ($out);
};

Spero tu possa aiutarmi ancora.
Grazie.
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
quelloc he dico probabilemnte è una cavolata ma se non richiami la funzione
PHP:
echo usato();
non ti uscirà mai niente
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
monital ha ragione, io non l'ho detto perchè mi sembrava evidente, comunque un'osservazione sul resize che fatto in quel modo ti obbliga a fare le immagini tutte in proporzione alla w e h che gli dai.
se non le rispetti sull'originale le immagini ti possono venire deformate o in larghezza o in altezza.
io farei qualcosa del genere
PHP:
<?php
function resize($immagine, $id, $larghezza, $altezza, $salvataggio){
    //.....
    list($width, $height) = getimagesize($filename);
    $rap[]=$larghezza/$width;
    $rap[]=$altezza/$height;
    $r=min($rap);
    $newwidth =(int)($r*$larghezza);
    $newheight = (int)($r*$altezza);
    //......
}
?>
in questo modo le immagini non si deformano senza preuccuparti che la loro w e h originale sia o no diversa dal rapporto 133/200
 

tivovi74

Utente Attivo
31 Gen 2012
58
1
8
Si echo usato per attivare la function usato è già nel codice html della pagina. Prima che inserissi la function resize funzionava tutto. Adesso invece è come se venisse eseguito solo il codice relativo alla funzione resize e basta. Grazie per il suggerimento sulla funzione, la implementerò sicuramente.
 

tivovi74

Utente Attivo
31 Gen 2012
58
1
8
Ragazzi ho risolto, bastava spostare
PHP:
$img = resize($immagine,$id);
fuori da ciclo while.
Grazie mille per gli aiuti precedenti.
A presto.
 

tivovi74

Utente Attivo
31 Gen 2012
58
1
8
Scusate, ma in realtà mi sono accorto che c'era un errore...... Funzionava solo perchè in uno dei tentativi precedenti si erano salvate le immagini sulla cartella....

Per far caricare correttamente ho spostato
PHP:
$img = resize($immagine, $id, $salvataggio);
dopo
PHP:
return ($out);
della funzione usato. A questo punto, però la funzione resize non va più, le immagini non vengono più salvate.
Per far salvare correttamente le foto, invece, devo inserire
PHP:
$img = resize($immagine, $id, $salvataggio);
nel ciclo while della funzione usato, però poi si blocca l'esecuzione del codice e la pagina non si carica, come se la funzione usato non arrivasse alla fine. Vi posto di nuovo il codice, riuscireste a spiegarmi come mai?
Grazie mille.
PHP:
function resize($immagine, $id, $salvataggio){

// File and new size

$filename = $immagine;
$percorso = $salvataggio;
$larghezza = 200;
$altezza = 133;
// Content type
header('Content-Type: image/jpeg');

// Get new sizes
list($width, $height) = getimagesize($filename);
$newwidth = $larghezza;
$newheight = $altezza;

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

// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

// Output
imagejpeg($thumb, $percorso, 72);
imagedestroy($thumb);
//return ($percorso);
};

function usato(){
global $mysqli;
$sql = 'SELECT id_prodotto_usato, nome, descrizione, prezzo, foto_principale FROM prodotti_usati WHERE stato_vendita="in_vendita"  ORDER BY id_prodotto_usato desc LIMIT 6';
$result = $mysqli->query($sql);
$out = '<article id="vetrina">';
$out.='<h2 class="text_grey margin 10">La Vetrina dell\'Usato:</h2>';
    while ($row = $result->fetch_assoc()){
        $immagine = $row['foto_principale'];;
        $id = $row['id_prodotto_usato'];
        $salvataggio = 'img/annunci_usato/miniature/vetrina_'.$id.'.jpg';
           
        $out.='<article class="float margin_5 vetrina_prd">';

        $out.= '<img src="img/annunci_usato/miniature/vetrina_'.$id.'.jpg" />';
        $out.='<p class="bold">'.$row['nome'].'</p>';
        $descrizione = nl2br ($row['descrizione']);
        $out.='<p>'.$descrizione.'</p>';
        $number = $row['prezzo'];
        $number = number_format ($number, 2, ',', '.');
        $out.='<p class="bold">'.$number.'</p>';
        $out.='</article>';
       
        };       
$out.='</article>';   
return ($out);
$img = resize($immagine,$id, $salvataggio);
};
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
ci do un occhio per beme appena posso (se hai un po' di pazienza), ma c'è una cosa che mi salta subito all'occhio
PHP:
//.......
        };       
$out.='</article>';   
return ($out);
$img = resize($immagine,$id, $salvataggio);
};
le istruzioni dopo il return nonvengono eseguite
 

tivovi74

Utente Attivo
31 Gen 2012
58
1
8
Borgo grazie mille, figurati nessuna fretta, ne ho da fare, sono solo alla index... :)
avevo letto che le istruzioni dopo il return non vengono eseguite, in realtà la funzione fa il suo dovere (ovvero ridimensiona e salva) se inserisco la chiamata nel ciclo while, però poi è come se andasse in loop e non legge il restante codice.....
Grazie ancora per l'aiuto.
a presto.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
ho notato una cosa, nella funzione hai commentato il return, evidentemente perche la funzione non ti deve restituire un qualche valore
ti schematizzo due possibilità
PHP:
<?php
function resize($immagine, $id, $salvataggio){
    //......
    //return ($percorso);
}
?>
ma facendo così la funzione resize si ferma senza passare nuovamente il controllo a usato, per prima cosa fai questa prova, un return vuoto
PHP:
<?php
function resize($immagine, $id, $salvataggio){
    //......
    return;
}
?>
in questo modo quando la resize ha terminato il suo compito ripassa il controllo alla funzione usato
un altro metodo potrebbe essere scegliere una istruzione in resize e con un if dare due return es.
PHP:
<?php
function resize($immagine, $id, $salvataggio){
    //......
    if(!imagejpeg($thumb, $percorso, 72)){
        //la funzione non ha avuto successo
        return FALSE;
    }else{
        //la funzione è OK
        imagedestroy($thumb);
        return TRUE;
    }
}
?>
analogamente nella usato
PHP:
<?php
function usato(){
    global $mysqli;
    $sql = 'SELECT id_prodotto_usato, nome, descrizione, prezzo, foto_principale FROM prodotti_usati WHERE stato_vendita="in_vendita"  ORDER BY id_prodotto_usato desc LIMIT 6';
    $result = $mysqli->query($sql);
    //.......
    while ($row = $result->fetch_assoc()){
        //...
        if(!resize($immagine, $id, $salvataggio)){
            //la resize non ha funzionato
            continue;
        }else{
            //resize OK
            //e quindi costruisci tutta la variabile $out che poi andrai a resituire con il return
        }
    }
    //..
    return $out);
}
//.....
?>
dimenticavo: verifica che abbia messo le parentesi giuste, l'ho buttata giu di getto
 

tivovi74

Utente Attivo
31 Gen 2012
58
1
8
Grazie Borgo, ma purtroppo non va in nessuno dei due modi..... la funzione resize fa il suo dovere, non so se sia la chiamata all'interno del ciclo while che dia problemi di loop, però se la metto fuori mi salva solo una immagine e non le 6 che servono.....
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
scusa il ritardo, ma c'è qualcosa (che non capisco) che non torna nel tuo script, peròse guarsi negli articoli/quide c'è uno script (quello che uso) che funziona
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
ciao
scusa il ritardo, ma c'è qualcosa (che non capisco) che non torna nel tuo script, peròse guarsi negli articoli/quide c'è uno script (quello che uso) che funziona

borgo scusa ma io tempo fa feci una prova nella creazione di una funziona che non c'entra niente con le immagini, ma credevo di aver capito che non si può usare una funzione dentro una funzione sbaglio?
 
Discussioni simili
Autore Titolo Forum Risposte Data
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
D problema php mysql PHP 1
D problema php mysql PHP 1
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
A Problema checkout carrello php PHP 2
G Problema caricamento tabelle MySql da PhP PHP 0
M Problema con php per calcolo costo percentuale PHP 7
O Problema Formmail in PHP su Aruba PHP 0
WebmasterFioriniAndrea Chat e php [problema] PHP 3
L [PHP] Problema con Telegram PHP 1
WebmasterFioriniAndrea [PHP] Problema che non mi fa vedere niente PHP 2
A [PHP] Problema query insert [RISOLTO] PHP 14
N [Apache] problema con estensione php Apache 0
C [PHP] Problema con download file PHP 0
M [PHP] Problema con preg_match PHP 1
gandalf1959 [PHP] problema con l'utilizzo di Header PHP 3
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
M [PHP] Problema con query select PHP 2
L Problema jQuery validation AJAX (PHP 7) PHP 6
L Problema funzione mail() PHP PHP 3
S [PHP] Problema con istruzione "use" PHP 23
A Problema PHP PHP 1
T [php] problema creazione query select-where PHP 5
M [PHP] problema if PHP 3
L [PHP] Problema su codice o server PHP 5
T [PHP] problema maggiore e minore PHP 4
Cosina [PHP] fwrite problema con le parole accentate PHP 9
M [PHP] Problema search form PHP 3
F [PHP] Problema con number_format PHP 3
L [PHP] problema count messo in una funzione. PHP 1
P [PHP] Progettino CRUD di esercitazione. Problema su $_FILE. PHP 9
trattorino [PHP] problema entrata immagini insert PHP 1
C Apache Cordova problema con php Programmazione 1
trattorino problema raccapricciante php conteggio query PHP 4
T PHP+MYSQL: problema con quelle maledette lettere accentate... PHP 5
F [PHP] Problema con array multidimensionale PHP 4
F Problema con pagine login in PHP PHP 2
M [PHP] Problema script ricezione e invio posta... PHP 1
Kolop [RISOLTO][PHP] Problema Pagination PHP 2
C [PHP] Problema Invio Email Elseif PHP 2
A [PHP] Problema invio mail con funzione mail() PHP 3
gandalf1959 problema con la codifica caratteri accentati e speciali tra php e mysql PHP 3
L [PHP] Problema Script 'Not Found' PHP 4
webmachine [PHP][MYSQL] Problema con le SELECT PHP 5
alessandra86 [PHP] Popolamento database con form ricorsivi - problema array (foreach ) PHP 5
MattiaBL [PHP] Problema ciclo while PHP 3
dvdscr [PHP] Problema malfunzionamento Wordpress WordPress 13
O [PHP] Problema Button in form PHP 1
C [PHP] problema con un esercizio PHP 2
P [PHP] Problema con accenti ed apostrofi PHP 0

Discussioni simili