Ridimensionare un'immagine

Ciao,

Devo visualizzare un'immagine che ho precedentemente memorizzato in un db.

Se le dimensioni (larghezza e altezza) eccedono un limite vorrei ridimensionare l'immagine mantenendo le proporzioni.

Ho letto alcuni post ma se non ho capito male per farlo occorre aver installato la libreria GD.

Non credo di averla a disposizione....non so se sul server e' installata ne so come potrei scoprirlo

Vorrei sapere se posso risolvere il mio problema senza la libreria o se e' possibile non installare la libreria e includerla nel codice

Grazie

inviato 10 anni fa
purpitta
X 0 X

puoi scoprirlo con phpinfo();

produce un output con tutte le estensioni e le caratteristiche del php sul server su cui eseguito , in questo modo ti basta cercare GD e vedere se sono nominate ( se si sono installate )

ciao

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Con getimagesize() puoi conoscere alcune caratteristiche dell'immagine da processare.

list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");

Per esempio se l'immagine supera una certa dimensione, puoi decidere se ridimensionarla.

Ma per ridimensionarla deve necessariamente usare le librerie grafiche, senza di quelle puoi fare ben poco, anzi direi senza dubbio, nulla.

risposto 10 anni fa
Marco Grazia
X 0 X

grazie per le risposte....

ho risolto, sono riuscita a istallare la libreria e ho usato lo script publicato da gianni....

Pero' mi resta ancora un problema:

Non voglio memorizzare l'anteprima in un file ma vorrei memorizzarla direttamente in un db.

E' possibile?

grazie a tutti

risposto 10 anni fa
purpitta
X 0 X

certo che possibile. Una volta creata l'alteprima, invece di inviarla al browser la metti in una query INSERT. Puoi fare riferimento a questo esempio:

http://www.phpnews.it/content/view/213/80/1/2/

:bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

mi sa che non ho capito qualcosa, ho provato a salvarlo nel db proprio come mi hai suggerito ma non mi da nessun errore pero' non salva correttamente l'immagine.

Posto il codice


$larghezza_max = 150;
$altezza_max = 150;
list($larghezza, $altezza, $type) = getimagesize($immagine);
if ( ( $larghezza > $larghezza_max ) || ( $altezza > $altezza_max ) )
{
  echo "Le dimensioni dell'immagine sono ".$larghezza."x".$altezza."<br>
dovrebbero essere al max $larghezza_max"."x"."$altezza_max<br>
        L'immagine verra' ridimensionata nel seguente modo<br>";
if ($larghezza < $altezza) 
{
   $larghezza_max = ($altezza_max / $altezza) * $larghezza; 
} 
else 
{ 
   $altezza_max = ($larghezza_max / $larghezza) * $altezza;
}
// creo una nuova immagine, che conterra' l'anteprima
$image_new = imagecreatetruecolor($larghezza_max, $altezza_max);
//$path = "../../anteprime/logo".$_POST["codicescuola"];
switch ($type) 
{
        case 1://GIF
        $type = "gif";
$image = imagecreatefromgif($immagine);
// metto nella nuova immagine la "riduzione" dell'originale
imagecopyresampled($image_new, $image, 0, 0, 0, 0, $larghezza_max,     $altezza_max, $larghezza, $altezza);
//salvo l'anteprima
//$path .= ".".$type;
//imagegif($image_new, $path);
break;
 case 2://JPG
$type = "jpg";
$image = imagecreatefromjpeg($immagine);
// metto nella nuova immagine la "riduzione" dell'originale
imagecopyresampled($image_new, $image, 0, 0, 0, 0, $larghezza_max, $altezza_max, $larghezza, $altezza);
//salvo l'anteprima
//$path .= ".".$type;
//imagejpeg($image_new, $path);
break;
case 3://PNG
$type = "png";
$image = imagecreatefrompng($immagine);
// metto nella nuova immagine la "riduzione" dell'originale
imagecopyresampled($image_new, $image, 0, 0, 0, 0, $larghezza_max, $altezza_max, $larghezza, $altezza);
//salvo l'anteprima
//$path .= ".".$type;
//imagepng($image_new, $path);
           break;
}
//list($larghezza, $altezza, $tipo, $attr) = getimagesize($path);//questa riga mi da errore se invece di path metto image_new
//echo '<img src="'.$path.'" alt="logo" '.$attr.'><br>';
$db = new Database();
        $db->DB_init();
        $image_new = addslashes($image_new); 
// query per inserire il logo nel DB 
  $sql = "INSERT INTO scuole(logo) VALUES( $image_new) "
 $db->query($sql);
$db->DB_disconnect();
        imagedestroy($image_new);
}
risposto 10 anni fa
purpitta
X 0 X

Certo, $image_new non contiene i dati che costituiscono l'immagine ma una variabile che contiene un riferimento all'immagine stessa.

Devi procedere invece in questo modo (esempio valido per le jpeg). Catturare l'output prodotto da imagejpeg attraverso le funzioni che gestiscono il buffer dell'output, proteggere i dati per la query con addslashes:

ob_start(); // avvia il buffering (la conservazione) di tutto ci che verr emesso in output
imagejpeg( $newimage, NULL, 100 );
$ImageData = addslashes(ob_get_contents()); // recupero i dati salvati nel buffer
ob_end_clean(); // cancello il buffer

Solo ora puoi inserire $ImageData nel DB. I dati che sarebbero stati inviati al browser adesso invece confluiscono all'interno della variabile $ImageData.

:bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

grazie gianni......

il problema l'ho risolto ma me ne e' sorto un altro, in questo modo non riesco a visualizzarlo......l'output che ottengo e' :

Le dimensioni dell'immagine sono 972x121

dovrebbero essere al max 150x150

L'immagine verra' ridimensionata nel seguente modo

JFIF&¾v 7]ƻ;E"&n;.IUmX{b=QtOW|9& \@xwy5 SLIQErv^?

Salvare comunque l'immagine?

io vorrei l'immagine al posto di quelle info incomprensibili.

ho provato a mettere dopo ob_end_clean();

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

echo $ImageData;

ma il risultato e' sempre lo stesso

risposto 10 anni fa
purpitta
X 0 X

il codice che ti ho riportato serviva solo per salvare l'immagine prodotta nel database, non per mostrarla.

Per mostrarla ti serve creare uno script adeguato che effettui la select per estrarre l'immagine dal DB, come mostrato qui:

http://www.phpnews.it/content/view/213/80/1/4/

:bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

ok

quindi se voglio visualizzare l'immagine prima di salvarla sul db per chiedere conferma di salvataggio all'utente devo per forza salvarla in un file e successivamente salvare il file nel db

grazie mille per l'aiuto

ciao

risposto 10 anni fa
purpitta
X 0 X

:'( :'( :'( :'( :'( :'( :'( :'(

scusate se sono cosi dura ma non ci riesco :'( :'( :'( :'(

allora l'utente mi chiede di salvare un file immagine, io controllo le dimensioni larghezza e altezza, se queste eccedono un limite da me imposto l'immagine deve essere ridimensionata......

chiedo quindi all'utente se vuole comunque ridimensionarla se risponde si allora salvo l'immagine nel db altrimenti annullo l'operazione

questo e' quello che vorrei fare, in realta' non ci riesco, perche' grazie all'aiuto di gianni sono riuscita a ridimensionare l'immagine ma come faccio poi a passarla con un form alla pagina successiva che controlla se salavare il file o no?

riesco a fare tutto eccetto passare l'immagine nuova con il form

help

risposto 10 anni fa
purpitta
X 0 X

Non puoi passare l'immagine da una pagina all'altra. Devi necessaiamente conservarla sul server, salvandola magari in una cartella e memorizzando in sessione il nome del file. Se l'utente accetta effettui il ridimensionamento altrimenti cancelli l'immagine.

:bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

ok,

in pratica la soluzione iniziale che salvava temporaneamente il file ridimensionato era la soluzione (e la migliore...)

:'(

grazie mille

risposto 10 anni fa
purpitta
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda