copiare record e ridimensionarli

Ciao,

volevo fare una domanda è possibile fare una script php che abbia uba query che copia delle immagini da tabella1 a tabella2 (tabelle presenti in un DB mysql) e quando li copia li ridimensiona nel peso e nella grandezza?

grazie

inviato 10 anni fa
stellina
X 0 X

Credo proprio di si, dovresti estrarre l'immagine dal DB e inserirla in una stringa. Poi con la funzione imagecreatefromstring la dai in pasto alle GD per ridimensionarla.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

procedendo per gradi,

se devo copiare l'immagine da tabella1 a tabella2 come posso fare l'update?

risposto 10 anni fa
stellina
X 0 X

Per fare un semplice "travaso" da una tabella ad un'altra conviene lanciare un unica query di tipo:

[tt]INSERT INTO ... SELECT FROM ...[/tt]

Se però hai intenzione di modificare i dati prima di inserirli nella tabella di destinazione allora devi effettuare prima una SELECT per estrarre i dati in questione ed una volta modificati i dati li inserisci con una (o più) INSERT.

Questo articolo mostra come inserire ed estrarre le immagini dal DB.

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

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

se sto per fare l'upload della foto nel db posso fare in modo che:

1) una foto venga salvata nel db così come sta (OK, già lo fa)

2) la stessa foto venga salvata in un'altra tabella già ridimensionata ???

QUi http://it2.php.net/manual/en/function.imagecreatefromstring.php

non dice  niente relativo al mio problema.

Quali sono i passi che devo compiere per poter fare il ridimensionamento??   :'(

Grazie  :bye:

risposto 10 anni fa
stellina
X 0 X

Se vuoi ridimensionare l'immagine al momento dell'upload allora non ti serve la funzione imagecreatefromstring poiché in questo contesto hai il file di partenza. Ti avevo suggerito di usare quella funzione se l'immagine di partanza era conservata nel DB. In qel caso non avendo il file dovevi caricare l'immagine partendo dalla stringa restituita dalla query di estrazione (SELECT).

Per ridimensionare un'immagine puoi prendere spunto dal primo script riportato in questo messaggio:

http://www.phpnews.it/forum/index.php?topic=619.msg4148#msg4148

Tieni presente che però quello script lavora solo con le jpeg e salva su file l'anteprima, non nel DB. Ma il salvataggio nel DB già lo dovresti saper fare.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ho abbastanza chiara la differenza tra i due tipi di ridimensionamento.

Per il ridimensionamento dell'immagine al momento dell'upload una cosa del tipo

$nuova_larghezza = 90;

$nuova_altezza = 68;

              

//ricavo la dimensione dell'immagine originale

list($larghezza_orig, $altezza_orig, $tipo, $attr) = getimagesize($_FILES['file_inviato1']['tmp_name']);

            

//creo una nuova immagine che conterrà l'anteprima

$immagine_temporanea = imagecreate($nuova_larghezza, $nuova_altezza);

            

//carico l'originale

$immagine = imagecreatefromjpeg($_FILES['file_inviato1']['tmp_name']);

            

//metto nella nuova immagine la riduzione dell'originale

imagecopyresized($immagine_temporanea, $immagine,0,0,0,0,$nuova_larghezza, $nuova_altezza, $larghezza_orig, $altezza_orig);

            

imagedestroy($immagine);

$immagine = $immagine_temporanea;

             

//salvo l'anteprima

imagejpeg($immagine);

Purtroppo non  ho capito che valori posso assegnare adesso alle variabili $nome_file_temporaneo1 $nome_file_vero1  $tipo_file1 $dati_file1 per poter poi fare l'inserimento nel db???

 :(

risposto 10 anni fa
stellina
X 0 X

Per inserire nel database l'immagine ridimensionata devi "catturare" l'output prodotto dalla funzione imagejpeg in modo che non vada al browser o in un file ma in una stringa (da inserire poi nella query). Potresti procedere in questo modo:

ob_start(); // Tutto l'output prodotto da questo momento sarà "catturato" da un buffer (e non inviato al browser)

imagejpeg($immagine); // produce l'output

$ImageData = ob_get_contents(); // prendo l'output catturato e lo metto in una variabile

ob_end_clean(); // arresto la cattura dell'output e svuoto il buffer

Prepara poi la query con l'imagine conservata in $ImageData

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Il procedimento ha qualche problema,

La copia nella seconda tabella funziona ma il ridimensionamento no. Come mai???

Che cosa c'è che non va nella fase di ridimensionamento??

risposto 10 anni fa
stellina
X 0 X

Riporta tutto il codice

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
$nuova_larghezza = 90;

$nuova_altezza = 68;

              

//ricavo la dimensione dell'immagine originale

list($larghezza_orig, $altezza_orig, $tipo, $attr) = getimagesize($_FILES['file_inviato1']['tmp_name']);

            

//creo una nuova immagine che conterrà l'anteprima

$immagine_temporanea = imagecreate($nuova_larghezza, $nuova_altezza);

            

//carico l'originale

$immagine = imagecreatefromjpeg($_FILES['file_inviato1']['tmp_name']);

            

//metto nella nuova immagine la riduzione dell'originale

imagecopyresized($immagine_temporanea, $immagine,0,0,0,0,$nuova_larghezza, $nuova_altezza, $larghezza_orig, $altezza_orig);

            

imagedestroy($immagine);

$immagine = $immagine_temporanea;

             

ob_start(); // Tutto l'output prodotto da questo momento sarà "catturato" da un buffer (e non inviato al browser)

imagejpeg($immagine); // produce l'output

$imagedata = ob_get_contents(); // prendo l'output catturato e lo metto in una variabile

ob_end_clean(); // arresto la cattura dell'output e svuoto il buffer

// query per inserire il file nel DB 

$query5 = "INSERT INTO tabella_files_small SET 

   nome_file = '$nome_file_vero1', 

   tipo_file = '$tipo_file1', 

   dati_file = '$imagedata'";

con questo codice trovo dentro tabella_files_small la foto con dimensioni nel campo blob di 230 bytes

ma se cerco di visualizzarla come faccio di solito attraberso il file mostra.php vedo il quadratino con la croce.

???

risposto 10 anni fa
stellina
X 0 X

credo di aver risolto,

ho aggiunto addslashes($imagedata);

e quanto pare funziona tutto.

risposto 10 anni fa
stellina
X 0 X

Questo codice vale per immagini jpg,

purtroppo non so se l'utente inserisce jpg o altro.

A questo punto dovrei fare un controllo sul tipo dei file durente la fase di caricamento. L'univa istruzuione che cambia in base al formato è questa???

//carico l'originale

$immagine = imagecreatefromjpeg($_FILES['file_inviato1']['tmp_name']);
risposto 10 anni fa
stellina
X 0 X

devi cambiare anche imagejpeg

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

ho un problema con le bitmap:

$immagine = imagecreatefromwbmp($_FILES['file_inviato1']['tmp_name']); 

....  

imagewbmp($immagine); 

            

Questo è l'errore riportato:

 imagecreatefromwbmp(): '/tmp/phpTWBiKx' is not a valid WBMP file

Che spiegazione c'è??? Con gli altri formati non mi da nessun problema.

risposto 10 anni fa
stellina
X 0 X

TI riporto il primo commento presente nella documentazione ufficiale:

WBMP images are Wireless Bitmaps, not Windows Bitmaps. WBMP is used for bandwidth constrained, black and white, limited devices such as PDAs and Cell Phones.
risposto 10 anni fa
Gianni Tomasicchio
X 0 X

quindi per le bitmap non c'è alcuna funzione??

risposto 10 anni fa
stellina
X 0 X

No, non sono supportate nativamente dalle GD, comunque quì sembra che un tizio abbia scritto una funzione in PHP per caricare un BMP con le GD (secondo commento):

http://it2.php.net/imagecreate

In generale ho visto molti script convertire la bmp in png e poi caricarla. La conversione viene fatta con programmi in esecuzione sul server richiamati via PHP.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

so chè passato un pò di tempo ma volevo fare una segnalazione in merito a questa discussione:

mi sono accorta che molte volte le immagini piccoline non sono ben definite.

Per esempio una foto grande con il mare di sfondo, rimpicciolta risulta avere unso sfondo azzurrino come se davanti alla foto fosse stato messo un vetrino azzurro.

In altri casi le foto perdono paticolari evidenti. Altre diventano in bianco e nero.

Molte foto piccoline sarebbero da "buttare"!

Cosa è successo???

 :bye:

risposto 10 anni fa
stellina
X 0 X

stai usando imagecreate o imagecreatetruecolor ?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Utilizzo imagecreate cmq ti riporto il codice cosi vedi se c'è qualcosa che non va:

$nuova_larghezza = 90;

$nuova_altezza = 68;

              

list($larghezza_orig, $altezza_orig, $tipo, $attr) = getimagesize($_FILES['file_inviato1']['tmp_name']);

              

 $immagine_temporanea = imagecreate($nuova_larghezza, $nuova_altezza);

$immagine = imagecreatefromjpeg($_FILES['file_inviato1']['tmp_name']);               

imagecopyresized($immagine_temporanea, $immagine,0,0,0,0,$nuova_larghezza, $nuova_altezza, $larghezza_orig, $altezza_orig);

             

imagedestroy($immagine);

$immagine = $immagine_temporanea;

ob_start();             

imagejpeg($immagine); 

$imagedata = ob_get_contents(); 

ob_end_clean(); 

$dati_file1= addslashes($imagedata);

 :bye:

risposto 10 anni fa
stellina
X 0 X

prova allora ad usare imagecreatetruecolor e vedi se la qualità migliora.

 :bye:

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